可以使用此Cypher脚本创建上图:
CREATE
(t1:Token {content: "Jake"}),
(t2:Token {content: "wanted"}),
(det:Token {content: "the"}),
(t3:Token {content: "dog"}),
(t4:Token {content: "neighbours"}),
(t5:Token {content: "had"}),
(t1)-[:PRECEDES {index: 0}]->(t2),
(t2)-[:PRECEDES {index: 1}]->(det),
(det)-[:PRECEDES {index: 2}]->(t3),
(t3)-[:PRECEDES {index: 3}]->(det),
(det)-[:PRECEDES {index: 4}]->(t4),
(t4)-[:PRECEDES {index: 5}]->(t5);
这是“杰克想要邻居所拥有的狗”这句话的图表。请注意,“the”一词出现两次。在该模型中,每个节点表示特定单词(不是单词的实例)。但是,我们应该能够重建单个句子,因为我们在:PRECEDES
关系的属性中编码的单词中有句子的索引。
有没有办法在Cypher中查询这句话作为路径,使用index
属性来避免在代表the
的节点上输入一个循环?
答案 0 :(得分:1)
我同意Tezra的句子节点。
使用您的模型,我有一个有趣的结果
MATCH (t2:Token)
WHERE NOT (t2:Token)<-[:PRECEDES]-(:Token)
WITH t2
MATCH (t2)-[pr:PRECEDES*..]->(t3:Token)
WITH t2, last(pr).index AS pos, t3.content AS txt ORDER BY pos
RETURN t2.content, pos, txt
重复最后两个字。我认为较长的句子会产生更多的噪音 你可以在PRECEDES
中找到一个句子我建议:将句子作为起始节点,与单词的关系。
稍后,您将遇到“过度连接的节点”问题(使用,on,on,...) 看看graphaware的NLP插件