HowNet介绍及使用-程序员宅基地

技术标签: 语言知识库  python  hownet  OpenHowNet  

清华大学张钹院士做了一场题为《AI科学突破的前夜,教授们应当看到什么?》提出:

AI未来的科学突破是建立一种同时基于知识和数据的AI系统。


HowNet

知网(HowNet)的构建秉承还原论思想,即所有词语的含义可以由更小的语义单位构成,而这种语义单位被称为“义原”(Sememe),即最基本的、不宜再分割的最小语义单位。知网构建了包含 2000 多个义原的精细的语义描述体系,并为十几万个汉语和英语词所代表的概念标注了义原。

清华大学人工智能研究院发布OpenHowNet,首次将知网的核心数据开源,并且开发了丰富的调用接口,实现义原查询、基于义原的词相似度计算等功能。整体包含有 229,767 个中英文词条, 35,202 个概念以及 2,196 个义原。

获取义原个数
print(len(hownet.get_all_sememes()))
2187
获取词语义原

获取词语苹果的义原:

import OpenHowNet

hownet = OpenHowNet.HowNetDict()
result_list = hownet.get("苹果")
print(len(result_list))
print(result_list[0])

输出:

6
{
    
  "Def": "{computer|电脑:modifier={PatternValue|样式值:CoEvent={able|能:scope={bring|携带:patient={$}}}}{SpeBrand|特定牌子}}",
  "en_grammar": "noun",
  "ch_grammar": "noun",
  "No": "127151",
  "syn": [
    {
    
      "id": "004024",
      "text": "IBM"
    },
    {
    
      "id": "041684",
      "text": "戴尔"
    },
    {
    
      "id": "049006",
      "text": "东芝"
    },
    {
    
      "id": "106795",
      "text": "联想"
    },
    {
    
      "id": "156029",
      "text": "索尼"
    },
    {
    
      "id": "004203",
      "text": "iPad"
    },
    {
    
      "id": "019457",
      "text": "笔记本"
    },
    {
    
      "id": "019458",
      "text": "笔记本电脑"
    },
    {
    
      "id": "019459",
      "text": "笔记本电脑"
    },
    {
    
      "id": "019460",
      "text": "笔记本电脑"
    },
    {
    
      "id": "019461",
      "text": "笔记本电脑"
    },
    {
    
      "id": "019463",
      "text": "笔记簿电脑"
    },
    {
    
      "id": "019464",
      "text": "笔记簿电脑"
    },
    {
    
      "id": "020567",
      "text": "便携式电脑"
    },
    {
    
      "id": "020568",
      "text": "便携式计算机"
    },
    {
    
      "id": "020569",
      "text": "便携式计算机"
    },
    {
    
      "id": "127224",
      "text": "平板电脑"
    },
    {
    
      "id": "127225",
      "text": "平板电脑"
    },
    {
    
      "id": "172264",
      "text": "膝上型电脑"
    },
    {
    
      "id": "172265",
      "text": "膝上型电脑"
    }
  ],
  "ch_word": "苹果",
  "en_word": "apple"
}

共6个义原,这里只列出作为作为电脑的这个义原。其中每个“xx|yy”代表一个义原,“|”左边为英文右边为中文;义原之间还被标注了复杂的语义关系,如host、modifier、belong等,从而能够精确地表示词语的语义信息。此外,还包括同义词信息。

可视化:

hownet.visualize_sememe_trees("苹果", K=2)
Find 6 result(s)
Display #0 sememe tree
[sense]苹果
└── [None]computer|电脑
    ├── [modifier]PatternValue|样式值
    │   └── [CoEvent]able|能
    │       └── [scope]bring|携带
    │           └── [patient]$
    └── [patient]SpeBrand|特定牌子
Display #1 sememe tree
[sense]苹果
└── [None]fruit|水果

K=2 表示列出两个义原。

获取英文单词的义原,结果有点奇怪,同义词还是中文,例如:

