2013-03-14 5 views
0

I 수있는 NTLK 영장 라이브러리에 표시 같은 프린스턴 WN 감각 오프셋 의미 얻을 :센스 오프셋 주어진 프린스턴 WN 감지 ID를 얻는 방법? 파이썬 NLTK

[in]:'dog.n.01' 
>>> from nltk.corpus import wordnet as wn 
>>> ss = wn.synset('dog.n.01') 
>>> offset = str(ss.offset).zfill(8)+"-"+ss.pos 
>>> print offset 
[out]:'02084071-n' 

내가 할 수있는 방법 http://casta-net.jp/~kuribayashi/cgi-bin/wn-multi.cgi?synset=02084071-n&lang=eng

에 사용되는 규칙과 유사 오프셋 (offset) 단어 네트워크 전체를 반복하지 않고 역방향? 여기서

[in]: '02084071-n' 
[out]: 'dog.n.01' or Synset('dog.n.01') 

나는이 작업을 수행 할 수 있지만 중복주기 단지 방법이 너무 길고 너무 많은입니다 : 같은 당신은 (적어도 한 번 코퍼스 반복하지 않고 조회를 취소 할 수 없습니다, 불행하게도

[in]: '02084071-n' 
in_offset, in_pos = "02084071-n".split("-") 
from nltk.corpus import wordnet as wn 
nltk_ss = [i for i in wn.all_synsets() if i.offset == int(in_offset) and i.pos == in_pos][0] 
print nltk_ss 
[out]: Synset('dog.n.01') 
+0

는이 질문에 이미 대답했다 [여기] (http://stackoverflow.com/questions/8077641/wordnet-synset-offset/12378481#12378481). –

+0

감사합니다. 유일한 방법은 열려있는 WN에서 읽거나 synset 전체 집합을 살펴 보는 것입니다. – alvas

답변

3

너는 보여 주었다). 내가 제안 할 수있는 유일한 방법은 사전에 여러 번 오프셋을 기반으로 synsets를 찾는다면 사전에 보관하는 것입니다.

>>> senseIdToSynset = {s.offset:s for s in wn.all_synsets()} 
>>> senseIdToSynset[2084071] 
Synset('dog.n.01') 
+0

정말요? 전체 wordnet 통해 반복 만?! – alvas