запрос шифра для проверки общности отношений - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть набор данных neo4j с пользователями и группами.

MATCH (user:User)-[r:Memberof]->(group:Group) RETURN *

Теперь я бы хотел rate общность каждой группы для всех остальных групп, чтобы определить процент отСходство между всеми группами (Группа A разделяет 95% членства с Группой B, 82% членства с Группой C и т.:)

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

Существует несколько алгоритмов графов для проверки сходства в Библиотека алгоритмов графов Neo4j .

Алгоритм подобия Джакарда выглядит хорошо подходит для этого варианта использования.Алгоритм сходства Жакара можно использовать для определения сходства между двумя вещами.

Существует еще один алгоритм сходства, который можно использовать здесь: Алгоритм сходства с перекрытием .Алгоритм перекрытия подобия можно использовать для определения того, какие вещи являются подмножествами других.

Вы можете найти более подробную информацию и несколько хороших примеров обо всех доступных Алгоритмах подобия на странице документации Neo4j .Вы можете ссылаться на примеры на приведенной выше странице и написать запрос Cypher для вашего требования.

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

Спасибо, Радж

Управляется с помощью следующего запроса ....

MATCH (user:User)-[:MemberOf]->(group:Group)
WITH {item:id(group), categories: collect(id(user))} as userData
WITH collect(userData) as data
CALL algo.similarity.jaccard.stream(data, {similarityCutoff: 0.9})
YIELD item1, item2, count1, count2, intersection, similarity
RETURN algo.asNode(item1).name AS from, algo.asNode(item2).name AS to, intersection, (similarity * 100) AS match
0 голосов
/ 19 апреля 2019
match (user:User)-[:Memberof]->(group:GroupA)
WITH COUNT(user) AS NUM_A, user
Match (user)-[:Memberof]->(group:GroupB)
RETURN COUNT(user) AS NUM_B, NUM_A

Таким образом можно сопоставить отдельную группу

...