apoc.nlp.aws.entities.graph
过程 Apoc 扩展
为提供的文本创建(虚拟)实体图
安装依赖
NLP 过程依赖于 Kotlin 和客户端库,这些库未包含在 APOC Extended 库中。
这些依赖项包含在 apoc-nlp-dependencies-2025.10.0-all.jar 中,可从 发布页面 下载。下载该文件后,应将其放入 plugins 目录并重启 Neo4j 服务器。
设置 API 密钥
我们可以按照 docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html 上的说明生成访问密钥和密码。完成后,我们可以填充并执行以下命令来创建包含这些详细信息的参数。
apiKey 和 apiSecret 参数
:param apiKey => ("<api-key-here>");
:param apiSecret => ("<api-secret-here>");
或者,我们可以将这些凭据添加到 apoc.conf 中,并使用静态值存储函数来检索它们。
apoc.static.aws.apiKey=<api-key-here>
apoc.static.aws.apiSecret=<api-secret-here>
apoc.conf 中检索 AWS 凭据
RETURN apoc.static.getAll("aws") AS aws;
| aws |
|---|
{apiKey: "<api-key-here>", apiSecret: "<api-secret-here>"} |
用法示例
本节中的示例基于以下示例图
CREATE (:Article {
uri: "/blog/pokegraph-gotta-graph-em-all/",
body: "These days I’m rarely more than a few feet away from my Nintendo Switch and I play board games, card games and role playing games with friends at least once or twice a week. I’ve even organised lunch-time Mario Kart 8 tournaments between the Neo4j European offices!"
});
CREATE (:Article {
uri: "https://en.wikipedia.org/wiki/Nintendo_Switch",
body: "The Nintendo Switch is a video game console developed by Nintendo, released worldwide in most regions on March 3, 2017. It is a hybrid console that can be used as a home console and portable device. The Nintendo Switch was unveiled on October 20, 2016. Nintendo offers a Joy-Con Wheel, a small steering wheel-like unit that a Joy-Con can slot into, allowing it to be used for racing games such as Mario Kart 8."
});
我们可以使用此过程自动创建实体图。除了拥有 Entity 标签外,每个实体节点还将根据 type 属性的值拥有另一个标签。默认情况下,返回的是虚拟图。
MATCH (a:Article {uri: "/blog/pokegraph-gotta-graph-em-all/"})
CALL apoc.nlp.aws.entities.graph(a, {
key: $apiKey,
secret: $apiSecret,
nodeProperty: "body",
writeRelationshipType: "ENTITY"
})
YIELD graph AS g
RETURN g;
我们可以在 宝可梦实体图 中查看该虚拟图的 Neo4j Browser 可视化效果。
我们可以通过将节点列表传递给该过程,来为多个节点计算实体。
MATCH (a:Article)
WITH collect(a) AS articles
CALL apoc.nlp.aws.entities.graph(articles, {
key: $apiKey,
secret: $apiSecret,
nodeProperty: "body",
writeRelationshipType: "ENTITY"
})
YIELD graph AS g
RETURN g
我们可以在 宝可梦和任天堂 Switch 实体图 中查看该虚拟图的 Neo4j Browser 可视化效果。
在此可视化中,我们还可以看到每个实体节点的得分。此得分代表 API 对其检测该实体的置信度。我们可以使用 scoreCutoff 属性为得分指定最低截止值。
MATCH (a:Article)
WITH collect(a) AS articles
CALL apoc.nlp.aws.entities.graph(articles, {
key: $apiKey,
secret: $apiSecret,
nodeProperty: "body",
scoreCutoff: 0.7,
writeRelationshipType: "ENTITY"
})
YIELD graph AS g
RETURN g
我们可以在 置信度 >= 0.7 的宝可梦和任天堂 Switch 实体图 中查看该虚拟图的 Neo4j Browser 可视化效果。
如果我们对这个图感到满意并希望将其持久化到 Neo4j 中,可以通过指定 write: true 配置来实现。
HAS_ENTITY 关系
MATCH (a:Article)
WITH collect(a) AS articles
CALL apoc.nlp.aws.entities.graph(articles, {
key: $apiKey,
secret: $apiSecret,
nodeProperty: "body",
scoreCutoff: 0.7,
writeRelationshipType: "HAS_ENTITY",
writeRelationshipProperty: "awsEntityScore",
write: true
})
YIELD graph AS g
RETURN g;
然后,我们可以编写一个查询来返回已创建的实体。
MATCH (article:Article)
RETURN article.uri AS article,
[(article)-[r:HAS_ENTITY]->(e:Entity) | {text: e.text, score: r.awsEntityScore}] AS entities;
| article | entities |
|---|---|
"/blog/pokegraph-gotta-graph-em-all/" |
[{score: 0.9944096803665161, text: "Mario Kart 8"}, {score: 0.8760746717453003, text: "twice a week"}, {score: 0.9946564435958862, text: "Neo4j"}, {score: 0.7507548332214355, text: "once"}, {score: 0.8155304193496704, text: "at least"}, {score: 0.780032217502594, text: "Nintendo Switch"}] |
"https://en.wikipedia.org/wiki/Nintendo_Switch" |
[{score: 0.9990180134773254, text: "Mario Kart 8"}, {score: 0.9997879862785339, text: "March 3, 2017"}, {score: 0.9958534240722656, text: "Nintendo"}, {score: 0.9998348355293274, text: "October 20, 2016"}, {score: 0.753325343132019, text: "Nintendo Switch"}] |
如果我们想要流式传输回实体并对结果应用自定义逻辑,请参阅 apoc.nlp.aws.entities.stream。