hownet = OpenHowNet.HowNetDict()
result_list = hownet.get("finally", language="en")
print(len(result_list))
print(result_list[0])
10
{
    
  "Def": "{TimingValue|时间特性值:TimeFeature={ending|末}}",
  "en_grammar": "adv",
  "ch_grammar": "adv",
  "No": "043966",
  "syn": [
    {
    
      "id": "037833",
      "text": "从头"
    },
    {
    
      "id": "037834",
      "text": "从头"
    },
    {
    
      "id": "037861",
      "text": "从小"
    },
    {
    
      "id": "037877",
      "text": "从一开始"
    },
    {
    
      "id": "037878",
      "text": "从一开始"
    },
    {
    
      "id": "039900",
      "text": "打小儿"
    },
    {
    
      "id": "043988",
      "text": "到了儿"
    },
    {
    
      "id": "043989",
      "text": "到了儿"
    },
    {
    
      "id": "044015",
      "text": "到头"
    },
    {
    
      "id": "044016",
      "text": "到头"
    },
    {
    
      "id": "044018",
      "text": "到头来"
    },
    {
    
      "id": "044019",
      "text": "到头来"
    },
    {
    
      "id": "076000",
      "text": "后冷战"
    },
    {
    
      "id": "078235",
      "text": "环比"
    },
    {
    
      "id": "099626",
      "text": "可算"
    },
    {
    
      "id": "099627",
      "text": "可算"
    },
    {
    
      "id": "099628",
      "text": "可算"
    },
    {
    
      "id": "099629",
      "text": "可算"
    },
    {
    
      "id": "108348",
      "text": "临场"
    },
    {
    
      "id": "108352",
      "text": "临床"
    }
  ],
  "ch_word": "到底",
  "en_word": "finally"
}

显示有10个义原,但是每个的定义Def也是一样的。

获取K个最接近输入词的词
ownet_dict_advanced = OpenHowNet.HowNetDict(use_sim=True)
hownet.initialize_sememe_similarity_calculation()
# 初始化耗时比较长
query_result = hownet_dict_advanced.get_nearest_words_via_sememes("苹果", 20)
example = query_result[0]
print("word_name:", example["word"])
print("id:", example["id"])
print("synset and corresonding word&id&score:")
for item in example["synset"]:
    print(item)

输出:

word_name: 苹果
id: 127151
synset and corresonding word&id&score:
{
    'id': 4024, 'word': 'IBM', 'score': 1.0}
{
    'id': 41684, 'word': '戴尔', 'score': 1.0}
{
    'id': 49006, 'word': '东芝', 'score': 1.0}
{
    'id': 106795, 'word': '联想', 'score': 1.0}
{
    'id': 156029, 'word': '索尼', 'score': 1.0}
{
    'id': 4203, 'word': 'iPad', 'score': 0.865}
{
    'id': 19457, 'word': '笔记本', 'score': 0.865}
{
    'id': 19458, 'word': '笔记本电脑', 'score': 0.865}
{
    'id': 19459, 'word': '笔记本电脑', 'score': 0.865}
{
    'id': 19460, 'word': '笔记本电脑', 'score': 0.865}
{
    'id': 19461, 'word': '笔记本电脑', 'score': 0.865}
{
    'id': 19463, 'word': '笔记簿电脑', 'score': 0.865}
{
    'id': 19464, 'word': '笔记簿电脑', 'score': 0.865}
{
    'id': 20567, 'word': '便携式电脑', 'score': 0.865}
{
    'id': 20568, 'word': '便携式计算机', 'score': 0.865}
{
    'id': 20569, 'word': '便携式计算机', 'score': 0.865}
{
    'id': 127224, 'word': '平板电脑', 'score': 0.865}
{
    'id': 127225, 'word': '平板电脑', 'score': 0.865}
{
    'id': 172264, 'word': '膝上型电脑', 'score': 0.865}
{
    'id': 172265, 'word': '膝上型电脑', 'score': 0.865}
计算两个指定词的相似度
res = hownet_dict_advanced.calculate_word_similarity("苹果", "笔记本电脑")
print(res)
# 0.865

如果其中的任何一个词不在HowNet中,函数将返回0。

res = hownet_dict_advanced.calculate_word_similarity("苹果", "梨")
print(res)
# 0

OpenHowNet安装以及其他使用方法见文档


其他占个坑:

学术上:
https://zhuanlan.zhihu.com/p/32688983

