2011-11-10 32 views

回答

11

對於NTLK 3.2.3或更高版本,請參閱donners45的答案。

對於舊版本的NLTK的:

有一個在NLTK沒有內置的方法,但你可以這樣做:

from nltk.corpus import wordnet 

syns = list(wordnet.all_synsets()) 
offsets_list = [(s.offset(), s) for s in syns] 
offsets_dict = dict(offsets_list) 

offsets_dict[14204095] 
>>> Synset('heatstroke.n.01') 

然後,您可以酸洗字典,並加載它時,你需要它。

對於NLTK之前的版本3.0,與

offsets_list = [(s.offset, s) for s in syns] 

替換行

offsets_list = [(s.offset(), s) for s in syns] 

因爲之前NLTK 3.0 offset物的屬性,而不是方法。

+3

有趣的是,這將引發與NLTK 3.0 – duhaime

+5

一個關鍵錯誤'offset'是現在是一種方法。試試這個: 'offsets_dict = {s.offset():s for w in.all_synsets()}' – Omer

+0

*「NLTK中沒有內置方法」* - 現在有!查看donners45的答案;這個已經過時了。 –

1

除了使用NLTK,另一種選擇是使用普林斯頓WordNet中的.tab文件Open Multilingual WordNethttp://compling.hss.ntu.edu.sg/omw/。通常我用下面的配方來訪問共發現作爲一個字典,偏移爲重點和;分隔字符串作爲一個價值觀:

# Gets first instance of matching key given a value and a dictionary.  
def getKey(dic, value): 
    return [k for k,v.split(";") in dic.items() if v in value] 

# Read Open Multi WN's .tab file 
def readWNfile(wnfile, option="ss"): 
    reader = codecs.open(wnfile, "r", "utf8").readlines() 
    wn = {} 
    for l in reader: 
    if l[0] == "#": continue 
    if option=="ss": 
     k = l.split("\t")[0] #ss as key 
     v = l.split("\t")[2][:-1] #word 
    else: 
     v = l.split("\t")[0] #ss as value 
     k = l.split("\t")[2][:-1] #word as key 
    try: 
     temp = wn[k] 
     wn[k] = temp + ";" + v 
    except KeyError: 
     wn[k] = v 
    return wn 

princetonWN = readWNfile('wn-data-eng.tab') 
offset = "n#05576222" 
offset = offset.split('#')[1]+'-'+ offset.split('#')[0] 

print princetonWN.split(";") 
print getKey('heatstroke') 
12

由於NLTK 3.2.3中,有這樣做的一個公共方法:

wordnet.synset_from_pos_and_offset(pos, offset) 

在早期版本中,你可以使用:

wordnet._synset_from_pos_and_offset(pos, offset) 

這將返回基於它一個同義詞集的POS和offest ID。我認爲這種方法僅適用於NLTK 3.0,但我不確定。

例子:

from nltk.corpus import wordnet as wn 
wn._synset_from_pos_and_offset('n',4543158) 
>> Synset('wagon.n.01') 
0

您可以使用of2ss(),例如:

from nltk.corpus import wordnet as wn 
syn = wn.of2ss('01580050a') 

將返回 Synset('necessary.a.01')

相關問題