2017-07-24 29 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否的情況下找到最低常見的上位詞,則會更容易。而不是配對。