在neo4j中导入csv文件并构建知识图谱
×
本文csv文件数据来源于openKG中达观的开源知识图谱数据。
从开源社区中下载下来的数据文件还是json,先用python把json文件转为csv文件。
import csv
import json
with open('entities.json','r',encoding='utf-8') as fp:
data=json.load(fp,strict=False)
csv_file = open('entities.csv', 'a', newline='', encoding='utf-8') # 实体文件保存位置
writer = csv.writer(csv_file)
writer.writerow(['entity:id', 'name', 'label'])
# print(data)
for da in data:
for i in range(len(data[da])):
csv_file = open('entities.csv', 'a', newline='', encoding='utf-8') # 实体文件保存位置
writer = csv.writer(csv_file)
num=0
writer.writerow(['e'+str(num+1),data[da][i],da])
num+=1
导入之后在neo4j中使用命令
导入csv到neo4j并创建节点
load csv from "file:///entities.csv" as line
create(:entity{id:line[0],name:line[1],label:line[2]})
load csv from "file:///relationships.csv" as line
create(:relationship{head:line[0],relationship:line[1],end:line[2]})
load csv from "file:///attributes.csv" as line
create(:attribute{attrname:line[0],from:line[1],to:line[2]})
导入成功之后的部分节点,这里以entitiy为例:
注:其他两个表attributes和relationships操作同理
创建关系
使用新节点创建关系:
举例:
CREATE (n:entity{name:'郑树森'})-[r:夫妻]->(m:entity{name:'李兰娟'}) return type(r)
使用已知节点创建带属性的关系
match (n:entity{name:'药明生物'}),(m:entity{name:'药明海德'}) create (n)-[r:`同行`{relation:'同行'}]->(m)return r
删除关系
match(n:relationship{end:'药明生物'})<-[r]-(m) delete r
用已知节点构建关系:
把entity根据relationship连接起来
MATCH (a:entity),(b:entity),(c:relationship)
WHERE a.name = c.head AND b.name = c.end and c.relationship='采用'
CREATE (a)-[r:采用] -> (b)
给以有节点添加新属性
match(n:entity{label:'文章'}) set n.date=null return n
match(n:entity{label:'机构'}) set n.全称=null,n.英文名=null return n
match(n:entity{label:'研报'}) set n.发布时间=null,n.评级=null,n.上次评级=null return n
把文章类的实体节点与属性集和发布时间连接
match(a:entity),(b:attribute) where a.label='文章' and a.name=b.attrname set a.date=b.to return a
把机构类的实体节点与属性集和发布时间连接
match(a:entity),(b:attribute) where a.label='机构' and a.name=b.attrname and b.from='全称' set a.全称=b.to return a
把研报类的实体节点与属性集和发布时间连接
match(a:entity),(b:attribute) where a.label='研报' and a.name=b.attrname and b.from='发布时间' set a.发布时间=b.to return a
match(a:entity),(b:attribute) where a.label='研报' and a.name=b.attrname and b.from='评级' set a.评级=b.to return a
match(a:entity),(b:attribute) where a.label='研报' and a.name=b.attrname and b.from='上次评级' set a.上次评级=b.to return a
match(a:entity),(b:attribute) where a.label='研报' and a.name=b.attrname and b.from='上次评级' set a.上次评级=b.to return a
查看原文
×
网址:在neo4j中导入csv文件并构建知识图谱 https://mxgxt.com/news/view/535541
相关内容
利用图数据库neo4j搭建娱乐圈知识图谱Neo4j实战应用构建明星关系图谱
利用python构建知识图谱,在neo4j里显示不了关系,如何解决?
Neo4j在构建掘金人物关系图中的应用
什么是知识图谱(KG)?
知识图谱
Neo4j:图数据库的引领者及其应用场景探索
知识图谱软件
水滴上线CONF医疗知识图谱,构建健康保障数据中台
react前端关系图谱实现