背景:红楼梦以人物众多,人物关系复杂著称,自己又是忠实的小红迷,于是趁着这个机会想把红楼梦的知识图谱尝试构建一下
,从人物关系数据如下:
image.png
获取里面的实体
代码如下:
#-*- conding:utf-8 -*-
import pandas as pd
import numpy as np
f = open("红楼梦_triples.csv",encoding='utf-8')
df = pd.read_csv(f)
print(df['node'].value_counts())
# print(df['node'].unique)
a = df['node'].value_counts()
# a.to_csv("node.csv")
print(type(a))
# print(df['head'].unique)
然后通过python构建图数据库,代码如下 :
import pandas as pd
import numpy as np
from py2neo import Node,Relationship,Graph
g = Graph("http://localhost:7474",
username='neo4j',
password='012464998')
g.run("MATCH (n) OPTIONAL MATCH (n)-[r]-()DELETE n,r")
n = open("./data/node.csv",encoding='utf-8')
r = open("./data/红楼梦_triples.csv",encoding='utf-8')
data01 = pd.read_csv(n)
data02 = pd.read_csv(r)
#建立节点
for i in range(len(data01)):
temp= Node("person",name=data01["node"][i])
# g.create(temp)
for i in range(len(data02)):
temp = Relationship(g.find_one(label="person",property_key='name',property_value=data02["head"][i]),data02['label'][i],
g.find_one(label="person", property_key='name', property_value=data02["tail"][i]))
# g.create(temp)
print(len(data))
tus
刷新neo4j页面,得到效果如下:
image.png
image.png
进行查询
例如查询,贾宝玉的丫鬟都是谁有多少:
match (p: person {name:"贾宝玉"})-[k:丫鬟]-(r) return r,k,p
查询结果如下:
有17个丫鬟
返回图如下:
image.png-
利用图数据库来查询两个实体的最短路径:
例如:查询贾宝玉和香菱之间的关系:
MATCH (p1:person {name:"贾宝玉"}),(p2:person{name:"香菱"}),p=shortestpath((p1)-[*..10]-(p2))RETURN p
结果:
image.png
网友评论