2017-05-09 151 views
0

由於有兩個常見的同義詞集獲得最低的共同上位詞路徑,它似乎是合理的應該是要想辦法往回走,發現導致該上位詞如何獲得在ntlk wordnet中共享特定最低公共上位詞的所有下位詞?

from nltk.corpus import wordnet as wn 
alaska = wn.synset('Alaska.n.1') 
california = wn.synset('California.n.1') 
common_hypernym = alaska.lowest_common_hypernyms(california)[0] 

common_hypernym 
Synset('american_state.n.01') 

common_hypernym.do_something_awesome() 
['Alabama.n.1', 'Alaska.n.1', ...] #all 50 american states 
+0

你能解釋一下你需要更詳細嗎?這是有點不清楚你想要達到什麼。 – alvas

+0

查看'do_something_awesome()的結果,在這種情況下,它將是所有美國州,比如美國和加拿大可能是所有國家。對於大西洋和太平洋來說,它可能是所有的海洋。 –

+0

然後我不認爲'wordnet',嘗試嵌入'word2vec'或其他字。 Wordnet是手動創建的,在本體知識中存在(令人尷尬的)很多「漏洞」。 – alvas

回答

1

使用Synset1._shortest_path_distance(Synset2)找到上位詞的下義詞和他們的距離:

>>> from nltk.corpus import wordnet as wn 
>>> alaska = wn.synset('Alaska.n.1') 
>>> california = wn.synset('California.n.1') 

>>> alaska._shortest_hypernym_paths(california) 
{Synset('district.n.01'): 4, Synset('location.n.01'): 6, Synset('region.n.03'): 5, Synset('physical_entity.n.01'): 8, Synset('entity.n.01'): 9, Synset('state.n.01'): 2, Synset('administrative_district.n.01'): 3, Synset('object.n.01'): 7, Synset('alaska.n.01'): 0, Synset('*ROOT*'): 10, Synset('american_state.n.01'): 1} 

現在找到最小路徑:

>>> paths = alaska._shortest_hypernym_paths(california) 
>>> min(paths, key=paths.get) 
Synset('alaska.n.01') 

現在,這是無聊,因爲californiaalaska是WordNet層次結構中的姐妹節點。讓我們過濾掉所有的姐妹節點:

>>> paths = {k:v for k,v in paths.items() if v > 0} 
>>> min(paths, key=paths.get) 
Synset('american_state.n.01') 

爲了得到american_state的子節點(我認爲這是「東西真棒」你需要...):

>>> min(paths, key=paths.get).hyponyms() 
[Synset('free_state.n.02'), Synset('slave_state.n.01')] 
>>> list(min(paths, key=paths.get).closure(lambda s:s.hyponyms())) 
[Synset('free_state.n.02'), Synset('slave_state.n.01')] 

這可能看起來令人震驚但實際上,有沒有爲alaskacalifornia表示上位:

>>> alaska.hypernyms() 
[] 
>>> california.hypernyms() 
[] 

並採用_shortest_hypernym_paths是連接製成由我ans虛擬根,看看Is wordnet path similarity commutative?

+0

確實我曾使用hyponyms()在美國各州,它只返回自由/奴隸和那些什麼都沒有 - 所以我假設必須有另一種方式來實現它。 –