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

前言

一、安装eno4j图数据库

二、启动neo4j

三、Python连接eno4j

        3.1、安装py2neo

        3.2、使用py2neo操作neo4j

四、数据入库

        4.1、抽取三元组关系

        4.2、效果展示

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

五、合并相同实体


前言

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


Python连接neo4j图数据库并写入三元组数据进行可视化展示_第1张图片

一、安装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

from py2neo import Graph, Node, Relationship,NodeMatcher


# 连接图库                            初始化账号密码都是neo4j
graph = Graph('http://localhost:7474', auth=('neo4j', 'neo4j'))


# 注意使用Python连接neo4j时要首先启动neo4j的服务,否则Python会抛出异常。

四、数据入库

        4.1、抽取三元组关系

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

from py2neo import Graph, Node, Relationship,NodeMatcher

# 头实体
head = Node("regoin", name='邯郸市')
# 尾实体
tail = Node("regoin", name='河北省')
# 头尾实体关系
entity = Relationship(head,"属于", tail)
# 创建实例
graph.create(entity)



# 头实体
head = Node("regoin", name='丛台区')
# 尾实体
tail = Node("regoin", name='河北省')
# 头尾实体关系
entity = Relationship(head,"属于", tail)
# 创建实例
graph.create(entity)


# 文中相当于这样一个三元组 <邯郸市,属于,河北省>。当然现实场景头尾实体和关系不是自己指定的,需要进行挖掘的。这里就是举个例子理解下。

 

        4.2、效果展示

Python连接neo4j图数据库并写入三元组数据进行可视化展示_第2张图片

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

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

def del_all_graph(graph):
    #删除节点
    # 图中所有节点及关系都删除
    y = input("请确认是否要删除图库中所有节点及关系(y/n):")
    if y == 'y':
        graph.delete_all()
        print("已确认删除图库所有节点和关系\n")
    elif y == 'n':
        print("已确认不删除图库所有节点和关系\n")
        pass
    else:
        print("=========请输入正确的提示引导=========\n")
        del_all_graph(graph)




if __name__ == '__main__':
    # 连接图库
    graph = Graph('http://localhost:7474', auth=('neo4j', '123456789'))
    # 确认是否删除图库所有节点
    del_all_graph(graph)


五、合并相同实体

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

from py2neo import Graph, Node, Relationship,NodeMatcher

# 这里图库中已经存在邯郸市属于河北省,现在需要添加一个丛台区属于河北省这样的一个关系


# 头实体
head = Node("regoin", name='丛台区')
# 尾实体
tail = Node("regoin", name='河北省')


# 匹配查找图库中节点
matcher = NodeMatcher(graph)
nodelist = list(matcher.match("regoin",name='河北省'))
if len(nodelist) > 0:
    # 表示节点存在,不需创建新的节点
    already_header = nodelist[0] 
    # 可以直接添加关系
    entity = Relationship(head, "属于", already_header)
    graph.create(entity)
else:
    # 表示图库中没有存在当前要写入的节点
    entity = Relationship(head, "属于", tail)
    # 创建关系
    graph.create(entity)

        对比4.2效果展示:

Python连接neo4j图数据库并写入三元组数据进行可视化展示_第3张图片

你可能感兴趣的:(知识图谱,python,数据库,python,neo4j)