Python将CSV文件导入neo4j并消除前缀,超详细步骤

Python将CSV文件导入neo4j并消除前缀,超详细步骤

前言:在Python中将CSV文件导入neo4j,并一次性消除前缀。主要调用了python中的rdflib包并且使用split分割符直接把owl中的前缀URI去除,相比在Neo4j里面操作更加简便,不会遗漏一些结点,并且一次性消除了前缀。

  • 在protege中构建完成本体之后,选择RDF/XML导出成OWL文件。

  • 在Python中进行操作,先导入rdflib和py2neo包。如果导入包失败,就降低版本,把软件关了。(不知道是不是这个原因,小编在操作的时候经常导入不可以,换了版本有时候又可以了。)导入成功界面如下:
    Python将CSV文件导入neo4j并消除前缀,超详细步骤_第1张图片
    总的文件有2个,CSV文件是自动生成的。Python将CSV文件导入neo4j并消除前缀,超详细步骤_第2张图片

  • 再创建文件,写代码,代码如下:

from rdflib import Graph #导入CSV文件到Neo4j
import csv

g = Graph()
g.parse("E:\ontologeExperience\change rdf\liberary_my_rdf.owl", format="xml") #protege中注意直接保存为RDF/XML文件即可
with open("3.csv", "w", newline='') as f1:
    writer = csv.writer(f1)
    header = ['Subject', 'Predicate', 'Object']
    writer.writerow(header)
    for stmt in g:
        print(stmt)
        list_triple = []
        for st in stmt:
            list2 = []
            st = str(st)
            if '#' in st: # 使用split分割符直接把owl中的前缀URI去除
                list2 = st.split('#')
                list_triple.append(list2[-1])   #append追加元素
            else:
                list2 = st.split('/')
                list_triple.append(list2[-1])
        writer.writerow(list_triple)

抽取出来的三元组(部分截图):
Python将CSV文件导入neo4j并消除前缀,超详细步骤_第3张图片

  • OWL在Python中转换成CSV文件后,再连接Neo4j,并消除前缀,导入Neo4j,代码如下:
    此处代码参考文章:https://blog.csdn.net/qq_36499794/article/details/89597550
from py2neo import Graph, Node, Relationship
import pandas as pd
# 参考文章:https://blog.csdn.net/qq_36499794/article/details/89597550
df = pd.read_csv('E:\\PythonCode\\neo4j\\2.csv', error_bad_lines=False, encoding='GBK')
df = df.fillna('unknown')

new = df['Subject'].str.strip()	#注意是Subject Object Predicate 对应三元组
df['Subject'] = new
new = df['Object'].str.strip()
df['Object'] = new
new = df['Predicate'].str.strip()
df['Predicate'] = new

# 连接neo4j数据库,输入地址、用户名、密码
graph = Graph("http://localhost:7474", auth=("neo4j", "***"))
graph.delete_all()
graph.begin()

# 创建结点
for i in range(len(df['Subject'])):
    node1 = Node('Subject', name=df['Subject'][i])
    graph.merge(node1, 'Subject', 'name')
    node2 = Node('Object', name=df['Object'][i])
    graph.merge(node2, 'Object', 'name')
    rel = Relationship(node1, df['Predicate'][i], node2)
    graph.merge(rel)
print("success")

  • 运行之前肯定要打开Neo4j,win+R 输入cmd进入命令窗口,输入:neo4j.bat console。
    Python将CSV文件导入neo4j并消除前缀,超详细步骤_第4张图片

  • 如果文件很大要等一会,出现success就表示运行成功。
    Python将CSV文件导入neo4j并消除前缀,超详细步骤_第5张图片

  • 最后看Neo4j中的导入情况:
    基本上都导入进来了,约束好像显示不了,还有的我没有展开,基本上还算比较成功,继续加油ヽ( ̄▽ ̄)ノPython将CSV文件导入neo4j并消除前缀,超详细步骤_第6张图片

你可能感兴趣的:(python与neo4j,python,neo4j,csv)