前段时间参与了一个知识图谱的项目,主要负责的内容就是将构造好的三元组如何导入到neo4j中,时间比较久了,今天重新再复盘一下,希望对您有所帮助。

目录

一、python与neo4j数据库的连接

 1.1 python与neo4j链接命令

1.2 python创建节点

1.3 python 构建关系 

1.4 删除所有的实体和关系

二、word/excel三元组转结构化数据json

三、将格式化数据转到neo4j中

四、总结

        在文章中不再介绍如何配置neo4j的环境,主要就是配置好Jdk,并且保证JDK版本与下载的neo4j匹配就可以,网络上有很多相关的安装教程。

一、python与neo4j数据库的连接

     python的py2neo库为python与neo4j数据库的连接提供了便利,从py2neo中可以引用Graph, Node, Relationship分别对应着neo4j的链接、neo4j的创建节点和neo4j的创建关系,一下对三个函数进行介绍。

 1.1 python与neo4j链接命令

graph = Graph(uri, user=username, password=password)

        在该函数中,参数rui代表着neo4j数据库的地址,一般是http://localhost:7474/ ,user和password则对应的是数据库的用户名和密码。

1.2 python创建节点

node = Node('实体类别',name = “实体名称”,属性一 = “实体的属性一”,属性二=“实体的属性二”,属性三=“实体的属性三”)

graph.create(node)

        顾名思义,Node用于创建实体,在改函数中“实体类别”是自拟的,代表你创建的这个节点属于哪个类别;name是必须有的,代表该节点的实体名称,也是在图数据库中所展示出来的信息;后面的属性则是根据实体的情况所构建的信息,可有可无;最后则是在图数据库中创建节点。

1.3 python 构建关系 

query = "match(p:%s),(q:%s) where p.name='%s'and q.name='%s' create (p)-[rel:%s{name:'%s',shiji:2}]->(q)" % (start_node, end_node, p, q, rel_type, rel_name)

graph.run(query)

         在构建关系时,使用了sql的语句,固定形式如上,需要6个参数来完成最后的创建,分别是start_node, end_node, p, q, rel_type, rel_name代表着开始节点的实体类型、结束节点的实体类型、开始节点的名称、结束节点的名称、关系的类型以及关系的名称六个内容。

1.4 删除所有的实体和关系

graph.delete_all()

        使用上述代码可以删除所有实体和关系。

二、word/excel三元组转结构化数据json

        为什么要转换为结构化数据呢,这是为了在下一步导入时能够更好的导入到neo4j,转换后的数据样式如下:

(猫,属性,动物) (猫,颜色,黄色) (猫,名字,小白) (猫,年龄,一岁)

转换后的数据如下:   {     "名称": "小白",     "属性": ["猫"],     "颜色": ["黄色"],

    "年龄": ["一岁"]   }

        可以看到通过格式化数据的转化,使得分散的三元组数据变得整合起来,更有利于后续的数据处理,批量处理的部分代码如下,如需完整代码,关注博主后私信博主,博主看到就会回复的。

subject = triple[0]

if subject not in triples:

triples[subject] = {}

if triple[1] not in triples[subject]:

triples[subject][triple[1]] = [triple[2]]

else:

if triple[2] not in triples[subject][triple[1]]:

triples[subject][triple[1]].append(triple[2])

三、将格式化数据转到neo4j中

        在处理成格式化数据后,其实剩下的步骤就比较简单了,只需要设置对应的数据结构存储数据的信息,最后批量导入到数据库中就可以,下面介绍整体的思路。

对每类实体创建数组cat、cat_info。cat用来储存所有的猫实体,cat_info,则用来存储所有的猫实体字典。 对每类关系创建数组rel_guanximing,每一项为两个内容的数组。 依次读取每条数据,首先判断属性是否存在,如果不存在,使用函数(根据名字和特有属性)判断其属性并添加属性。 提取其名字,根据不同分类,对每一类,对其可能出现的关系名以及属性名进行判定,并加入到相关的数据结构中。 在读取完所有数据之后,创建节点。 创建关系,利用之前存储的rel_结合函数进行。使用cypher语句进行创建 最终登录neo4j,成功导入!效果如图

四、总结

        以上就是整个导入的过程啦!

        如需要详细代码,请联系博主~

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: