2011-11-10 34 views

Trả lời

11

Đối với NTLK 3.2.3 hoặc mới hơn, vui lòng xem câu trả lời của người tặng.

Đối với phiên bản cũ của NLTK:

Không có built-in phương pháp trong NLTK nhưng bạn có thể sử dụng này:

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

Sau đó bạn có thể dưa vào từ điển và tải nó bất cứ khi nào bạn cần nó.

Đối với phiên bản NLTK trước 3.0, thay thế dòng

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

với

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

từ trước NLTK 3,0 offset được một thuộc tính thay vì một phương pháp.

+3

Thú vị, điều này ném một lỗi quan trọng với NLTK 3,0 – duhaime

+5

'offset' là bây giờ là một phương pháp. Hãy thử thay vào đó: 'offsets_dict = {s.offset(): s cho s trong wn.all_synsets()}' – Omer

+0

* "Không có phương pháp tích hợp trong NLTK" * - hiện đã có! Xem câu trả lời của người đóng góp; cái này đã lỗi thời. –

1

Khác với sử dụng NLTK, một tùy chọn khác là sử dụng tệp .tab từ Open Multilingual WordNethttp://compling.hss.ntu.edu.sg/omw/ cho Princeton WordNet. Thông thường tôi sử dụng công thức dưới đây để truy cập WordNet như một cuốn từ điển với bù đắp là chìa khóa và ; chuỗi giới hạn như một giá trị:

# 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

Tính đến NLTK 3.2.3, có một phương pháp nào để làm điều này:

wordnet.synset_from_pos_and_offset(pos, offset) 

Trong các phiên bản trước đó bạn có thể sử dụng:

wordnet._synset_from_pos_and_offset(pos, offset) 

này trả về một synset dựa trên nó POS và offest ID. Tôi nghĩ rằng phương pháp này chỉ có sẵn trong NLTK 3.0 nhưng tôi không chắc chắn.

Ví dụ:

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

Bạn có thể sử dụng of2ss(), Ví dụ:

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

sẽ trở lại Synset('necessary.a.01')

Các vấn đề liên quan