美文网首页知识图谱NLP学习知识图谱
《红楼梦》人物关系知识图谱

《红楼梦》人物关系知识图谱

作者: 飘涯 | 来源:发表于2018-10-17 10:59 被阅读72次

    背景:红楼梦以人物众多,人物关系复杂著称,自己又是忠实的小红迷,于是趁着这个机会想把红楼梦的知识图谱尝试构建一下
    ,从人物关系数据如下:


    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

    相关文章

      网友评论

      • 9189ae370d6c:前面的实体和关系如何构建?
        飘涯:@花香飘飘 方法很多,实体用ner关系你自己定义好再抽取

      本文标题:《红楼梦》人物关系知识图谱

      本文链接:https://www.haomeiwen.com/subject/hqmlzftx.html