Как найти сходство между двумя графами в neo4j - PullRequest
0 голосов
/ 15 апреля 2019

В нижних графиках 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.

Two Graphs comparison in Neo4j

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 cypher. Пожалуйста, предложите Как применить косинусное подобие междуграфы (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

Я получил подграф, как показано ниже

Sub graph from main graph

Пожалуйста, предложите, как применить косинусное сходство между графиками (L, M, N, O, P,Q, R граф и D, E, G, H).

1 Ответ

0 голосов
/ 16 апреля 2019

Вы почти достигли сходства косинусов. Вам просто нужно собрать отличные оценки. Для справки также посмотрите на этот сайт. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...