【问题标题】:Neo4j: Testing 'Node Similarity' on Stream mode errorNeo4j:在流模式错误上测试“节点相似性”
【发布时间】:2020-07-15 14:46:32
【问题描述】:

我正在尝试在具有这种形式的二分数据库上测试“节点相似性”: 关键字 -[APPEARS_IN]-> 文章 我想在有分数的文章之间获得“相似”的关系。我尝试了以下代码,使用节点属性title

CALL gds.nodeSimilarity.stream('test')
YIELD node1, node2, similarity
RETURN gds.util.asNode(node1).title AS Article1, gds.util.asNode(node2).title AS Article2, similarity
ORDER BY similarity DESCENDING, Article1, Article2

结果如下:

但结果并不好,我到处都是'None'...是因为'title'中的字符串长度吗?我数据库中的标题有时很长,例如:

我该怎么办?

我也尝试通过“id”属性来做到这一点,但是当我检查时,得分为“1”(可能的最高)的文章之间似乎没有真正的相似性(它们根本不相似)。

【问题讨论】:

  • 您可能是在比较关键字而不是文章。您能分享一下您是如何加载投影图的吗?
  • 我使用以下代码投影了图形:CALL gds.graph.create('lpa_test','*', {APPEARS_IN:{type: 'APPEARS_IN', orientation: 'NATURAL', properties:['weights']} })

标签: neo4j graph-algorithm similarity


【解决方案1】:

所以你当前投影图表的方式:

CALL gds.graph.create('lpa_test','*', 
    {APPEARS_IN:{type: 'APPEARS_IN', orientation: 'NATURAL',                  
     properties:['weights']}})

由于您的图表架构,您将比较关键字而不是文章。

(keyword)-[:APPEARS_IN]->(article)

关系的源节点是要比较的项目,关系的目标将被考虑进行项目的比较。这就是 article1 和 article2 列都是空的原因,因为您可能为关键字使用了另一个属性名称。如果你想比较文章,你必须把关系颠倒过来。

CALL gds.graph.create('lpa_reverse','*', 
    {APPEARS_IN:{type: 'APPEARS_IN', orientation: 'REVERSE',                  
     properties:['weights']}})

现在您将通过节点相似度算法得到您正在寻找的结果:

CALL gds.nodeSimilarity.stream('lpa_reverse')
YIELD node1, node2, similarity
RETURN gds.util.asNode(node1).title AS Article1, 
       gds.util.asNode(node2).title AS Article2, similarity
ORDER BY similarity DESCENDING, Article1, Article2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    相关资源
    最近更新 更多