2013-07-16 26 views
2

我正在使用WordNet 3.0。 我想知道如何找到WordNet層次結構中兩個synsets之間的語義關係。 如在給定的兩個詞作爲輸入,我想找到它們之間的關係,即它們是否是同義詞,下位詞 - 上位詞等。如何查找WordNet中兩個同義詞之間的語義關係

是否有python或perl模塊來實現這個?

+0

您正在使用哪個庫?對於哪種人類語言? – Jacopofar

+0

@Jackopo:英語 – nish

回答

4

NLTK是Python最常用的NLP庫。 所描述的操作是這樣的:

from nltk.corpus import wordnet 

house = wordnet.synset('house.n.01') 
station = wordnet.synset('station.n.01') 

,那麼你可以使用類Synset的方法是這樣的:

taxonomy_distance = house.shortest_path_distance(station) 

,以發現他們是否是同義詞:

common_lemmas = len(set(house.lemma_names).intersection(set(station.lemma_names))) 

這將返回兩組中通用引理的數量。

您也可以使用像Neo4j這樣的圖形數據庫加載wordnet數據集並查找其節點之間的最短路徑,這是一個討論的問題here

+0

我在'shortest_path_distance'上收到錯誤。我正在重新檢查我的代碼... –

1

使用Python NLTK:

>>> from nltk.corpus import wordnet as wn 
>>> 
>>> synset1 = wn.synset('adornment.n.01') 
>>> synset2 = wn.synset('jewelry.n.01') 
>>> 
>>> synset1.lowest_common_hypernyms(synset2) 
[Synset('adornment.n.01')] 
>>> 
>>> synset1.hyponyms() 
[Synset('frill.n.03'), Synset('rosette.n.01'), Synset('frontlet.n.01'), Synset('cordon.n.03'), Synset('fob.n.02'), Synset('beauty_spot.n.01'), Synset('sequin.n.01'), Synset('war_paint.n.01'), Synset('boutonniere.n.01'), Synset('trimming.n.02'), Synset('pendant.n.01'), Synset('pompon.n.01'), Synset('band.n.04'), Synset('bangle.n.02'), Synset('jewelry.n.01'), Synset('epaulet.n.01'), Synset('circlet.n.02'), Synset('frog.n.03'), Synset('tassel.n.01'), Synset('plume.n.02'), Synset('pectoral.n.02')] 
>>> synset2.hypernyms() 
[Synset('adornment.n.01')] 

要獲取同義詞:

>>> def lemmas_in_all_synsets(keyword): 
...  lemmas=[] 
...  for synset in wn.synsets(keyword): 
...   for lemma in synset.lemmas: 
...    lemmas.append(lemma) 
...  return lemmas 
... 
>>> lemmas_in_all_synsets('station') 
[Lemma('station.n.01.station'), Lemma('place.n.10.place'), Lemma('place.n.10.sta 
tion'), Lemma('station.n.03.station'), Lemma('post.n.01.post'), Lemma('post.n.01 
.station'), Lemma('station.n.05.station'), Lemma('station.v.01.station'), Lemma(
'station.v.01.post'), Lemma('station.v.01.send'), Lemma('station.v.01.place')] 
+0

這適用於Python 2.7的NLTK。 –

相關問題