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

1、前言

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

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

2、简单介绍pyvis

2.1 安装pyvis

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

python 复制代码
pip install pyvis

2.2 创建节点

python 复制代码
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'}]

展示

python 复制代码
net.show("basic.html")

2.3 创建边

python 复制代码
net.add_edge(1,2, label="好朋友", color="blue", width=2)

这里的节点是可以拖动的,跟neo4j非常相似

3、知识图谱构建

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

3.1 创建节点

python 复制代码
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对应的字典

pyvis创建边必须是id-->id的,所以我们需要根据实体名称得到其在当前的节点ID,我们在进行创建边

python 复制代码
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

得到的字典如下

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

创建边

python 复制代码
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中是一样的

相关推荐
yngsqq22 分钟前
一键打断线(根据相交点打断)——CAD c# 二次开发
windows·microsoft·c#
B站计算机毕业设计超人32 分钟前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
学术头条37 分钟前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
18号房客41 分钟前
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·sklearn
feifeikon44 分钟前
机器学习DAY3 : 线性回归与最小二乘法与sklearn实现 (线性回归完)
人工智能·机器学习·线性回归
游客5201 小时前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(2)
人工智能·机器学习·sklearn
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
咸鱼桨2 小时前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派
强哥之神2 小时前
Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
人工智能·深度学习·机器学习·语言模型·自然语言处理·音视频·openai