[英]Create relationship between nodes based on Jaccard similarity of the nodes attributes in Neo4j?
[英]Compute Similarity between nodes in Neo4j
我有下表說明每個Originator執行的任務的頻率。 (請參閱附圖)。
我在Neo4j中使用Originator - [Frequency] - > Task的關系表示了上表。
現在我需要僅使用Cypher查詢來計算兩個用戶之間的相似性(例如,Jaccard相似性)。 想知道它是如何可能的,或者是否會完全改變模式定義。
提前致謝。
這更像是一個起點,然后是一個答案! 如果我們首先忽略頻率的值,那么我認為你可以嘗試這樣的事情:
MATCH (u1:Originator{name:'John'}), (u2:Originator{name:'Sue'})
WITH u1, u2
OPTIONAL MATCH common=(u1)-[:FREQUENCY]->(t:Task)<-[:FREQUENCY]-(u2)
WITH u1, u2, COUNT(common) as intersection
OPTIONAL MATCH (u1)-[:FREQUENCY]->(t:Task)
WITH u1, u2, intersection, COLLECT(DISTINCT t) AS t1s
OPTIONAL MATCH (u2)-[:FREQUENCY]->(t:Task)
WHERE NOT t IN t1s
WITH u1, u2, intersection, t1s + COLLECT(DISTINCT t) AS union
RETURN u1, u2, intersection / union as js
這絕對是未經測試的,並且可能通過某種方式找不到重復匹配任務的效率。
查詢正在做的是找到兩個用戶共有的任務,並將常見任務的數量存儲在變量intersection
。 然后它使用單獨匹配(可選)每個用戶的任務並使用它們來計算union
( COLLECT
將創建零長度數組,其中零匹配)。 在最終的回報聲明中可能存在零除問題。
頻率如何影響結果很難說,我想知道你是否會通過交換更好地服務:Frequency
:Completed
並為每個完成的任務創建一個新的關系(即'John'和'Act A'之間的6個關系)。 這對於支持intersection
非常有用,但對於Union
來說仍然會有一些有趣的內涵。
該鏈接解決了我的問題。 只需要考慮每個環節。
http://neo4j.com/docs/stable/cypher-cookbook-similarity-calc.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.