写点什么

[图数据库]Neo4j 中心性算法 - 以红楼梦为例

作者:alexgaoyh
  • 2024-06-06
    河南
  • 本文字数:1200 字

    阅读完需:约 4 分钟

背景

  近期由于知识图谱的原因,又一次将关注点转移到了图数据库 Neo4j 中,之所以选择 Neo4j,还是因为前些年已经对其进行了调研,上手较快,不同的应用场景可以会有其他的技术选型。


  本文期望提供知识图谱增强下的资源推荐功能,其他使用中心性算法帮助发现用户的兴趣点和社交圈子,从而提供更加个性化的推荐内容。

介绍

  由于作者使用的是 Neo4j 3.5 版本,所以引入了插件进行了增强 graph-algorithms-algo-3.5.4.0.jar,如果是较新的版本,引入的插件包发生了变化,本文不做过多介绍。


  本文对中心性算法: 度中心度、紧密中心度、中介中心度、特征向量中心度 分别进行了介绍。

代码

  首先是针对不同中心性算法的 Cypher 查询语句。


-- 度中心度CALL algo.degree.stream("HLM", "RELATIONSHIP", {direction: "Both"}) YIELD nodeId, score RETURN algo.asNode(nodeId).name AS name, score AS degree ORDER BY degree DESC
-- 紧密中心度CALL algo.closeness.stream("HLM", "RELATIONSHIP") YIELD nodeId, centrality MATCH (n:HLM) WHERE id(n) = nodeId RETURN n.name AS node, centrality ORDER BY centrality DESC LIMIT 20;
-- 中介中心度MATCH (c:HLM) WITH collect(c) as characters CALL algo.betweenness.stream("HLM", "RELATIONSHIP") YIELD nodeId, centrality MATCH (c) WHERE id(c) = nodeId RETURN c.name as name, centrality ORDER BY centrality desc
-- 特征向量中心度CALL algo.pageRank.stream('HLM', 'RELATIONSHIP', {iterations:20, dampingFactor:0.85}) YIELD nodeId, score RETURN algo.asNode(nodeId).name AS name, score ORDER BY score DESC
复制代码


  其次是针对如上查询语句,在处理知识图谱数据过程中对应的节点(HLM)和关系(RELATIONSHIP)的设置。


@Node("HLM")public class HLMEntity implements Serializable {
@Id private String name;
@Relationship(type = "RELATIONSHIP", direction = Relationship.Direction.OUTGOING) private Set<HLMRelationshipEntity> relationships = new HashSet<>();}
@RelationshipPropertiespublic class HLMRelationshipEntity implements Serializable {
@Id @GeneratedValue private Long id;
@Relationship(type = "relation", direction = Relationship.Direction.OUTGOING) private HLMEntity startNode;
@Relationship(type = "relation", direction = Relationship.Direction.INCOMING) @TargetNode private HLMEntity endNode;
private String type;}
复制代码

执行效果

  第一张图是红楼梦人物数据的展示图,后面四张图是四种中心性算法的执行结果。






总结

   使用 Neo4j 的 graph-algorithms-algo 插件,调用了针对红楼梦人物关系数据的四种中心度算法。

参考

  1. http://pap-docs.pap.net.cn/

  2. https://gitee.com/alexgaoyh


发布于: 刚刚阅读数: 2
用户头像

alexgaoyh

关注

DevOps 2013-12-08 加入

https://gitee.com/alexgaoyh

评论

发布
暂无评论
[图数据库]Neo4j中心性算法-以红楼梦为例_neo4j_alexgaoyh_InfoQ写作社区