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

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)

在这里插入图片描述

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

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对应的字典

pyvis创建边必须是id–>id的,所以我们需要根据实体名称得到其在当前的节点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"])] = ireturn  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中是一样的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32/GD32_分散加载

Q:如何将一个变量、某个源文件的函数在编译阶段就存储在用户指定的区域? KEIL环境:.map后缀文件、.sct后缀文件 IAR环境:.map后缀文件、.icf后缀文件 【map文件】 对固件里面的变量、函数、常量等元素的存储空间进行分配的说明…

ffmpeg开发 环境配置

ffmpeg开发简图 1 下载ffmpeg开发包 https://ffmpeg.org/download.html 包含三个版本:Static、Shared以及Dev Static --- 包含3个应用程序:ffmpeg.exe , ffplay.exe , ffprobe.exe,体积都很大,相关的DLL已经被编译到exe里面去…

Hadoop运行模式及目录结构

文章目录 Hadoop运行模式本地模式伪分布式模式完全分布式模式 Hadoop目录结构配置文件说明默认配置文件:自定义配置文件: Hadoop运行模式 本地模式 这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件…

VS2022使用Vim按键

VS2022使用Vim按键 在插件管理里面搜索VsVim 点击安装,重启VS 工具->选项->VsVim 配置按键由谁处理,建议Ctrl C之类常用的使用VS处理,其它使用Vim处理

2024北京眼健康展,北京近视眼镜展,中国眼视光产品展览会

创中国眼康贸易平台,CEYEE中国眼博会创造2024年眼康产业发展的新动力; ——随着科技的不断发展,人们对于眼睛健康问题的重视程度也越来越高。在这样的背景下,2024第6届中国(北京)国际青少年眼健康产业展览会(CEYEE中国眼博会)将于…

golang WaitGroup的使用与底层实现

使用的go版本为 go1.21.2 首先我们写一个简单的WaitGroup的使用代码 package mainimport ("fmt""sync" )func main() {var wg sync.WaitGroupwg.Add(1)go func() {defer wg.Done()fmt.Println("xiaochuan")}()wg.Wait() }WaitGroup的基本使用场…

Day37| Leetcode 738. 单调递增的数字

今天就一个题目,做完吃完饭抓紧做六级试题。 Leetcode 738. 单调递增的数字 题目链接 738 单调递增的数字 本题目思路还是比较巧妙的,对于98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首…

力扣202题 快乐数 双指针算法

快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#…

在ubuntu虚拟机上安装不同版本的交叉编译工具链

在之前的章节中,学习了如何安装了4.8.3的交叉编译工具链: 交叉编译 和 软硬链接 的初识(面试重点)-CSDN博客 但是,在之后学习内核编译时,由于我的树莓派内核版本较高,为6.1,所以在…

【android开发-01】android中toast的用法介绍

1,android中toast的作用 在Android开发中,Toast是一种用于向用户显示简短消息的轻量级对话框。它通常用于向用户提供一些即时的反馈信息,例如操作结果、提示或警告。 Toast的主要作用如下: 提供反馈:Toast可以在用户…

chrome vue devTools安装

安装好后如下图所示: 一:下载vue devTools 下载链接https://download.csdn.net/download/weixin_44659458/13192207?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-download-2%7Edefault%7ECTRLIST%7EPaid-1-13192207…

知乎禁止转载的回答怎么复制做笔记?

问题 对于“禁止转载”的回答,右键复制是不行的,ctrl-c也不行,粘贴之后都是当前回答的标题。稍微看了代码,应该是对copy事件进行了处理。不过这样真的有用吗,真是防君子不防小人,只是给收集资料增加了许多…

sso单点登录

一:业务需求 客户要求在门户网站上实现一次登录能访问所以信任的系统 二: 处理方式 实现sso单点登录需要前后端配合处理 1. 通过网页授权登录获取当前用户的openid,userid 2.设置单点登录过滤器并进行参数配置 3.另外写一个登录接口&…

Git分支批量清理利器:自定义命令行插件实战

说在前面 不知道大家平时工作的时候会不会需要经常新建git分支来开发新需求呢?在我这边工作的时候,需求都是以issue的形式来进行开发,每个issue新建一个关联的分支来进行开发,这样可以通过issue看到一个需求完整的开发记录&#x…

菜鸟学习日记(Python)——基本数据类型

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 等号()用来…

深入学习redis-基于Jedis通过客户端操作Redis

目录 redis客户端(JAVA) 配置 引入依赖 建立连接 常用命令实现 get/set exists/del keys expire和ttl type 字符串(String) mget和mset getrange和setrange append incr和decr 列表(list) …

Android 13.0 修改Android系统的通知自动成组的数量

场景: Android 系统对显示在通知列表中的同一个应用的通知进行分组管理,即相同的packageName中,当通知数量达到系统默认指定的数量时,会自动成一组. Android 13.0 中系统默认的自动成组数如下所示: 核心路径 : frameworks/base/core/res/res/values/config.xml<!-- 来自同…

leecode | 1657. 确定两个字符串是否接近 | 30号最后一题

判断两个字符串是否是最接近 怎么解释&#xff0c;最接近&#xff1f; 首先两个字符串的长度要一样&#xff0c;字符串中的字符出现的频率要一样 然后字符串中任意两个不同字符串可以直接交换 当然&#xff0c;多个也可以交换&#xff0c;例如&#xff1a;aacabb -> bbcbaa&…

c++--类型的基础

1.常量对象&#xff0c;常量成员函数 (1).常量对象 常量对象的引用和指针不能调用类的普通的成员函数。只能调用常量成员函数。 (2).常量成员函数&#xff1a;把const放在类成员函数参数列表后。表示隐含的this是一个指向常量的指针 (3).当创建一个const对象时&#xff0c;直到…

运行启动vue项目报报错node: --openssl-legacy-provider is not allowed in NODE_OPTIONS解决

报错的问题就是package.json中的Scripts下的dev 解决方法就是要不升级你的应用代码&#xff0c;支持 新版本的node.js 要不就是删除SET NODE_OPTIONS--openssl-legacy-provider &&代码&#xff0c;如下代码即可正常运行起来