转载请说明出处: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

参考链接:

  1. nltk官方文档:

http://www.nltk.org/api/nltk.corpus.reader.html#module-nltk.corpus.reader.wordnet

  1. wordnet

http://wordnet.princeton.edu/

Wordnet的一些简单使用的更多相关文章

  1. 自然语言20.1 WordNet介绍和使用 _

    http://blog.csdn.net/ictextr9/article/details/4008703 Wordnet是一个词典.每个词语(word)可能有多个不同的语义,对应不同的sense.而 ...

  2. wordnet的一些入门性介绍

    关于wordnet的介绍很多,中英文都有,我这里主要是参考了别人的.自己组织了一下. 1.简介 1.1关于词典 Wordnet是一个由普林斯顿大学认识科学实验室在心理学教授乔治·A·米勒的指导下建立和 ...

  3. NLP—WordNet——词与词之间的最小距离

    WordNet,是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典.它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”.我们这次的 ...

  4. Programming Assignment 1: WordNet

    编程作业一 作业链接:WordNet & Checklist 我的代码:WordNet.java & SAP.java & Outcast.java 这是第二部分的编程作业,因 ...

  5. NLTK学习笔记(二):文本、语料资源和WordNet汇总

    目录 语料库基本函数表 文本语料库分类 常见语料库及其用法 载入自定义语料库 词典资源 停用词语料库 WordNet面向语义的英语字典 语义相似度 语料库基本函数表 示例 描述 fileids() 语 ...

  6. 使用PyTorch简单实现卷积神经网络模型

    这里我们会用 Python 实现三个简单的卷积神经网络模型:LeNet .AlexNet .VGGNet,首先我们需要了解三大基础数据集:MNIST 数据集.Cifar 数据集和 ImageNet 数 ...

  7. 自然语言20.1 WordNet介绍和使用

     https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149(欢迎关注博主 ...

  8. 手把手教你NLTK WordNet使用方法

    最近看了WordNet,0基础入门,简单记下笔记.因为本身不是学自然语言处理的,好多名词不是特别清楚,现有的博客读的晕乎乎,所以重新写了这个,理清思路.除了行文中提到的链接,其他几个有用的参考链接如下 ...

  9. 知识图谱顶会论文(ACL-2022) ACL-SimKGC:基于PLM的简单对比KGC

    12.(2022.5.4)ACL-SimKGC:基于PLM的简单对比KGC 12.(2022.5.4)ACL-SimKGC:基于PLM的简单对比KGC 摘要 1.引言 2.相关工作 2.1 知识图补全 ...

随机推荐

  1. JS,Jquery获取各种屏幕的宽度和高度

    Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  2. 第五百八十一天 how can I 坚持

    也是醉了,现在买个手机都特么搞饥饿营销,吹牛B就要付出吹牛B的代价,哎,好伤感. 晚上学习也没学好.感觉人和人之间的信任怎么都没了呢..但愿是我想多了,其实就是我想多了,以后说话还是要多注意. 睡觉吧 ...

  3. LR工具使用之场景设置

    LR工具使用之场景设置 一.操作步骤 1.运行loadrunner,进入运行负载测试控件:

  4. 通过微信企业号发送zabbix报警

    采用微信报警时,管理员账户中必须要设置"示警媒体"一项,"收件人"一项可随便填写一下.其它成员则可以不用添加设置. ---------------------- ...

  5. Python 2.7_First_try_爬取阳光电影网_20161206

    之前看过用Scrapy 框架建立项目爬取 网页解析时候用的Xpath进行解析的网页元素 这次尝试用select方法匹配元素 1.入口爬取页面 http://www.ygdy8.com/index.ht ...

  6. JS --正则表达式验证、实战之邮箱模式

     JS验证格式:提高用户体验,验证文本. 需要防止程序员的代码结构更改攻击,因为web段的代码有可能会被更改,更改后JS有可能会验证不住那么,C#端在JS段通过验证的情况下,还需要进行二次验证 < ...

  7. win8自动升级win8.1后 wampserver无法启动

    原因是升级时win8把其他的系统服务都给停止了. 解决办法是左键点击wamp的小图标,选择apache/mysql - service - 安装服务. 然后再选择启动服务,即可.

  8. 为什么匿名内部类和局部内部类只能访问final变量

    因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或 ...

  9. 《C和指针(Pointer on c)》 学习笔记

    转载:http://dsqiu.iteye.com/blog/1687944 首先本文是对参考中三个连接的博客进行的整理,非常感谢三位博主的努力,每次都感叹网友的力量实在太强大了…… 第一章 快速上手 ...

  10. java 链接jdbc

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...