>>> from nltk.corpus import wordnet as wn
>>>
>>> fruit = 'fruit'
>>> wn.synsets(fruit)
[Synset('fruit.n.01'), Synset('yield.n.03'), Synset('fruit.n.03'), Synset('fruit.v.01'), Synset('fruit.v.02')]
>>> wn.synsets(fruit)[0].definition()
u'the ripened reproductive body of a seed plant'
>>> fruit = wn.synsets(fruit)[0]
>>>
>>> apple = 'apple'
>>> wn.synsets(apple)
[Synset('apple.n.01'), Synset('apple.n.02')]
>>> wn.synsets(apple)[0].definition()
u'fruit with red or yellow or green skin and sweet to tart crisp whitish flesh'
>>> apple = wn.synsets(apple)[0]
>>>
>>> hypofruits = set([i for i in fruit.closure(lambda s:s.hyponyms())])
>>> apple in hypofruits
True
给你!为了完整起见:
>>> hyperapple = set([i for i in apple.closure(lambda s:s.hypernyms())])
>>> fruit in hyperapple
True
>>> hypoapple = set([i for i in apple.closure(lambda s:s.hyponyms())])
>>> fruit in hypoapple
False
>>> hyperfruit = set([i for i in fruit.closure(lambda s:s.hypernyms())])
>>> apple in hyperfruit
False
首先,wordnet中的
word
和synset
/concept
是有区别的。这里我们看到一个词可以有多个含义(即链接到多个概念):
在这种情况下,“automobile”和“car”可以指同一个
Synset('car.n.01')
,如果是这样,那么它们就没有上下关系。还有
lemma
的概念,这会使事情复杂化,所以我们暂时跳过它。假设您不是在比较单词而是比较语法集,那么您只需找到语法集的所有下义词,然后查看是否有其他语法集出现在其中。
如果您比较的是普通单词,请参见How to get all the hyponyms of a word/synset in python nltk and wordnet?
下面将演示如何比较语法集。例如,我将使用'fruit'和'apple',这比'automobile'和'car'更符合逻辑,因为'automobile'和'car'只有一个名词词组
下面,我们看到苹果并不是水果的直系子名词:
因此,我们必须遍历所有的下义词,看看苹果是否在其中一个词中:
给你!为了完整起见:
相关问题 更多 >
编程相关推荐