Wordnet的一些简单使用
Wordnet的一些简单使用
转载请说明出处: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
http://wordnet.princeton.edu/
Wordnet的一些简单使用相关推荐
- WordNet发展概况
· 关于WordNet的不成熟的想法可以追溯到20多年前, 而这一想法开始逐渐具体化和清晰化则是1985年后才开始的. 从85年开始,WordNet作为一个知识工程全面展开.不过, 当时的WordNe ...
- WordNet 介绍(ICL-PKU)
WordNet 介绍(ICL-PKU) 一 WordNet发展概况 · 关于WordNet的不成熟的想法可以追溯到20多年前,而这一想法开始逐渐具体化和清晰化则是1985年后才开始的.从85年开始,W ...
- Wordnet简单实用画树形结构
NLTK是python的一个自然语言处理工具,其中提供了访问wordnet各种功能的函数. 每个词(word)对应不同的语义(sense),消除了多义性的词叫lemma 1.导入wordnet: fr ...
- NLTK学习笔记(二):文本、语料资源和WordNet汇总
目录 语料库基本函数表 文本语料库分类 常见语料库及其用法 载入自定义语料库 词典资源 停用词语料库 WordNet面向语义的英语字典 语义相似度 语料库基本函数表 示例 描述 fileids() 语 ...
- python情感分析预测模型_Python 使用 NLTK 实现简单情感分析--Twitter(推特)分析...
一.环境搭建 1.安装第三方包nltk pip intall nltk==3.4.5 2.安装 nltk_data nltk_data 存放了很多语料数据, 包括大量的数据集,本文中就是用到了其中的 ...
- WordNet介绍,一个开放知识图谱
1 WordNet简介 传统词典一般都是按字母顺序组织词条信息的,这样的词典在解决用词和选义问题上是有价值的.然而,它们有一个共同的缺陷,就是忽略了词典中同义信息的组织问题.20世纪以来,语言学家和 ...
- java jws配置_与WordNet有关的两个JAVA库(JWNL和JWS)的配置
JWNL JWNL是一个Java API,可以用来访问WordNet中的关系词典.WordNet广泛用于开发NLP(神经语言学)应用,而一个像JWNL这样的Java API可以使得开发者更简单地使用J ...
- 使用MIT JWI(Java WordNet Interface)查询WordNet反义词
与JWNL的Synset不同,MIT JWI查询WordNet的基本概念是Word.在MIT JWI中,一个Word(实现edu.mit.jwi.item.IWord接口)对象是一个Synset及其字 ...
- java similarity_Java WordNet Similarity
JWS--Java WordNet Similarity是由University Of Sussex的David Hope等开发的基于java与WordNet的语义相似度计算开源项目.其中实现了许多经 ...
最新文章
- IBatis存取图片在Oracle Blob大字段中Asp.Net
- ABP vNext IOC替换原有Service实现
- 快速判断一个数是否是2的幂次方
- php 解包二进制,workerman的二进制怎么玩啊,怎么封包,怎么解包啊
- 更新!机器学习手推笔记《规则学习》
- docker 配置ssh
- (转):GOF设计模式趣解(23种设计模式)
- HTML5 FileAPI读取实例---(一)
- SQL Server 2005无日志文件附加数据库[转载]
- python识别文字答题_头脑王者的Python答题助手——从OCR文字识别到Fiddler抓包
- django教程ajax,Django Ajax的使用教程
- Recall(召回率), Specificity(特异度),Precision(精确度), Sensitivity(灵敏度)
- 哥尼斯堡的“七桥问题”(欧拉回路)
- 使用SVM模型对京东评价进行情感分析---【大白话版】
- js实现夜空 干货比较多
- VS Code 多光标快捷键
- 电网计算机面试专业题,国家电网计算机管理员面试经验|面试题 - 职朋职业圈...
- 帝国CMS对接百度小程序实现文章自动收录的方法
- mysql 储存过程/函数调试
- libtool的知识
热门文章
- python绘制敏感性和特异性曲线(交叉)
- Geoffrey Hinton:放弃反向传播,我们的人工智能需要重头再来
- 卫星环绕地球c语言编程,动画技术——卫星环绕地球
- 一维、二维正态分布概率密度曲线的绘制
- c--scanf()函数详解
- Windows平台调试工具:DebugView
- 会考计算机考试查询成绩查询,会考成绩(学业水平考试成绩查询系统)
- windows10驱动 x64--- 驱动实现遍历VAD树(六)
- Self-Supervised Deep Blind Video Super-Resolution
- ZYNQ之AXI简介