Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算两部电影(Neo4j、cypher)之间的相似性指数_Neo4j_Cypher - Fatal编程技术网

计算两部电影(Neo4j、cypher)之间的相似性指数

计算两部电影(Neo4j、cypher)之间的相似性指数,neo4j,cypher,Neo4j,Cypher,在此基础上 这一切都搞砸了,但我想不出解决这个问题的正确方法。请提供帮助。看看我使用Neo4j控制台生成的示例: 查询应为: MATCH (m:Movie { title: "The Matrix" })-[h1:HAS_TAG]->(t:Tag), (t)<-[h2:HAS_TAG]-(sm:Movie), (m)-[h:HAS_TAG]->(t0:Tag), (sm)-[H:HAS_TAG]->(t1:Tag) WHERE m <&g

在此基础上


这一切都搞砸了,但我想不出解决这个问题的正确方法。请提供帮助。

看看我使用Neo4j控制台生成的示例:

查询应为:

MATCH (m:Movie { title: "The Matrix" })-[h1:HAS_TAG]->(t:Tag),
    (t)<-[h2:HAS_TAG]-(sm:Movie),
    (m)-[h:HAS_TAG]->(t0:Tag),
    (sm)-[H:HAS_TAG]->(t1:Tag)
WHERE m <> sm
WITH m, sm, 
    collect(DISTINCT h) AS h, 
    collect(DISTINCT H) AS H, 
    sum(h1.weight*h2.weight) AS num
WITH m, sm, num,
    sqrt(reduce(s = 0.0, x IN h | s +(x.weight^2))) AS den1, 
    sqrt(reduce(s = 0.0, x IN H | s +(x.weight^2))) AS den2
RETURN m.title, sm.title, (num/(den1*den2)) AS similarity

我使用reduce函数来聚合不同集合中的关系值,并执行相似性指数计算。

这很有效,并给出了正确的答案

  MATCH (m:Movie { title: "The Matrix" })-[h1:HAS_TAG]->(t:Tag)<-[h2:HAS_TAG]-(sm)
  WHERE m <> sm
  WITH SUM(h1.weight * h2.weight) AS num,
     SQRT(REDUCE(xDot = 0.0, a IN COLLECT(h1)| xDot + a.weight^2)) AS xLength,
     SQRT(REDUCE(yDot = 0.0, b IN COLLECT(h2)| yDot + b.weight^2)) AS yLength, m, sm
  RETURN num, xLength, yLength

MATCH(m:Movie{title:“The Matrix”})-[h1:HAS_TAG]->(t:TAG)分子中的值重复,导致错误的结果。
MATCH (m:Movie { title: "The Matrix" })-[h1:HAS_TAG]->(t:Tag),
    (t)<-[h2:HAS_TAG]-(sm:Movie),
    (m)-[h:HAS_TAG]->(t0:Tag),
    (sm)-[H:HAS_TAG]->(t1:Tag)
WHERE m <> sm
WITH m, sm, 
    collect(DISTINCT h) AS h, 
    collect(DISTINCT H) AS H, 
    sum(h1.weight*h2.weight) AS num
WITH m, sm, num,
    sqrt(reduce(s = 0.0, x IN h | s +(x.weight^2))) AS den1, 
    sqrt(reduce(s = 0.0, x IN H | s +(x.weight^2))) AS den2
RETURN m.title, sm.title, (num/(den1*den2)) AS similarity
+---------------------------------------------------------------+
| m.title      | sm.title                  | similarity         |
+---------------------------------------------------------------+
| "The Matrix" | "The Matrix: Revolutions" | 3.859767091086958  |
| "The Matrix" | "The Matrix: Reloaded"    | 1.4380667053087486 |
+---------------------------------------------------------------+
  MATCH (m:Movie { title: "The Matrix" })-[h1:HAS_TAG]->(t:Tag)<-[h2:HAS_TAG]-(sm)
  WHERE m <> sm
  WITH SUM(h1.weight * h2.weight) AS num,
     SQRT(REDUCE(xDot = 0.0, a IN COLLECT(h1)| xDot + a.weight^2)) AS xLength,
     SQRT(REDUCE(yDot = 0.0, b IN COLLECT(h2)| yDot + b.weight^2)) AS yLength, m, sm
  RETURN num, xLength, yLength