当前位置:   article > 正文

Python连接neo4j图数据库并写入三元组数据进行可视化展示_如何将三元组展示

如何将三元组展示

前言

一、安装eno4j图数据库

二、启动neo4j

三、Python连接eno4j

        3.1、安装py2neo

        3.2、使用py2neo操作neo4j

四、数据入库

        4.1、抽取三元组关系

        4.2、效果展示

        4.3、删除图库中所有实体和关系

五、合并相同实体


前言

        本文对非结构化文本数据进行解析成三元组,后写入neo4j图库。记录一些操作代码。在实际项目实战肯定是一体化流程。例如输入一个word文档,需要你对里面的内容进行解析,提取相应的三元组关系,录入图库,可视化展示。完整的项目可视化展示下图所示。但本文记录的主要是录入图库的操作,本文以通俗易懂的脚步出发记录。


一、安装eno4j图数据库

        官网下载地址:Neo4j Desktop Download | Free Graph Database Download

二、启动neo4j

        1)解压安装包到电脑任意盘中

        2)进入文件中的bin目录

        3)cmd模式打卡当前文件夹,输入eno4j.bat console

        4)web服务端使用 http://localhost:7474/ 打开

三、Python连接eno4j

        3.1、安装py2neo

pip install py2neo

        3.2、使用py2neo操作neo4j

  1. from py2neo import Graph, Node, Relationship,NodeMatcher
  2. # 连接图库 初始化账号密码都是neo4j
  3. graph = Graph('http://localhost:7474', auth=('neo4j', 'neo4j'))
  4. # 注意使用Python连接neo4j时要首先启动neo4j的服务,否则Python会抛出异常。

四、数据入库

        4.1、抽取三元组关系

                三元组指的就是类似于<头实体,关系、尾实体>的数据集合

  1. from py2neo import Graph, Node, Relationship,NodeMatcher
  2. # 头实体
  3. head = Node("regoin", name='邯郸市')
  4. # 尾实体
  5. tail = Node("regoin", name='河北省')
  6. # 头尾实体关系
  7. entity = Relationship(head,"属于", tail)
  8. # 创建实例
  9. graph.create(entity)
  10. # 头实体
  11. head = Node("regoin", name='丛台区')
  12. # 尾实体
  13. tail = Node("regoin", name='河北省')
  14. # 头尾实体关系
  15. entity = Relationship(head,"属于", tail)
  16. # 创建实例
  17. graph.create(entity)
  18. # 文中相当于这样一个三元组 <邯郸市,属于,河北省>。当然现实场景头尾实体和关系不是自己指定的,需要进行挖掘的。这里就是举个例子理解下。

        4.2、效果展示

        4.3、删除图库中所有实体和关系

                当图中节点关系复杂、混乱时,选择使用整体删除的方案。代码如下:

  1. def del_all_graph(graph):
  2. #删除节点
  3. # 图中所有节点及关系都删除
  4. y = input("请确认是否要删除图库中所有节点及关系(y/n):")
  5. if y == 'y':
  6. graph.delete_all()
  7. print("已确认删除图库所有节点和关系\n")
  8. elif y == 'n':
  9. print("已确认不删除图库所有节点和关系\n")
  10. pass
  11. else:
  12. print("=========请输入正确的提示引导=========\n")
  13. del_all_graph(graph)
  14. if __name__ == '__main__':
  15. # 连接图库
  16. graph = Graph('http://localhost:7474', auth=('neo4j', '123456789'))
  17. # 确认是否删除图库所有节点
  18. del_all_graph(graph)

五、合并相同实体

        目前建立的图关系是两两之间的关系。列如:邯郸属于河北,丛台区属于邯郸。在图中会分成独立的两块,我们的目的是想要合成 邯郸和丛台区都属于河北的关系。使用如下代码就可以在已存在的实例中派生出新的关系,列如一对多的关系。

  1. from py2neo import Graph, Node, Relationship,NodeMatcher
  2. # 这里图库中已经存在邯郸市属于河北省,现在需要添加一个丛台区属于河北省这样的一个关系
  3. # 头实体
  4. head = Node("regoin", name='丛台区')
  5. # 尾实体
  6. tail = Node("regoin", name='河北省')
  7. # 匹配查找图库中节点
  8. matcher = NodeMatcher(graph)
  9. nodelist = list(matcher.match("regoin",name='河北省'))
  10. if len(nodelist) > 0:
  11. # 表示节点存在,不需创建新的节点
  12. already_header = nodelist[0]
  13. # 可以直接添加关系
  14. entity = Relationship(head, "属于", already_header)
  15. graph.create(entity)
  16. else:
  17. # 表示图库中没有存在当前要写入的节点
  18. entity = Relationship(head, "属于", tail)
  19. # 创建关系
  20. graph.create(entity)

        对比4.2效果展示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/161289
推荐阅读
相关标签
  

闽ICP备14008679号