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

来源:互联网 发布:汽车脚垫 知乎 编辑:程序博客网 时间:2024/05/18 01:43

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')]>>>

也可以试着测试更多的词汇,但是由于不清楚具体的词汇结构,可能有的测试不是你想的那样~,多测测总是好玩的~

PS:如有错误,欢迎大家指正,一起学习~,还在摸索学习中,持续更新~~

阅读全文
0 0
原创粉丝点击