背景:紅樓夢以人物眾多障本,人物關(guān)系復(fù)雜著稱燥翅,自己又是忠實的小紅迷象对,于是趁著這個機會想把紅樓夢的知識圖譜嘗試構(gòu)建一下
蚕礼,從人物關(guān)系數(shù)據(jù)如下:
獲取里面的實體
代碼如下:
#-*- 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構(gòu)建圖數(shù)據(jù)庫严卖,代碼如下 :
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)
#建立節(jié)點
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頁面席舍,得到效果如下:
進行查詢
例如查詢,賈寶玉的丫鬟都是誰有多少:
match (p: person {name:"賈寶玉"})-[k:丫鬟]-(r) return r,k,p
查詢結(jié)果如下:
有17個丫鬟
返回圖如下:
- 利用圖數(shù)據(jù)庫來查詢兩個實體的最短路徑:
例如:查詢賈寶玉和香菱之間的關(guān)系:
MATCH (p1:person {name:"賈寶玉"}),(p2:person{name:"香菱"}),p=shortestpath((p1)-[*..10]-(p2))RETURN p
結(jié)果:
查詢語句不定期更新哮笆。来颤。。稠肘。福铅。。
https://zee.gl/TQvUTHy