Python 结合Cypher语言操作 Neo4j 图数据库使用案例

2023-06-1319:54:46后端程序开发Comments784 views字数 2148阅读模式

Neo4j是一个世界领先的开源的基于图的数据库。其语言操作简单直观,本文假设你已经安装好Neo4j数据库,并对知识图谱有一定的了解。Neo4j数据库的查询语言为CQL,其代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。你可以访问(https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html)学习Cypher查询语言。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

本文将使用Python结合Cypher语言对Neo4j数据库进行操作,在上一篇文章中:基于Brat标注数据集的python包network网络构建和搜索,我们使用network进行替代处理,在学习本文后,可以直接使用快捷方便的Neo4j数据库。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

一、数据结构

首先将数据放在表格中,每一行数据为“头实体”、“头实体类别”、“头尾实体关系”、“尾实体类别”、“尾实体”,如图:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

Python 结合Cypher语言操作 Neo4j 图数据库使用案例

你可以将数据构造成这样的结构,我们为你提供了一项非常便捷的工具:“实体关系标注软件” (或者访问博客主页查找),该软件可以快速的帮助你将文本构造成5元组形式,以及字符标签一对一的形式,并提供了许多便捷之处。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

二、上传数据

1、连接数据库文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

#----打开数据库-----
from py2neo import Node, Relationship, Graph, NodeMatcher, RelationshipMatcher,Subgraph
graph = Graph("http://localhost:7474/", auth=("neo4j", "替换为你的密码"))

2、读取数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

path = r"C:UsersDELLdata5501-6000_input_pre_5元组.csv"

file = open(path,'r',encoding = 'utf-8').readlines()


con = list()
zh = ['病名','病症','其它','药名','诊断方案','治疗方案','包含','治疗','危险因素','辅助诊断','特征','并发','别名','作用','条件','诊断']

3、上传数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

for j in file:
    try:
        a = j.replace("t","").strip('n').split(",")
        # a = [eval(i) for i in a] #引号里面有引号-两对引号
        a = [i for i in a] #只有一对引号
        
        if (a[1] not in zh) or (a[2] not in zh) or (a[3] not in zh):
            continue
        #['甲状腺功能亢', '病名', '治疗', '其它', 'HCV感染患者']
        con.append(a)
    except:
        continue
    # print(a)


for j in con:
    
    try:
        selector = NodeMatcher(graph) #创建图,实质上为句柄
        # ---创建头实体节点---
        entity1 = selector.match(j[1], name = j[0]) #检索是否存在头实体节点
        if len(list(entity1)) == 0: #不存在头实体节点,则创建头实体
            entity1_node = Node(j[1], name = j[0])
            graph.create(entity1_node) #创建头实体
        else: #存在头实体节点,跳过
            pass

        # ---创建尾实体节点---
        entity3 = selector.match(j[3], name = j[4])
        if len(list(entity3)) == 0: #不存在尾实体节点,则创建
            entity3_node = Node(j[3], name = j[4])
            graph.create(entity3_node)
        
        
        else: #存在节点,跳过
            pass

        #将两虚点建立关系
        e1_node = graph.nodes.match(j[1], name = j[0]).first()
        e2_node = graph.nodes.match(j[3], name = j[4]).first()
        e12 = Relationship(e1_node, j[2], e2_node)
        graph.create(e12)
    except:
        continue

print("ok1")

4、查看结果。打开neo4j端口,可以看到下图结果:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

Python 结合Cypher语言操作 Neo4j 图数据库使用案例

 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

Python 结合Cypher语言操作 Neo4j 图数据库使用案例

三、清空数据库

Neo4j是非结构化的数据库,不同于结构化的数据库有分区分表的思想。Neo4j数据库是将所有的数据,不论这些数据是否来自于哪里,及时它们毫无相关,都放在同一个库中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

倘若需要清空该库,可以使用:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

#----打开数据库-----
from py2neo import Node, Relationship, Graph, NodeMatcher, RelationshipMatcher,Subgraph
graph = Graph("http://localhost:7474/", auth=("neo4j", "替换为你的密码"))


#----删除所有内容-----
graph.delete_all()

项目数据和代码

以下任意方式均可: 1、文末评论,或者私信留言你的邮箱,博主定期回复。 2、点击:GitHub-neo4j(或者访问:https://github.com/chenyiadam/python_neo4j.git)进行下载。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46945.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/46945.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定