Python将CSV文件导入neo4j并消除前缀,超详细步骤
前言:在Python中将CSV文件导入neo4j,并一次性消除前缀。主要调用了python中的rdflib包并且使用split分割符直接把owl中的前缀URI去除,相比在Neo4j里面操作更加简便,不会遗漏一些结点,并且一次性消除了前缀。
-
在protege中构建完成本体之后,选择RDF/XML导出成OWL文件。
-
在Python中进行操作,先导入rdflib和py2neo包。如果导入包失败,就降低版本,把翻墙软件关了。(不知道是不是这个原因,小编在操作的时候经常导入不可以,换了版本有时候又可以了。)导入成功界面如下:
-
再写代码,代码如下:
import csv
g = Graph()
g.parse("E:\ontologeExperience\change rdf\liberary_my.owl", format="xml") #protege中保存的owl文件
with open("2.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])
else:
list2 = st.split('/')
list_triple.append(list2[-1])
writer.writerow(list_triple)
抽取出来的三元组(部分截图):
- 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。
-
如果文件很大要等一会,出现success就表示运行成功。
-
最后看Neo4j中的导入情况:
基本上都导入进来了,约束好像显示不了,还有的我没有展开,基本上还算比较成功,继续加油ヽ( ̄▽ ̄)ノ