自然语言20.1 WordNet介绍和使用
https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149(欢迎关注博主主页,学习python视频资源)
Wordnet是一个词典。每个词语(word)可能有多个不同的语义,对应不同的sense。而每个不同的语义(sense)又可能对应多个词,如topic和subject在某些情况下是同义的,一个sense中的多个消除了多义性的词语叫做lemma。例如,“publish”是一个word,它可能有多个sense:
次数可以用来判断高频词的权重
1. (39) print, publish -- (put into print; "The newspaper published the news of the royal couple's divorce"; "These news should not be printed")
2. (14) publish, bring out, put out, issue, release -- (prepare and issue for public distribution or sale; "publish a magazine or newspaper")
3. (4) publish, write -- (have (one's written work) issued for publication; "How many books did Georges Simenon write?"; "She published 25 books during her long career")
在第一个sense中,print和publish都是lemma。Sense 1括号内的数字39表示publish以sense 1在某外部语料中出现的次数。显然,publish大多数时候以sense 1出现,很少以sense 3出现。
WordNet的具体用法
NLTK是Python的一个自然语言处理工具,其中提供了访问wordnet各种功能的函数。下面简单列举一些常用功能:
得到wordnet本身:
from nltk.corpus import wordnet
获得一个词的所有sense,包括词语的各种变形的sense:
wordnet.synsets('published')
[Synset('print.v.01'),
Synset('publish.v.02'),
Synset('publish.v.03'),
Synset('published.a.01'),
Synset('promulgated.s.01')]
得到synset的词性:
>>> related.pos
's'
得到一个sense的所有lemma:
>>> wordnet.synsets('publish')[0].lemmas
[Lemma('print.v.01.print'), Lemma('print.v.01.publish')]
得到Lemma出现的次数:试验失败
>>> wordnet.synsets('publish')[0].lemmas[1].count()
39
在wordnet中,名词和动词被组织成了完整的层次式分类体系,因此可以通过计算两个sense在分类树中的距离,这个距离反应了它们的语义相似度:
>>> x = wordnet.synsets('recommended')[-1]
>>> y = wordnet.synsets('suggested')[-1]
>>> x.shortest_path_distance(y)
0
形容词和副词的相似度计算方法:
形容词和副词没有被组织成分类体系,所以不能用path_distance。
>>> a = wordnet.synsets('beautiful')[0]
>>> b = wordnet.synsets('good')[0]
>>> a.shortest_path_distance(b)
-1
形容词和副词最有用的关系是similar to。
>>> a = wordnet.synsets('glorious')[0]
>>> a.similar_tos()
[Synset('incandescent.s.02'),
Synset('divine.s.06'),
……]
http://www.tuicool.com/articles/zqIvAr
WordNet是面向语义的英语词典,类似于传统字典。它是NLTK语料库的一部分,可以被这样调用:
更简洁的写法:
1 .单词
查看一个单词的同义词集用synsets(); 它有一个参数pos,可以指定查找的词性。这里得到的同义词集是同义词集的集合,即里面不是单纯的词,是同义词的集合.
注:
- 一个synset(同义词集:指意义相同的词条的集合)被一个三元组描述:(单词.词性.序号)。这里的’dog.n.01’指:dog的第一个名词意思;’chase.v.01’指:chase的第一个动词意思
- pos可为:NOUN、VERB、ADJ、ADV…
2 .同义词集
注 :一些关系的获得只能通过Lemmas,比如反义词:
3. Similarity
synset1.path_similarity(synset2): 是基于上位词层次结构中相互连接的概念之间的最短路径在0-1范围的打分(两者之间没有路径就返回-1)。同义词集与自身比较将返回1
参考:
http://nltk.googlecode.com/svn/trunk/doc/howto/wordnet.html
python 自然语言处理
转载请说明出处:http://www.cnblogs.com/KingKou/p/4121373.html
http://www.cnblogs.com/KingKou/p/4121373.html
1.简介
Wordnet是一个由普林斯顿大学认识科学实验室在心理学教授乔治·A·米勒的指导下建立和维护的大型的英语词典,WordNet的开发有两个目的:
1.它既是一个字典,又是一个辞典,它比单纯的辞典或词典都更加易于使用。
2.支持自动的文本分析以及人工智能应用。
在WordNet中,名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连
接。(一个多义词将出现在它的每个意思的同义词集合中)。
2.使用
2.1 直接调用
直接使用wn.exe程序,命令行格式如下:
Wn [单词] [options] [search_option]
Options:
-h:会在显示结果前面显示帮助信息
-g:显示同义词相关的文本注释,一般是释义+例句
-a:在每一种sense前,显示字典撰写者的文件信息
-o:显示同义词的偏移量
-s:显示所有同义词的单词编号
-l:显示wordnet的版权、版本、许可证信息
-n#:只查找单词的第#个释义的信息
-over:显示单词的所以释义的整体信息
search_option:
-syns (n | v | a | r ):显示单词的同义词和直接上位词的同义词集。同义词以使用频率排序。括号里的是对应的词性(名词,动词,形容词,副词)
-simsv:显示动词的同义词和包含单词的直接上位词的同义词集合。同义词按照语义相似度分组
-ants (n | v | a | r ):显示单词的反义词集
-faml (n | v | a | r ):显示单词是否常见,和一词多义信息
-hype (n | v ):递归地显示单词上位词树。(单词 IS A KIND OF _____ relation)
-hypo (n | v ):显示直接下位词(_____ IS A KIND OF 单词 relation)
-tree (n | v ):递归显示单词的下位词树
-coor (n | v ):显示每个同义词的直接上位词及上位词的直接上位词
-deri (n | v ):显示派生名词和动词之间的联系形式。如goodness
-domn (n | v | a | r ):显示单词所属的类,如good的副词
-domt (n | v | a | r ):显示所有被分在单词所在领域的所有成员
-subsn:显示实体的部件关系。HAS SUBSTANCE关系(tree)
-partn:显示部分关系,比如头的部分是耳朵,脸,鼻子,之类的。HAS PART关系
-membn:显示成员关系,比如people有成员citizen。HAS MEMBER关系
-meron:显示上面三个全部信息
-hmern:显示成员树。这是一个递归树,会显示单词的所有成员和他的上位词(people)
-sprtn:显示包含单词的实体(PART OF关系)
-smemn:显示包含这个单词为成员的实体,MEMBER OF关系
-ssubn:显示包含这个单词为部件关系的实体,SUBSTANCE OF关系
-holon:显示所有上述三个关系
-hholn:递归显示part of关系
-entav:显示蕴含关系,通常是动词(push)
-framv:显示示例
-causv:导致关系
-pert (a | r ):pertainyms
-attr (n | a ):名词形容词的相互显示
-grep (n | v | a | r ):显示包含单词的词
2.2 nltk接口调用
Nltk中也带有wordnet,但是调用方式有所不同,调用方式如下:
from nltk.corpus import wordnet as wn
首先,是我们常用同义词的调用:
wn.synsets('motorcar')
结果:[Synset('car.n.01')]
因为'motorcar'只有一个意思,所以结果只有一个,那就是’car’作为名词的第一种释义。
我们也可以这样调用,获取单词指定词性、释义的同义词集:
>>> wn.synset('car.n.01').lemma_names
结果:
['car', 'auto', 'automobile', 'machine', 'motorcar']
如果我们不知道单词第I个释义的意思,我们可以调用definition查看,以便更精确地使用。
>>> wn.synset('car.n.01').definition
结果:
'a motor vehicle with four wheels; usually propelled by an internal combustion engine(内燃机)'
我们还可以调用examples查看具体例句:
>>> wn.synset('car.n.01').examples
结果:
['he needs a car to get to work']
在语言学中,有一个重要的任务,就是消歧,我们使用lemma(词条),可以获得一对一的同义词配对。
>>> wn.synset('car.n.01').lemmas ①
结果:
[Lemma('car.n.01.car'), Lemma('car.n.01.auto'), Lemma('car.n.01.automobile'),
Lemma('car.n.01.machine'), Lemma('car.n.01.motorcar')]
① 这是所有的词条,结果和上面直接查看同义词的是一样的
>>> wn.lemma('car.n.01.automobile') ②
结果:
Lemma('car.n.01.automobile')
② 我们可以判断特定两个词是否满足要求
>>> wn.lemma('car.n.01.automobile').synset ③
结果:
Synset('car.n.01')
③ 获取词条对应的同义词
>>> wn.lemma('car.n.01.automobile').name ④
结果:
'automobile'
④ 获取词条的名字
通过上面,我们可以获得一种获得同义词的方法:
>>> wn.synsets('car')
[Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'),
Synset('cable_car.n.01')]
>>> for synset in wn.synsets('car'):
... print synset.lemma_names
...
['car', 'auto', 'automobile', 'machine', 'motorcar']
['car', 'railcar', 'railway_car', 'railroad_car']
['car', 'gondola']
['car', 'elevator_car']
['cable_car', 'car']
把得到的结果合并区set()即可获得单词的同义词。
另外一种获得同义词,或者说是同类词的方法,就是上位词和下位词。比如’car’:
>>> motorcar = wn.synset('car.n.01')
>>> types_of_motorcar = motorcar.hyponyms()
>>> types_of_motorcar[26]
Synset('ambulance.n.01')
>>> sorted([lemma.name for synset in types_of_motorcar for lemma in synset.lemmas])
['Model_T', 'S.U.V.', 'SUV', 'Stanley_Steamer', 'ambulance', 'beach_waggon',
'beach_wagon', 'bus', 'cab', 'compact', 'compact_car', 'convertible',
'coupe', 'cruiser', 'electric', 'electric_automobile', 'electric_car',
'estate_car', 'gas_guzzler', 'hack', 'hardtop', 'hatchback', 'heap',
'horseless_carriage', 'hot-rod', 'hot_rod', 'jalopy', 'jeep', 'landrover',
'limo', 'limousine', 'loaner', 'minicar', 'minivan', 'pace_car', 'patrol_car',
'phaeton', 'police_car', 'police_cruiser', 'prowl_car', 'race_car', 'racer',
'racing_car', 'roadster', 'runabout', 'saloon', 'secondhand_car', 'sedan',
'sport_car', 'sport_utility', 'sport_utility_vehicle', 'sports_car', 'squad_car',
'station_waggon', 'station_wagon', 'stock_car', 'subcompact', 'subcompact_car',
'taxi', 'taxicab', 'tourer', 'touring_car', 'two-seater', 'used-car', 'waggon',
'wagon']
在调用wordnet的exe程序时,我们知道有从属关系,成员关系,蕴含关系之类的,在nltk,它们是这样的:
>>> wn.synset('tree.n.01').part_meronyms() 【部分】
[Synset('burl.n.02'), Synset('crown.n.07'), Synset('stump.n.01'),
Synset('trunk.n.01'), Synset('limb.n.02')]
>>> wn.synset('tree.n.01').substance_meronyms() 【实质】
[Synset('heartwood.n.01'), Synset('sapwood.n.01')]
>>> wn.synset('tree.n.01').member_holonyms() 【成员】
[Synset('forest.n.01')]
>>> wn.synset('mint.n.04').part_holonyms()
[Synset('mint.n.02')]
>>> wn.synset('mint.n.04').substance_holonyms()
[Synset('mint.n.05')]
下面是蕴含关系:
>>> wn.synset('walk.v.01').entailments()
[Synset('step.v.01')]
>>> wn.synset('eat.v.01').entailments()
[Synset('swallow.v.01'), Synset('chew.v.01')]
>>> wn.synset('tease.v.03').entailments()
[Synset('arouse.v.07'), Synset('disappoint.v.01')]
相对来说,个人感觉反义词做的就比较简陋:
>>>wn.lemma('supply.n.02.supply').antonyms()
[Lemma('demand.n.02.demand')]
Nltk有个功能,能根据内部的关系树,计算两个词之间的相似度:
>>>lim=wn.synset('limousine.n.1')
>>>amb=wn.synset('ambulance.n.1')
>>>lim.lowest_common_hypernyms(amb)
[Synset('car.n.01')]
我们可以看出,“'limousine(豪华轿车)”和“'ambulance(救护车)”的共同点(也就是公共上位词)是“car”。此外,我们还可以得到他们的相似度:
>>>lim.path_similarity(amb)
0.3333333333333333
还可以看他们的最近举例,举例越近,相似度越高:
>>>lim.shortest_path_distance(amb)
2
上面列举了NLTK的一些常用的命令,基本上wordnet中的命令,在NLTK都包括了,还有一些,比如offset等,有需要的时候可以参考链接1。
参考链接:
- nltk官方文档:
http://www.nltk.org/api/nltk.corpus.reader.html#module-nltk.corpus.reader.wordnet
- wordnet
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share
自然语言20.1 WordNet介绍和使用的更多相关文章
- 自然语言20.1 WordNet介绍和使用 _
http://blog.csdn.net/ictextr9/article/details/4008703 Wordnet是一个词典.每个词语(word)可能有多个不同的语义,对应不同的sense.而 ...
- 【转】Linux强大命令 Awk 20分钟入门介绍
什么是Awk Awk是一种小巧的编程语言及命令行工具.(其名称得自于它的创始人Alfred Aho.Peter Weinberger 和 Brian Kernighan姓氏的首个字母).它非常适合服务 ...
- 2017.04.20 Adams仿真介绍
Adams 仿真 | 验证"隐性机器人模型"概念,提高视觉伺服精度 产品:Adams行业:科研优势: 1.Adams 仿真可精确预测机器人的位置和方位 2.仿真在理论工作验证中起着 ...
- 大数据学习(20)—— Zookeeper介绍
ZooKeeper是什么 就像相声大师冯巩每次出场都说:"亲爱的观众朋友们,我想死你们啦"一样,我再强调一次,学习大数据官网很重要.Zookeeper官网看这里ZooKeeper ...
- 斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
- 【NLP】基于自然语言处理角度谈谈CRF(二)
基于自然语言处理角度谈谈CRF 作者:白宁超 2016年8月2日21:25:35 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务 ...
- 西安活动 | 4月20日「拥抱开源,又见.NET :云时代 • 新契机」
云计算日渐兴起,成为提升企业效率和生产力的最终解决方案,而云时代也为软件开发模式带来了翻天覆地的变化.可以说 .NET Core就是这个时代催生的产物.自2016年 .NET Core 1.0 发布以 ...
- 5本自然语言处理书单-附pdf
文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 自然语言处理(英语:Natural Language Processing,缩写作 NLP)是人工智能 ...
- 学习NLP:《精通Python自然语言处理》中文PDF+英文PDF+代码
自然语言处理是计算语言学和人工智能之中与人机交互相关的领域之一. 推荐学习自然语言处理的一本综合学习指南<精通Python自然语言处理>,介绍了如何用Python实现各种NLP任务,以帮助 ...
随机推荐
- Java学习笔记【十三、多线程编程】
概念 Java 给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 多线程是多任务的一种特别的形式,但多线 ...
- 2、screen工具
1.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...
- VM 下增加磁盘空间
随着Linux虚拟机的不断使用,在VMware中经常遇到 预先装好的 linux 虚拟机的硬盘空间过小 的问题,造成很多软件不能安装, 而重新装一个,又挺麻烦.于是,上网搜了下关于 vmware 硬盘 ...
- 文件浏览:ls&file
文件浏览主要完成的功能是列出当前目录或指定目录下文件的文件名称以及一些基本的资料. Linux的命令是区分大小写的. 1. ls:列出当前目录(默认)或指定目录下所有文件,并按字典序排序 语法:ls ...
- IMP-00058: ORACLE error 1882 encountered
问题现象: IMP: ORACLE error encountered ORA: timezone region not found ORA: at "SYS.DBMS_EXPORT_EXT ...
- 异步消息处理机制相关面试问题-handlerThread面试问题详解
handlerThread产生背景: 开启Thread子线程进行耗时操作,多次创建和销毁线程是很耗系统资源的. handlerThread是什么? handler + thread + looper ...
- Python——列表赋值的若干用例
原创声明:本文系博主原创文章,转载或引用请注明出处. 1. 直接赋值 >>> a = [1,2,3,4,5] >>> b = a >>> id(a ...
- python3安装模块,摘自网上
配置好Python3.6和pip3安装EPEL和IUS软件源 yum install epel-release -y yum install https://centos7.iuscommunity. ...
- nginx日志、变量
日志格式类型等 包含两类:access_log error.log log_format log只能在http模块下配置 下图是一个典型error_log配置 warn表示默认日志级别为‘’警告‘’ ...
- Java-收邮件
import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail. ...