python如何写入三元组数据到neo4j

在数据写入neo4j之前需要做的事情是,要有已经提取出来的三元组数据可以使用,方便来写入到neo4j数据库。
在此处我已经提取出了一些数据存储到了mongodb数据库里面了。

导入工具包
from pymongo import MongoClient
from neo4j.v1 import GraphDatabase, basic_auth, kerberos_auth, custom_auth, TRUST_ALL_CERTIFICATES

链接neo4j的驱动
driver = GraphDatabase.driver("*********", auth=basic_auth(“neo4j”,“neo4j”), trust=TRUST_ALL_CERTIFICATES)
session = driver.session()

链接mongodb读出里面的三元组和用来提取三元组的原文信息。
connect = MongoClient(“", 27017)
db = connect['
’]
db.authenticate("
”, "")
collect = db.

collect1 = db.****

def nodes_relation():
i = 0
for item in collect.find(no_cursor_timeout=True)[i:]:
try:
i += 1
print(i)
拿出用来提取三元组的原文的其他信息
title = item[“name”]
url = item[“url”]
nid = item[“nid”]
origin = item[“origin”]
date = str(item[“date”])
yy = date[:4]
mm = date[4:6]
dd = date[6:8]
time = yy + “-” + mm + “-” + dd
拿出三元组
relation = item[“relation”]
for rel in relation:
for t in rel:
if t[‘predicate’] != ‘含有属性’:
# 去掉 ‘\’和‘.’
obje = str(t[‘obj’]).replace("\","").strip("’").strip(".")
把SHORTNAME 标签字段替换成COMPANY标签,进行统一。
if t[‘subtype’] == ‘SHORTNAME’:
使用 cypher语句创建节点,用 merge语句创建,保证节点的唯一性。
session.run(“merge (a:COMPANY {name:’%s’})” % (t[‘sub’]))
else:
session.run(“merge (a:%s {name:’%s’})” % (t[‘subtype’], t[‘sub’]))
把SHORTNAME 标签字段替换成COMPANY标签,进行统一。
if t[‘objtype’] == ‘SHORTNAME’:
session.run(“merge (a:COMPANY {name:’%s’})” % (obje))
else:
session.run(“merge (a:%s {name:’%s’})” % (t[‘objtype’], obje))
在创建好的节点基础上创建关系 。create unique cypher 保证关系的唯一性。
query = “MATCH(p:%s),(q:%s) where p.name=’%s’and q.name=’%s’ create unique §-[:%s {relation:’%s’}]->(q)” % ( t[‘subtype’], t[‘objtype’], t[‘sub’], obje, t[‘predicate’], t[‘predicate’])
session.run(query)
else:
写入非关系的属性值
query = "merge(e{name: ‘%s’}) set e.%s = ‘%s’ " % (t[‘sub’], t[‘objtype’], t[‘obj’])
session.run(query)
if t[‘subtype’] == ‘SHORTNAME’:
session.run(“merge (a:COMPANY {name:’%s’})” % (t[‘sub’]))
else:
session.run(“merge (a:%s {name:’%s’})” % (t[‘subtype’], t[‘sub’]))
写入非关系的属性值
query = "merge(e{name: ‘%s’}) set e.title=’%s’,e.url=’%s’,e.nid=’%s’,e.origin=’%s’,e.time=’%s’ " % (
t[‘sub’], title, url, nid, origin, time)
session.run(query)
except Exception as e:
print(e)

if name == ‘main’:
nodes_relation()

你可能感兴趣的:(neo4j)