2016-12-04 57 views
2

我已成功檢索連接到經由其它語義關係鹼同義詞集同義詞集,如下:如何在NLTK的Wordnet中檢索目標synset的反義詞synset?

wn.synset('good.a.01').also_sees() 
Out[63]: 
[Synset('best.a.01'), 
Synset('better.a.01'), 
Synset('favorable.a.01'), 
Synset('good.a.03'), 
Synset('obedient.a.01'), 
Synset('respectable.a.01')] 

wn.synset('good.a.01').similar_tos() 
Out[64]: 
[Synset('bang-up.s.01'), 
Synset('good_enough.s.01'), 
Synset('goodish.s.01'), 
Synset('hot.s.15'), 
Synset('redeeming.s.02'), 
Synset('satisfactory.s.02'), 
Synset('solid.s.01'), 
Synset('superb.s.02'), 
Synset('well-behaved.s.01')] 

然而,反義詞關係似乎不同。我設法獲取連接到我的基地同義詞集引理,但無法獲取真正的同義詞集,像這樣:

wn.synset('good.a.01').lemmas()[0].antonyms() 
Out[67]: [Lemma('bad.a.01.bad')] 

我怎樣才能獲得同義詞集,而不是引理,即通過反義關係連接到我的基礎synset - wn.synset('good.a.01')? TIA

+1

這是棘手COS反義關係是通過引理不是同義集到同義詞集相連。 – alvas

+1

請參閱從http://wordnetweb.princeton.edu/perl/webwn?o2=&o0=1&o8=1&o1=1&o7=&o5=&o9=&o6=&o3=&o4=&s=good&i=8&h=00001000000000000000000000000000#c,在* * S **表示同義詞集和** **W¯¯字指(即引理) – alvas

+0

嗨Alvas!我其實是試圖找到你的電子郵件,但無法找到它..我怎麼能聯繫你?我記得你們的幫助最上我所有的WORDNET問題在這裏:) – modarwish

回答

1

出於某種原因,共發現指數在引理的水平,而不是同義詞集antonymy關係(見http://wordnetweb.princeton.edu/perl/webwn?o2=&o0=1&o8=1&o1=1&o7=&o5=&o9=&o6=&o3=&o4=&s=good&i=8&h=00001000000000000000000000000000#c),所以這個問題是SynsetsLemmas是否有許多一對多或一對一一個關係。


在有歧義的單詞的情況下,一個字許多意義,我們有字符串之間-TO- Synset,例如一個一對多關係

>>> 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')] 

在一種含義/概念,多重表達的情況下,我們有Synset -to字符串(其中字符串是指引理名稱)之間的一對多的關係:

>>> dog = wn.synset('dog.n.1') 
>>> dog.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' 
>>> dog.lemma_names() 
[u'dog', u'domestic_dog', u'Canis_familiaris'] 

注意:到目前爲止,我們正在比較字符串和Synsets之間的關係而不是LemmasSynsets


的「可愛」的事情是,Lemma和字符串有一個一對一的關係:

>>> 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('dog')[0] 
Synset('dog.n.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('dog')[0].lemmas() 
[Lemma('dog.n.01.dog'), Lemma('dog.n.01.domestic_dog'), Lemma('dog.n.01.Canis_familiaris')] 
>>> wn.synsets('dog')[0].lemmas()[0] 
Lemma('dog.n.01.dog') 
>>> wn.synsets('dog')[0].lemmas()[0].name() 
u'dog' 

一個Lemma對象的_name屬性返回一個unicode字符串,而不是一個列表。從代碼點:https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L202https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L444

而且看起來引理與Synset有一對一的關係。從https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L220文檔字符串:通過使用相同的名稱::

  • 名稱方法

    引理屬性,可訪問:這個引理的規範名稱。

  • synset:這個引理屬於的同義詞。
  • syntactic_marker:對於形容詞,WordNet字符串標識了 句法位置相對修飾後的名詞。請參閱: http://wordnet.princeton.edu/man/wninput.5WN.html#sect10 對於所有其他詞類,此屬性爲無。
  • count:這個引理在wordnet中的頻率。

因此,我們可以做到這一點,不知怎麼知道每個Lemma對象只打算返回美國1個同義詞集:

>>> wn.synsets('dog')[0].lemmas()[0] 
Lemma('dog.n.01.dog') 
>>> wn.synsets('dog')[0].lemmas()[0].synset() 
Synset('dog.n.01') 

假設你正在嘗試做一些情感分析和你需要在WordNet中的每個形容詞的反義詞,你可以很容易地做到這一點接受反義詞的Synsets:

>>> from nltk.corpus import wordnet as wn 
>>> all_adj_in_wn = wn.all_synsets(pos='a') 
>>> def get_antonyms(ss): 
...  return set(chain(*[[a.synset() for a in l.antonyms()] for l in ss.lemmas()])) 
... 
>>> for ss in all_adj_in_wn: 
...  print ss, ':', get_antonyms(ss) 
... 
Synset('unable.a.01') : set([Synset('unable.a.01')]) 
+1

謝謝。我該如何與你聯繫? – modarwish

+1

Errr,使門戶與[吊索環](http://marvel.wikia.com/wiki/Sling_Ring),P? – alvas

+0

我得到了維旅行噁心。我更喜歡傳統的電子郵件:D。但謝謝你的答案嘿嘿。 – modarwish

相關問題