Python自然语言处理第二章-2.5WordNet(III)——更多词汇关系:部分、整体、集合、蕴含等

南楼画角 提交于 2020-04-22 04:19:28

WordNet(III)——更多词汇关系:部分、整体、集合、蕴含等
0. 本节内容
从条目到部分(部件、实质)

part_holonyms()
substance_holonyms()
或从条目到包含它们的东西(整体)

part_meronyms( )
substance_meronyms( )
或从条目到集合
member_meronyms( )
特别注意:本文提到的部分方法在书中并没有括号,但是笔者在加了方法名后加了括号( )后才输出预期的结果,否则会输出类似<bound method Synset.name of Synset('car.n.01')>这样的结果
还有记得导入:from nltk.corpus import wordnet as wn




1. 首先如何理解“部分(部件、实质)”,“整体”,“集合”呢?
书上的例子是这样的:

条目–部件(树–树干、树冠、等部件)——part_meronyms( )
条目-实质(芯材和边材)——substance_meronyms( )
条目–集合(森林)——member_holonyms( )

而对于树干、树冠,或者芯材与边材等等,其“整体”便是树本身。

如果一时理解的还不到位,可以考虑用 人 来做类似的解释:
部件:人——头、手、足、臂、心脏等等
实质:人——细胞、骨、皮肉、血等
集合:人——人群
整体便是一个人本身。
(不是医学的、可能分的不太准确,但是大致上可以这么理解的,这和上述的对 tree的分析逻辑是类似的,这些概念都是相对的)
关于部分,一个是从结构、部件这个角度,一个是从本质上、实质上去分析,这是理解的关键。





2. 那么如何理解这两组方法的关系呢(条目-部件,条目-整体)?
holo有全息的含义,part_holonyms( ) 、substance_holonyms( )是指从部分到整体的方向;meronyms有部分名词的含义,part_meronyms( )、substance_meronyms( )是指从整体到部分的方向;
part_holonyms( ) 、substance_holonyms( )与part_meronyms( )、substance_meronyms( )可以理解为两组逆方向的方法,可以看下图的分析;

3. 围绕词集 tree.n.01应的练习及对应关系如下
>>> wn.synset('tree.n.01').part_meronyms()#tree的部件(条目-部件)
[Synset('burl.n.02'), Synset('crown.n.07'), Synset('limb.n.02'), Synset('stump.n.01'), Synset('trunk.n.01')]
>>> wn.synset('tree.n.01').substance_meronyms()#tree的实质(条目-实质)
[Synset('heartwood.n.01'), Synset('sapwood.n.01')]
>>> wn.synset('tree.n.01').member_holonyms()#tree集合是森林
[Synset('forest.n.01')]
>>> wn.synset('burl.n.02').part_holonyms()#由上边第一行代码的输出结果可知'burl.n.02'是'tree.n.01'的一个部件,因此burl的整体是tree无疑
[Synset('tree.n.01')]
>>> wn.synset('heartwood.n.01').substance_holonyms()#同理,heartwood是tree的一个实质,其整体也是tree无疑
[Synset('tree.n.01')]
>>>
4. 其他词汇关系:蕴含、反义词
蕴含:entailments()
以上的分析多是针对名词,对于动词,也存在关系。这里只有列出了一种蕴含的关系:
entailments()方法,同样由一个词集调用:














>>> wn.synset('walk.v.01').entailments()#走路蕴含着抬脚
[Synset('step.v.01')]

反义词:antonyms()
由一个词条调用:wn.lemma(‘supply.n.02.supply’)



>>> wn.lemma('supply.n.02.supply').antonyms()
[Lemma('demand.n.02.demand')]
>>>
注意所用词语的词性,笔者试着对形容词取反义词:


>>> wn.lemma('hot.a.01.hot').antonyms()#hot对cold,中间的词性标记为a,而不是n或v
[Lemma('cold.a.01.cold')]
>>>
也可以试着测试更多的词汇,但是由于不清楚具体的词汇结构,可能有的测试不是你想的那样~,多测测总是好玩的~


发布了452 篇原创文章 · 获赞 658 · 访问量 89万+
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!