我想使用种子标签和权重属性对Neo4j中的数据应用标签传播。我的数据看起来像图像。

关系'Appears_in‘具有权重属性(图像中的整数,如8),一些文章节点具有种子标签属性(字符串,例如Iphone)。
我想传播这个种子标签来创建与谈论相同主题的文章的集群,例如Iphone集群。更准确地说,我希望将种子标签传播到另一个文章节点,但文章与它们之间没有直接关系。他们在“某处”通过他们在通信中的词汇联系在一起……
首先,我运行了弱连接组件,以便保留我的数据中唯一的一个大型网络:
CALL gds.wcc.stream('lpa_test')
YIELD nodeId, componentId
RETURN componentId, count(*) as size
ORDER BY size DESC
LIMIT 1000

所以我试着保持2170个节点的网络,并将一个二部图投影到一个带有cypher投影的单部。在下一步中,我运行了标签传播算法。代码如下:
CALL gds.labelPropagation.write({
nodeQuery:"MATCH (n:ARTICLE) WHERE n.familyComponent = 0
RETURN id(n) as id",
relationshipQuery:"MATCH (a:Article)<-[:APPEARS_IN]-(b:KEYWORD)-[:APPEARS_IN]->(c:Article)
RETURN id(a) as source, id(c) as target, count(distinct b) as word_weight",
relationshipWeightProperty: "word_weight",
writeProperty: "lpa"})结果并不好。
我想给Label Propagation算法提供种子标签(字符串)和权重(在关系中)。
我希望有几个集群(如果我有5个种子标签(字符串),我想是5个集群)
我有5个带有种子标签(字符串)的节点,我想通过网络传播这些种子标签。
例如:5个种子标签(字符串)将是'Iphone',‘冠状病毒’,‘迪斯尼’,‘危机’,‘夏天’。
如何编写标签传播来传播这些种子标签(字符串)?
发布于 2020-06-30 05:35:55
您需要将种子属性添加到文章。如果您查看documentation,您会注意到seedProperty参数的描述是:
seedProperty:用于定义初始标签集(必须为数字)。
这意味着您不能将字符串用作种子标签,但您必须创建一个将字符串映射到整数的映射函数。在您的情况下,可能是这样的:
将种子标签(整数)添加到节点后,可以运行以下查询来执行种子标签传播算法。您必须在nodeQuery中添加种子属性,并使用seedProperty参数定义它。
CALL gds.graph.create({
nodeQuery: "MATCH (n:Article) WHERE n.familyComponent = 0
RETURN id(n) as id, n.seedLabel as seedLabel",
relationshipQuery:"MATCH (a:Article)<-[:APPEARS_IN]-(b:KEYWORD)-[:APPEARS_IN]->(c:Article)
RETURN id(a) as source, id(c) as target, count(distinct b) as word_weight",
relationshipWeightProperty:'word_weight',
seedProperty:'seedLabel',
writeProperty:'lpa'
})这应该是可行的。需要注意的一件事是,如果您没有为图中的所有节点使用种子属性,则结果可能包括五个以上的标签。文档说明:
算法首先检查是否有分配给节点的种子标签。如果不存在种子标签,则为该节点分配一个新的唯一标签。使用这组初步的标签,它随后将每个节点的标签顺序更新为新的标签,该新标签是在每次标签传播迭代时其邻居中最频繁的标签。
例如,如果您仅将种子标签分配给50%的节点,则将使用随机的唯一标签启动其他50%的节点。反过来,这意味着你可能会得到5个以上的社区。
https://stackoverflow.com/questions/62645925
复制相似问题