WordNet

WordNet面向语义的英语词典,类似于传统辞典。WordNet的一些操作如下:

from nltk.corpus import wordnet as wn
#sysnsets 同义词集
word = wn.synsets('motorcar')
print(word)

#输出同义词
word = wn.synset('car.n.01').lemma_names()
print(word)

#输出单词的定义
print(wn.synset('car.n.01').definition())

#输出单词的一个例子
print(wn.synset('love.v.01').examples())

#这种 car.n.01.automobile 同义词集和词的配对叫做词条
#获得词集的词条
print(wn.lemma('car.n.01.automobile').synset())
#获得词
print(wn.lemma('car.n.01.automobile').name())

#输出car的同义词集
print(wn.synsets('car'))
#只输出其中的单词
print("car的同义词",end="")
for synset in wn.synsets('car'):
    print(synset.lemma_names())


#访问所有car相关的词条
print("----------------------------")
print(wn.lemmas('car'))
wordnet操作

wordnet的层次结构

在层次结构中一个概念能看到很多具体的概念(下位词)


层次结构

输出motorcar下的下位词

from nltk.corpus import wordnet


print("---------------------wordnet结构------------------")
motorcar = wordnet.synset('car.n.01')
print(motorcar)
typeof_motorcar = motorcar.hyponyms()
for each in typeof_motorcar:
    print(each.lemma_names())

更多词汇关系

上位词和下位词,被称为词汇关系,同义集之间的关系。wordnet中两种漫游方式(1)、同义集之间的层次关系(2)、从物品到部件,从组件到整体,__词条‘’

到组件:wordnet.synset(词条).part_meronyms()

到组成:wordnet.synset(词条).substance_meronyms()

到整体:wordnet.synset(词条).member_holonyms()

from nltk.corpus import wordnet as wn

#获得组成部分的单词 meronyms(部分到整体关系)
print(wn.synset('tree.n.01').part_meronyms())
#漫游它的实质 树 = 心材 + 边材
print(wn.synset('tree.n.01').substance_meronyms())
#由树组成的集合
print(wn.synset('tree.n.01').member_holonyms())

动词之间的关系:wn.synset('walk.v.01').entailments()
词条的反义词:wn.lemma('supply.n.02.supply').antonyms()

语义相似度

在wordnet中上位词相同,并且上位词是一个具体的词,那么两个单词必定是有密切的关系。

同义词集.lowest_common_hypernyms(同义词集)获得共同的最低上位词
每个词在wordnet中的深度体现了它的抽象程度,越深的词越具体。
同义词集.min_depth() 获得最小深度

path_similaritytyassigns()基于上位词给互连的词最短路径在0-1之间打分,没有路径返回-1,和本身比较返回1

from nltk.corpus import wordnet as wn

like = wn.synset('like.n.01')
love = wn.synset('love.n.01')
#love 和 like共同的最低上位词集 abstraction (抽象)
print(like.lowest_common_hypernyms(love))
#关系同义词集
relationship = wn.synset('relationship.n.01')
#桌子同义词集
desk = wn.synset('desk.n.01')

#输出他们的深度
print(relationship.min_depth())
print(desk.min_depth())

#比较语义的相似性path_similarity()
print("desk和relationship的相似性",desk.path_similarity(relationship))
pen = wn.synset('pen.n.01')
pencil = wn.synset('pencil.n.01')
print("pen和pencil的相似性",pen.path_similarity(pencil))
print("pen和pen的相似性",pen.path_similarity(pen))
运行结果

你可能感兴趣的:(WordNet)