繁体   English   中英

根据Neo4j中节点属性的Jaccard相似度创建节点之间的关系?

[英]Create relationship between nodes based on Jaccard similarity of the nodes attributes in Neo4j?

我的 Neo4j 图中有多个节点。 我想在任意 2 个节点之间创建关系,当且仅当它们在属性上的 Jaccard 相似度高于某个阈值 alpha 时。

考虑2个节点:

Node 1: {id:1, abc: 1.1, eww: -9.4, ssv: "likj"}
Node 2: {id:2, we2: 1, eww: 900}
Node 3: {id:3, kuku: -91, lulu: 383, ssv: "bubu"}

因此 Node1 和 Node2 Jaccard 属性的相似度为:(intersection =) 2/ (union =) 5 = 0.4

我怎样才能在 Neo4j 中做到这一点? 我知道有一个 Jaccard 相似性函数,但是如何配置它以处理节点的属性?

假设你的意思是属性存在的 Jaccard 相似性,那么你可以做这样的事情

MATCH (a:Node)
MATCH (b:Node) WHERE id(b) > id(a)
WITH a, b, [prop IN keys(a) WHERE prop IN keys(b)] AS shared_properties // Find the properties that exist on both nodes using the IN operator
WITH a, b, size(shared_properties) AS shared_property_count // Get the number of shared properties 
WITH 1.0*shared_property_count / size(apoc.coll.union(keys(a), keys(b))) AS jaccard_similarity, a, b // Compute the Jaccard similarity as the intersection over the union
WHERE jaccard_similarity > $threshold // Make sure the similarity is higher than some threshold
CREATE (a)-[:SIMILAR_TO {jaccard: jaccard_similarity}]->(b) 

WITH语句查找出现在两个节点上的属性并对其进行计数,最后我们找到 Jaccard 相似度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM