NLTK使用

1、安装

pip install nltk

2、下载wordnet组件

import nltk
nltk.download('wordnet')

可以从这里 https://blog.csdn.net/RainyD4y/article/details/106970593 下载后放在相应位置

3、使用

3.1 单词、词集和词条

由于一个单词(‘dog’)可以有很多个含义/词集(synset,如‘dog.n.01’,或者叫词集),wordnet中某一单词的具体含义表示方法为:单词.词性.词义序号

  • 词性:包含NOUN,VERB,ADJ,ADV等,实际使用一个小写字母表示:n, v, a
  • 词义序号:一个单词在同一个词性下也可能有多种含义,为每一个含义都分配一个序号

    词集是单词的一个含义,一个含义可能由很多单词表示,每个单词表示为一个词条
    综上,一个单词有多个含义/词集; 一个含义/词集有多种表示/词条

3.1.1 一个单词有多个含义/词集

synsets指令查看dog的所有同义词集(pos值可以为——NOUN,VERB,ADJ,ADV…)

wn.synsets("car", pos=wn.NOUN)
>>[Synset( "car.n.01" ), Synset("car.n.02"), Synset("car.n.03"), Synset("car.n.04"), Synset ("cable_car.n.01")]

其中,"car.n.01"表示car在名词中的第一个含义。每个意思的具体含义可以按如下方法查看

for synset in wn.synsets("car"):
   print(synset.definition())
>>a motor vehicle with four wheels; usually propelled by an internal combustion engine
  a wheeled vehicle adapted to the rails of railroad
  the compartment that is suspended from an airship and that carries personnel and the cargo and the power plant
  where passengers ride up and down
  a conveyance for passengers or freight on a cable railway

3.1.2 一个含义/词集有多种表示/词条

使用lemma_names()查询每个词条名字;使用lemmas()查询所有词条

for synset in wn.synsets("car"):
     print(synset.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')]
  [Lemma('car.n.02.car'), Lemma('car.n.02.railcar'), Lemma('car.n.02.railway_car'), Lemma('car.n.02.railroad_car')]
  [Lemma('car.n.03.car'), Lemma('car.n.03.gondola')]
  [Lemma('car.n.04.car'), Lemma('car.n.04.elevator_car')]
  [Lemma('cable_car.n.01.cable_car'), Lemma('cable_car.n.01.car')]

3.2 词集(synset)之间的关系

3.2.1 名词词集父类/子类

对于名词,WordNet认为词集(含义)之间呈树形结构,因而词集有上位词与下位词,查看方法为
hypernyms()查父类/上位词,hyponyms()查子类/下位词

for synset in wn.synsets("dog"):
     print(synset.hypernyms())
>>   
[Synset('canine.n.02'), Synset('domestic_animal.n.01')]
[Synset('unpleasant_woman.n.01')]
[Synset('chap.n.01')]
[Synset('villain.n.01')]
[Synset('sausage.n.01')]
[Synset('catch.n.06')]
[Synset('support.n.10')]
[Synset('pursue.v.02')]

3.2.2 名词词集共同祖先

a.lowest_common_hypernyms(b)查询a,b最低共同的祖先

dog = wn.synset('dog.n.01')
cat = wn.synset('cat.n.01')
dog.lowest_common_hypernyms(cat)
>> 
[Synset('carnivore.n.01')

3.2.2 名词词集之间的相似度

dog = wn.synset('dog.n.01')
cat = wn.synset('cat.n.01')
dog.path_similarity(cat)
>> 
0.2

3.2.3 名词词集同义词

见3.1.1节

3.2.4 词条反义词

antonyms()查询词条的反义词

  wn.lemma('hot.a.01.hot').antonyms()
>>[Lemma('cold.a.01.cold')]

3.2.5 动词,词集之间的关系主要表现为蕴含关系

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

3.2.6 形容词和副词 词集近义词关系

形容词和副词,他们没有被组织成分类体系,也不能用path_distance查看相似度。形容词和副词最有用的关系是similar to

wn.synsets('nicer')
Out[22]: 
[Synset('nice.a.01'),
 Synset('decent.s.01'),
 Synset('nice.s.03'),
 Synset('dainty.s.04'),
 Synset('courteous.s.01')]

beau = wn.synset('nice.a.01')
beau.similar_tos()
Out[24]: [Synset('good.s.06'), Synset('pleasant.s.02')]

3.2.7 其他关系

其他词集之间的关系还有,部分、实质、集合等关系,示例如下。由于这些关系不是(NLP门外汉)最常用的,也不太好理解,不展开描述,具体关系的含义可以参考:https://blog.csdn.net/sinat_22581761/article/details/78577618

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

参考链接:1、https://www.cnblogs.com/Xiaoyan-Li/p/13477253.html

posted @ 2022-08-05 21:19  哈哈哈喽喽喽  阅读(178)  评论(0)    收藏  举报