以及如何用来计算情感倾向值

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ltochange/article/details/119925907

智能推荐

Kali Linux-SET社会工程学攻击_kali社会工程学攻击,2024年最新最新网络安全高级面试题汇总-程序员宅基地

文章浏览阅读942次,点赞26次,收藏8次。Swaks 是一款类似于“瑞士军刀”的工具,之所以这么说是因为它在SMTP邮件协议领域有非常非常广泛的应用,同时对于一名信息安全高级工程师来说也是一个不错的利用工具!安全意识较差的用户在收到钓鱼邮件后点击邮件中的钓鱼链接、下载附件中的木马程序,便可能遭受攻击!以上通过 SET + MSF 渗透工具,演示了如何生成木马、获得主机Shell、主机提权、远程桌面控制、日志清除、后门植入等完整的一次渗透测试攻击。命令迁移会话进程到指定的进程pid,达到隐藏控制会话的进程,此时原来的进程是看不到的目的(通过。

JAVA字符集_java str 设置字符集-程序员宅基地

文章浏览阅读1k次。 JAVA字符集日期:2006-08-30 点击:317 作者:键者天行 来源:CSDN1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。注意,这两个字没_java str 设置字符集

无线充电智能保温杯设计_指纹杯方案-程序员宅基地

文章浏览阅读1.3k次,点赞3次,收藏16次。id=11962达到了智能保温杯的温度 的控制。本设计采用DS18B20温度传感器作为温度信号的采集器,以数字传感器和单片机为主体完成对整个温度的监控,再配以相应的继电电路完成对整个温度系统的控制。本设计的目标是设计出一个能够较好的控制杯内温度的智能保温杯,保温杯的容量为500ml,杯身的太阳能板充电装置则可以达到合理的、高效率的利用太阳能对其内部电池充电,从而达到节约能源的目的。保温杯内部通过温度传感器来测量水温,杯子外壳设有LED显示屏,显示杯内水温以及设定的温度值以及实时显示的温度值。_指纹杯方案

数据挖掘在轨迹信息上的应用实验-程序员宅基地

文章浏览阅读2.1k次,点赞8次,收藏40次。文章目录1. 实验概览2. 数据集下载3. 数据预处理3.1 异常点去除3.2 停留点检测与环绕点检测3.3 轨迹分段4. 基于轨迹信息的数据挖掘4.1 路口检测4.1.1 地图分割与轨迹点速度计算4.2 偏好学习通常,我们将一个连续的GPS信号点序列称为一个轨迹(Trajectory),在拥有GPS数据轨迹的情况下,我们能通过这些数据信息挖掘出哪些有效信息是数据挖掘在轨迹信息上的重要研究内容。在该实验中我们使用UCI上公开数据集,利用该轨迹数据集尝试挖掘其中的隐藏信息,在信息挖掘之前,我们需要对原始数

excel柱状图堆叠图显示总和_excel堆积柱形图显示百分比 在Excel堆积图中显示百分比标签的方法...-程序员宅基地

文章浏览阅读3.4k次。excel堆积柱形图显示百分比 在Excel堆积图中显示百分比标签的方法,前天刚学习了一个excel的新技术,叫“excel堆积柱形图显示百分比”授课老师对我们说,这一技术的专业全称为“excel堆积柱形图显示百分比 在Excel堆积图中显示百分比标签的方法”今天宝宝把这个技术分享给大家,不用谢哦~堆积图能够方便地显示各部分与总体之间的大小关系,为了更直观地表现部分与总体的关系,有时希望在堆积图中..._百分比堆积柱状图的总和为什么不是百分之百

python post json 解析失败_python - 通过requests.post+URL上传json数据报错[Errno 111] Connection refused...-程序员宅基地

文章浏览阅读1k次。问 题写了一个脚本,抓取Linux服务器信息,然后上传给Django的一个接口,脚本没有错误。print能输出正确信息,接口测试正常,Linux虚拟机操作,Django在pycharm上。脚本片段:hostinfo = {'hostname':hostname,'ip': ip,'osversion': osversion,'memory': memory,'disk': disk,'cpu_co..._pytyon post connection refused

随便推点

Ubuntu使用日常_使用ubuntu-程序员宅基地

文章浏览阅读6.1k次,点赞2次,收藏2次。Ubuntu使用日常记录使用Ubuntu过程中遇到的问题,总结一些常用工具,归纳一些小技巧。本文永久更新地址:Ubuntu.md文章目录Ubuntu使用日常1、redshift色温调节工具2、无道词典3、pip指向问题4、更换pip源5、GitHub源6、查看Linux本地IP地址7、ubuntu本地开启微型服务器8、ECS与本地主机互传文件9、小书匠和Evernote10、Windows..._使用ubuntu

【第十一届泰迪杯B题产品订单的数据分析与需求预测产品订单的数据分析与需求预测 】第二大问代码分享+解题思路(EDA数据再探索+LightGBM模型)_第十一届“泰迪杯”数据挖掘挑战赛 b题 优秀论文-程序员宅基地

文章浏览阅读1.1w次,点赞21次,收藏232次。- 根据第一问的简单分析,和衍生出了一些特征,例如年月日、价格标签、是否节假日、week等- 读入第一问保存的文件csv,process1.csv,进行数据再探索,发现需要对价格进行更细致的分区间,我采用最优分箱操作,将每个产品的价格归为不同的价位区间,因为相同的产品,它在不同的地区,不同的时间,价格会有波动,所以使用分箱,可以大致归纳价格特征。- 然后再在此基础上,衍生出其他特征,星期几、是否工作日等(因为跟据EDA数据探索和第一问可视化分析,发现周末、还有不是工作日时,需求量会有所上升。)_第十一届“泰迪杯”数据挖掘挑战赛 b题 优秀论文

SSM 整合详细步骤_ssm整合-程序员宅基地

文章浏览阅读2.8k次,点赞8次,收藏31次。SSM 整合第一章环境准备1、创建数据库和表结构create database ssm;create table account(id int primary key auto_increment,name varchar(100),money double(7,2),);2、创建 Maven 工程创建ssm_parent父工程(打包方式选择pom,必须的)创建ssm_web子模块(打包方式是war包)创建ssm_service子模块(打包方式是jar包)创建ssm_dao子模_ssm整合

华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典_华为机试题库及答案python-程序员宅基地

文章浏览阅读2.5w次,点赞48次,收藏303次。华为OD机试题华为OD面试华为OD笔试华为OD算法华为OD编程题华为OD岗位要求华为OD职位评估华为OD考试经验分享华为OD在线测试华为OD评估标准华为OD评测系统华为OD筛选机制华为OD编程语言要求华为OD数据结构与算法华为OD程序设计华为OD程序优化华为OD编程能力考核华为OD编程技巧与经验_华为机试题库及答案python

imx6 配置串口波特率_100ask imx6ull mini-程序员宅基地

文章浏览阅读194次。设置工具链交叉编译工具链主要是用于在ubuntu主机上编译并生成可以在其它平台上运行的系统。设置交叉编译工具主要是设置PATH ARCH和CROSS_COMPILE三个环境变量,下面介绍具体设置方法(3种方法任选一种)。永久生效如需永久修改,请修改用户配置文件, Ubuntu系统下,修改如下:vim ~/.bashrc在行尾添加或修改:export ARCH=armexport CROSS_COM..._imx6ull 修改调试串口波特率

使用Android Studio实现简单的计算器(已亲自实验通过)_使用多个activity实现分别实现加、减、乘、除的计算器,具体包括:通过一个启动ac-程序员宅基地

文章浏览阅读5.4w次,点赞192次,收藏972次。使用Android Studio实现简单的计算器(已亲自实验通过)实验内容用多个Activity实现分别实现加、减、乘、除的计算器,具体包括:通过一个启动Activity布置4个按钮,每个按钮分别触发加、减、乘、除的Activity;然后在打开的Activity中实现与实验一类似的页面,以一个按钮触发计算输出。实验分析用多个Activity实现分别实现加、减、乘、除的计算器,具体包括:通过一个启动Activity布置4个按钮,每个按钮分别触发加、减、乘、除的Activity;然后在打开的Activi_使用多个activity实现分别实现加、减、乘、除的计算器,具体包括:通过一个启动ac

推荐文章

热门文章

相关标签