当前位置: 代码网 > it编程>前端脚本>Python > 知识图谱最简单的demo实现——基于pyvis

知识图谱最简单的demo实现——基于pyvis

2024年07月28日 Python 我要评论
我们在上篇文章中介绍了知识图谱的简单实现,最后使用neo4j进行了展示,对于有些情况我们可能并不想为了查看知识图的结果再去安装一个软件去实现,那么我们能不能直接将三元组画出来呢/接下来我们就介绍一个可视化的工具pyvis,来实现知识图谱的可视化安装其实很简单,直接pip就可以。

1、前言

我们在上篇文章中介绍了知识图谱的简单实现,最后使用neo4j进行了展示,对于有些情况我们可能并不想为了查看知识图的结果再去安装一个软件去实现,那么我们能不能直接将三元组画出来呢/

接下来我们就介绍一个可视化的工具pyvis,来实现知识图谱的可视化

2、简单介绍pyvis

2.1 安装pyvis

安装其实很简单,直接pip就可以

pip install pyvis

2.2 创建节点

from pyvis.network import network
net = network(notebook=true)

net.add_node(1, label="张三")
net.add_node(2, label="李四")

net.nodes
#查看节点
[{'color': '#97c2fc', 'id': 1, 'label': '张三', 'shape': 'dot'},
 {'color': '#97c2fc', 'id': 2, 'label': '李四', 'shape': 'dot'}]

展示

net.show("basic.html")

在这里插入图片描述

2.3 创建边

net.add_edge(1,2, label="好朋友", color="blue", width=2)

在这里插入图片描述

3、知识图谱构建

实体和三元组还是来自于的内容

3.1 创建节点

col = ["orange","blue","red","green","purple"]

def pyvis_node_create(net,ner_list_nh,ner_list_ni,ner_list_ns,predicate):
    if len(ner_list_nh)!=0:
        for i in range(len(ner_list_nh)):
            #graph.create(node('人名', name=ner_list_nh[i]))
            net.add_node(i, label=ner_list_nh[i],title = "人名", color=col[0])


    if len(ner_list_ni)!=0:
        for i in range(len(ner_list_ni)):
            #graph.create(node('机构名', name=ner_list_ni[i]))
            net.add_node( label=ner_list_ni[i],title = "机构名", color=col[1])

    if len(ner_list_ns)!=0:
        for i in range(len(ner_list_ns)):
            #graph.create(node('地名', name=ner_list_ns[i]))
            net.add_node(100+i, label=ner_list_ns[i],title = "地名", color=col[2])
            

    if len(predicate)!=0:
        for i in range(len(predicate)):
            #graph.create(node('标签', name=predicate[i]))
            net.add_node(1000+i, label=predicate[i],title = "标签", color=col[3])

代码只需要将之前在neo4j创建节点的稍微改下就行

在这里插入图片描述

3.2 创建边

我们首先要创建一个节点名称和节点id对应的字典

def create_node_id_dic(net):
    dic_node_id={}
    for i in net.node_ids:
        #print(i)
        dic_node_id[str(net.node_map[i]["label"])] = i
    return  dic_node_id

得到的字典如下

{'苏轼': 0,
 '黄庭坚': 1,
 '常州': 100,
 '宋朝的著名文学家': 1000,
 '他的好朋友': 1001,
 '写词': 1002,
 '写诗': 1003}

创建边

def pyvis_relationship_create(net,kg_list,node_id_dic):
    for m in range(len(kg_list)):        
        try:
            net.add_edge(node_id_dic[kg_list[m][0]], node_id_dic[kg_list[m][2]], label=kg_list[m][1], color="blue", width=2)

        except attributeerror as e:
            print(e, m)

在这里插入图片描述
结果跟在neo4j中是一样的

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com