from py2neo import*
import pandas as pd
graph = Graph("http://localhost:7474", user="neo4j", password="neo4jneo4j",name = "neo4j")
def sjdata():
count = 0
frame = pd.read_csv(r"D:\aasuch\sj.csv",encoding='gbk') #读取文件
for i in frame.index:
sj_name = frame["标题"].values[i]
sj_btlj = frame["标题链接"].values[i]
sj_jj = frame["js_text"].values[i]
sj_fbsj = frame["发布时间"].values[i]
sj_nf = frame["年份"].values[i]
sj_rw = frame["人物"].values[i]
sj_name = str(sj_name) #将数据转化为str类型
sj_btlj = str(sj_btlj)
sj_jj = str(sj_jj)
sj_fbsj = str(sj_fbsj)
sj_nf = str(sj_nf)
sj_rw = str(sj_rw)
# 节点创建
sj_node = Node('人物',name=sj_rw)
graph.merge(sj_node,'人物','name')
nf_node = Node('年份',name=sj_nf)
sj_node = Node('年份',name=sj_nf)
graph.merge(sj_node,'年份','name')
fbsj_node = Node('发布时间',name=sj_fbsj)
sj_node = Node('发布时间',name=sj_fbsj)
graph.merge(sj_node,'发布时间','name') #merge方法将重复的元素去掉
btlj_node = Node('标题链接',name=sj_btlj)
jj_node = Node('js_text',name=sj_jj)
name_node = Node('标题', name=sj_name)
#创建节点间的关系
sj_2 = Relationship(sj_node, '年份', nf_node)
sj_3 = Relationship(sj_node, '发布时间', fbsj_node)
sj_4 = Relationship(sj_node, '标题链接', btlj_node)
sj_5 = Relationship(sj_node, 'js_text', jj_node)
sj_6 = Relationship(sj_node, '标题', name_node)
#开始创建操作
try:
graph.create(sj_2)
except:
continue
try:
graph.create(sj_3)
except:
continue
try:
graph.create(sj_4)
except:
continue
try:
graph.create(sj_5)
except:
continue
try:
graph.create(sj_6)
except:
continue
count += 1
print(count)
sjdata()
因为我在网上搜的知识图谱类型都是只有A——>B类型,我想写人物——>年份——>发布时间类型,但是第一个merge去除重复语句是行的,第二个merge就会报错。
报错如下:py2neo.data.UniquenessError: Found 60 matching nodes for primary label '年份' and primary key 'name' with labels {'年份'} but merging requires no more than one
求大佬们指点一下,感恩。