neo4j - 如何在neo4j中找到两个图之间的相似性
问题描述
在下图中,A、B、C、D、E、G、H、I、J、K 为主图,L、M、N、O、P、Q、R 为子图。首先我试图让子图存在于主图中,所以我得到了像 D、E、G、H 这样的子图。现在我想应用 L、M、N、O、P、Q、R 之间的余弦相似度图和 D、E、G、H。
Code for creating the graph :
MERGE (a:Node {name:'A', score:1})
MERGE (b:Node {name:'B', score:2})
MERGE (c:Node {name:'C', score:3})
MERGE (d:Code {name:'D', score:4})
MERGE (e:Code {name:'E', score:5})
MERGE (g:Code {name:'G', score:7})
MERGE (h:Code {name:'H', score:8})
MERGE (i:Node {name:'I', score:9})
MERGE (j:Node {name:'J', score:10})
MERGE (k:Node {name:'K', score:11})
MERGE (a)-[:Connects {score:1}]->(b)
MERGE (a)-[:Connects {score:2}]->(c)
MERGE (a)-[:Connects {score:3}]->(d)
MERGE (b)-[:Connects {score:4}]->(c)
MERGE (b)-[:Connects {score:5}]->(d)
MERGE (b)-[:Connects {score:6}]->(j)
MERGE (c)-[:Connects {score:7}]->(d)
MERGE (c)-[:Connects {score:8}]->(e)
MERGE (d)-[:Connects {score:10}]->(g)
MERGE (d)-[:Connects {score:11}]->(h)
MERGE (e)-[:Connects {score:14}]->(g)
MERGE (e)-[:Connects {score:15}]->(h)
MERGE (g)-[:Connects {score:20}]->(h)
MERGE (g)-[:Connects {score:21}]->(i)
MERGE (g)-[:Connects {score:22}]->(j)
MERGE (i)-[:Connects {score:23}]->(j)
MERGE (i)-[:Connects {score:24}]->(k)
MERGE (j)-[:Connects {score:25}]->(k)
CREATE (l:Test {name:'L', score:4})
CREATE (m:Test {name:'M', score:5})
CREATE (n:Test {name:'N', score:6})
CREATE (o:Test {name:'O', score:7})
CREATE (p:Test {name:'P', score:8})
CREATE (q:Test {name:'Q', score:12})
CREATE (r:Test {name:'R', score:13})
CREATE (l)-[:Connects {score:10}]->(o)
CREATE (l)-[:Connects {score:11}]->(p)
CREATE (l)-[:Connects {score:12}]->(n)
CREATE (m)-[:Connects {score:13}]->(n)
CREATE (m)-[:Connects {score:14}]->(o)
CREATE (m)-[:Connects {score:15}]->(p)
CREATE (n)-[:Connects {score:16}]->(o)
CREATE (n)-[:Connects {score:17}]->(p)
CREATE (n)-[:Connects {score:26}]->(q)
CREATE (n)-[:Connects {score:27}]->(r)
CREATE (o)-[:Connects {score:20}]->(p)
我是 neo4j 密码查询的新手,请建议如何在图(L、M、N、O、P、Q、R 图和 D、E、G、H)之间应用余弦相似度。
要获取我在密码查询下使用的子图:
MATCH (n) where n.score IN [4,5,6,7,8,12,13] AND NONE(l IN labels(n) WHERE l=~'Tes.*')
MATCH path = (n)-[l]->(m) where m.score IN [4,5,6,7,8,12,13]
UNWIND nodes(path) as node
RETURN node
我得到了如下子图
请建议如何在图(L、M、N、O、P、Q、R 图和 D、E、G、H)之间应用余弦相似度。
解决方案
你几乎可以得到余弦相似度。您只需要收集不同的分数。作为参考,还请查看此网站。https://neo4j.com/docs/graph-algorithms/current/algorithms/similarity-cosine/
MATCH (n) where n.score IN [4,5,6,7,8,12,13] AND NONE(l IN labels(n) WHERE l=~'Tes.*')
MATCH (t: Test)
MATCH path = (n)-[l]->(m) where m.score IN [4,5,6,7,8,12) AS similarity,13]
UNWIND nodes(path) as node
RETURN algo.similarity.cosine(
collect(node.score), collect(m.score)) AS similarity
结果:
similarity
0.9733970633316996
推荐阅读
- firebase - 如何使用 dart 计算 firebase 集合中的文档数
- wordpress - 在联系表格 7 中结合动态和静态文本
- python - 注释函数参数类型
- javascript - 将 chart.js 用于同位素模式
- next.js - How to add custom attributes to the `DOCTYPE` tag with NextJS?
- c# - Can't update node value in tree
- python - 如何在 QTableView 中应用过滤器后显示特定行
- python - BeautifulSoup returning none when I can see that the element exists
- javascript - 如何将计算放在 for 循环中,中间有 if 语句?什么是正确的语法?
- python - Steps for representation of spatial boundaries, dividing into grids of equal size, assigning entities to grids