2017-07-24 30 views
1

如果我有蟒蛇的词语,如清单最低共同上位词:查找给出多个单词WordsNet(Python)的

words = ["blue", "red", "ball"] 

有没有一种方法以编程方式产生本组用字的共发现了上位?

+0

简短的回答是肯定的,确切的答案取决于你的参数。对于两个词来说,有[lowest_common_hypernyms](http://www.nltk.org/howto/wordnet_lch.html)函数,但[历史上它有一些问题](https://github.com/nltk/nltk /问题/ 395)。对于单词列表,[它变得更加复杂](https://stackoverflow.com/questions/30605807/nltk-wordnet-synset-for-word-phrase)。所以我会阅读这些内容,尝试一下,并在其中包含代码,以展示您真正想要做什么以及在哪里陷入困境。 – JGreenwell

回答

1

首先,请参见https://stackoverflow.com/a/29478711/610569以注意“sense”(synset/concept)与“words”(在wordnet,lemmas的上下文中)之间的区别。

给定两个同义词集(不是文字),就可以找到它们之间的最低共同上位词:

>>> from nltk.corpus import wordnet as wn 

# A word can represent multiple meaning (aka synsets) 
>>> wn.synsets('dog') 
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')] 

>>> wn.synsets('cat') 
[Synset('cat.n.01'), Synset('guy.n.01'), Synset('cat.n.03'), Synset('kat.n.01'), Synset('cat-o'-nine-tails.n.01'), Synset('caterpillar.n.02'), Synset('big_cat.n.01'), Synset('computerized_tomography.n.01'), Synset('cat.v.01'), Synset('vomit.v.01')] 

>>> wn.synsets('dog')[0].definition() 
u'a member of the genus Canis (probably descended from the common wolf) that has been domesticated by man since prehistoric times; occurs in many breeds' 

>>> wn.synsets('cat')[0].definition() 
u'feline mammal usually having thick soft fur and no ability to roar: domestic cats; wildcats' 

>>> dog = wn.synsets('dog')[0] 
>>> cat = wn.synsets('cat')[0] 


>>> cat.lowest_common_hypernyms(dog) 
[Synset('carnivore.n.01')] 

http://www.nltk.org/howto/wordnet_lch.html

是最低的共同上位可靠吗?

WORDNET是手工制作的资源,所以它的可靠性如何取决于为什么以及如何同义词集是整个共发现本体

我可以利用这些信息为我的NLP任务中创造出来的?

也许...但最有可能的是,它没有用。

它可以比较两个以上的同义词吗?

不完全。您必须进行多项成对搜索,例如

>>> mouse = wn.synsets('mouse')[0] 
>>> cat = wn.synsets('cat')[0] 
>>> dog = wn.synsets('dog')[0] 

>>> dog.lowest_common_hypernyms(cat) 
[Synset('carnivore.n.01')] 
>>> cat.lowest_common_hypernyms(mouse) 
[Synset('placental.n.01')] 
>>> dog.lowest_common_hypernyms(mouse) 
[Synset('placental.n.01')] 

>>> placental = dog.lowest_common_hypernyms(mouse)[0] 
>>> carnivore = dog.lowest_common_hypernyms(cat)[0] 
>>> placental.lowest_common_hypernyms(carnivore) 
[Synset('placental.n.01')] 

但是你可以看到它是多么的低效。因此,如果您重写自己的代码来遍历WordNet本体,并在给定N否的情况下找到最低常见的上位词,则会更容易。而不是配对。