如何通过偏移ID获取WordNet同义词集?
我有一个WordNet的同义词集合偏移量,比如说 id="n#05576222"
。那么,给定这个偏移量,我该如何用Python来获取这个同义词集合呢?
4 个回答
7
你可以使用 of2ss()
这个函数,比如:
from nltk.corpus import wordnet as wn
syn = wn.of2ss('01580050a')
它会返回
Synset('necessary.a.01')
14
对于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')
然后你可以把这个字典保存起来,以后需要的时候再加载。
对于3.0之前的NLTK版本,把这一行
offsets_list = [(s.offset(), s) for s in syns]
替换成
offsets_list = [(s.offset, s) for s in syns]
因为在NLTK 3.0之前,offset
是一个属性,而不是一个方法。
29
截至NLTK 3.2.3版本,现在有一个公开的方法可以做到这一点:
wordnet.synset_from_pos_and_offset(pos, offset)
在早期版本中,你可以使用:
wordnet._synset_from_pos_and_offset(pos, offset)
这个方法会根据词性的POS和偏移ID返回一个同义词集合(synset)。我觉得这个方法只在NLTK 3.0版本中可用,但我不太确定。
举个例子:
from nltk.corpus import wordnet as wn
wn.synset_from_pos_and_offset('n',4543158)
>> Synset('wagon.n.01')