综合前几篇文章的内容,本文要解决的问题就是:如何从存放三元组数据的记事本文件,整理生成neo4j-admin import所需要的nodes.csvrelationships.csv两个文件。主要涉及的知识点就是:neo4j-admincsv文件特殊格式,python生成csv文件。

苏南大叔:python读取三元组数据,如何生成neo4j节点及关系文件? - 生成节点及关系csv文件
python读取三元组数据,如何生成neo4j节点及关系文件?(图4-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文中,将要分为三部分来讲述整个程序。测试环境:win10python@3.6.8

提取实体

首先,有个已经去重处理好的三元组数据文件,去重逻辑的范例代码见这里:

获得的三元组数据文件,格式如下图所示:

苏南大叔:python读取三元组数据,如何生成neo4j节点及关系文件? - 三元组数据文本
python读取三元组数据,如何生成neo4j节点及关系文件?(图4-2)

接下来,代码将要读取其中的所有实体。

import pandas as pd
import csv
# 分析实体列表
result_name = ["entity_start", "role", "entity_end"]
result = pd.read_table("test2.txt", decimal="\t", names=result_name)
entity = set()
entity_start = result['entity_start'].tolist()
entity_end = result['entity_end'].tolist()
for i in entity_start:
    entity.add(i)
for i in entity_end:
    entity.add(i)
entity = list(entity)

生成实体csv文件

在本步骤中,生成实体文件的同时,还需要对所有的这些entity进行编号,编号的规则是自定义的,只要不重复就可以,具体的格式没有要求。(当然,用自增一来表示是最好的选择)

csvf_entity = open("nodes.csv", "w", newline='', encoding='utf-8')
w_entity = csv.writer(csvf_entity)
w_entity.writerow(("entity:ID", "name", ":LABEL"))  # 固定名称
entity_dict = {}
for i in range(len(entity)):
    w_entity.writerow(("e" + str(i), entity[i], "标签"))  # 多个label分号分割,id只要不重复就可以
    entity_dict[entity[i]] = "e" + str(i)
csvf_entity.close()

这个最核心的要求就是要生成符合要求的nodes.csv文件,表头固定为:"entity:ID", "name", ":LABEL"。

苏南大叔:python读取三元组数据,如何生成neo4j节点及关系文件? - 实体节点csv文件
python读取三元组数据,如何生成neo4j节点及关系文件?(图4-3)

生成关系csv文件

在本步骤中,最重要的地方就是,实体到实体id的转化,而这个转化关系在上一步中已经生成对应关系。这个对应关系的确认,巧妙的使用了seriesmap()功能。详情请参考:

result[':START_ID'] = result['entity_start'].map(entity_dict) # 起始实体ID
result[':END_ID'] = result['entity_end'].map(entity_dict) # 终点实体ID
result[":TYPE"] = result['role'] # 关系
result.pop('role') # 不pop的话,就会成为这层关系的属性
result.pop('entity_start')
result.pop('entity_end')
result.to_csv("relationships.csv", index=False)

本段代码的输出是relationships.csv文件。格式如下:

苏南大叔:python读取三元组数据,如何生成neo4j节点及关系文件? - 关系文件csv文件
python读取三元组数据,如何生成neo4j节点及关系文件?(图4-4)

导入neo4j数据库

拿到nodes.csvrelationships.csv文件后,就可以通过下面的命令导入到数据库了。

neo4j-admin import --nodes "nodes.csv" --relationships "relationships.csv" --force

具体可以参考:

导入成功后,就可以通过下面的链接,查看数据了。

参考文献

总结

这个导入neo4j数据库的代码,终于连载完了。代码不长,文章写了十多篇。接下来要连载的内容是:neo4j的数据查询语句。欢迎关注:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。