背景

  近期由于知识图谱的原因,又一次将关注点转移到了图数据库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<>();
}

@RelationshipProperties
public 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;
}

执行效果

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

hlm.jpg

Neo4j中心性算法-以红楼梦为例-度中心度 Neo4j中心性算法-以红楼梦为例-紧密中心度
Neo4j中心性算法-以红楼梦为例-中介中心度 Neo4j中心性算法-以红楼梦为例-特征向量中心度

总结

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

参考

  1. http://pap-docs.pap.net.cn/
  2. https://gitee.com/alexgaoyh
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