文章目录
- py2neo导入csv文件
- py2neo导入周杰伦歌单csv
- 效果展示
py2neo导入csv文件
之前写的知识图谱指南
知识图谱:py2neo将csv文件导入neo4j
因为没有区分不同实体entity
的类型,所以颜色相同,无法相互区分歌手、歌曲还是专辑等等。
py2neo导入周杰伦歌单csv
如果以普通三元组的形式导入周杰伦歌单csv,会出现很多实体entity的冗余,无法形成完整的知识图谱。
通过添加对前两列的描述,则可以对第一列和第二列进行分类查询,此时如果实体entity已经存在,则不建立新的节点Node。
from py2neo import Graph, Node, Relationship
# 连接neo4j数据库,输入地址、用户名、密码
graph = Graph("http://localhost:7474", name="neo4j", password='xxxx')
import pandas as pd
df = pd.read_csv('relation.csv',index_col=0)
df
- 代码改进
如果节点没有被创建过,那么正常创建即可;
如果节点已经被创建过,那么通过py2neo
的match
函数进行节点查询,之后建立关系Relationship
。
graph.delete_all() #清除neo4j中原有的结点等所有信息
from py2neo import NodeMatcher
entity = []
for index,row in df.iterrows():
print(entity)
if row[0] not in entity:
entity.append(row[0])
node1 = Node(row[-2],name=row[0])
graph.create(node1)
else:
node_matcher = NodeMatcher(graph)
#print(list(node_matcher.match(row[-2]).where(row[0])))
node1 = list(node_matcher.match(row[-2]).where(name=row[0]))[0]
if row[1] not in entity:
entity.append(row[1])
node2 = Node(row[-1],name=row[1])
graph.create(node2)
else:
node_matcher = NodeMatcher(graph)
node2 = list(node_matcher.match(row[-1]).where(name=row[1]))[0]
each = Relationship(node1, row[2], node2)
graph.create(each)
效果展示
- 保留50个实体
- 保留100个实体