neo4j - Neo4j:带有种子标签的标签传播
问题描述
我想使用种子标签和权重属性将标签传播应用于我在 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 个节点,并使用密码投影将二分图投影到单分图。在下一步中,我运行了标签传播算法。这是代码:
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"})
结果并不好。
我想给标签传播算法提供种子标签(字符串)和权重(关系中的)。
我想要几个集群(如果我有 5 个种子标签(字符串),我想 5 个集群)
我有 5 个带有种子标签(字符串)的节点,我想通过网络传播这些种子标签。
例如:5 个种子标签(字符串)将是“Iphone”、“Coronavirus”、“Disney”、“Crisis”、“Summer”。
如何编写标签传播来传播这些种子标签(字符串)?
解决方案
您需要将种子属性添加到文章中。如果您查看文档,您会注意到seedProperty
参数的描述是:
seedProperty:用于定义初始标签集(必须是数字)。
这意味着您不能将字符串用作种子标签,但您必须创建一个将字符串映射到整数的映射函数。在您的情况下,可能类似于:
- 苹果手机:1
- 冠状病毒:2
- 迪士尼:3
- 危机:4
- 夏季:5
将种子标签(整数)添加到节点后,您可以运行以下查询来执行种子标签传播算法。您必须在中添加种子属性并使用参数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 个社区。
推荐阅读
- python - Readlines.() 重复相同的答案?
- c# - WCF 命名管道地址AlreadyInUseException
- firebase - 电话号码的 Firestore 安全规则问题
- postgresql - 安装到 Windows 上的本地文件夹时,postgres 失败
- android - 关联现有 Firebase 和 Google Cloud 项目
- email - Google Apps 脚本 - 不发送电子邮件复选框未选中
- android - 从底部导航按回时如何避免片段重新加载数据
- xml - XPath 选择没有“isNull”的值
- angular - 具有角 5 的引导网格系统
- sql - TSQL 填充数据