如何获得给出偏移ID的WordNet synset?

use*_*457 14 python nlp nltk wordnet python-2.7

我有一个WordNet synset偏移(例如id="n#05576222").鉴于此偏移,我如何使用Python获取synset?

小智 19

从NLTK 3.2.3开始,有一种公共方法可以做到这一点:

wordnet.synset_from_pos_and_offset(pos, offset)
Run Code Online (Sandbox Code Playgroud)

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

wordnet.synset_from_pos_and_offset(pos, offset)
Run Code Online (Sandbox Code Playgroud)

这将根据它的POS和offest ID返回一个synset.我认为这种方法仅适用于NLTK 3.0,但我不确定.

例:

from nltk.corpus import wordnet as wn
wn.synset_from_pos_and_offset('n',4543158)
>> Synset('wagon.n.01')
Run Code Online (Sandbox Code Playgroud)


Suz*_*ana 13

对于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')
Run Code Online (Sandbox Code Playgroud)

然后,您可以挑选字典并在需要时加载它.

对于3.0之前的NLTK版本,请替换该行

offsets_list = [(s.offset(), s) for s in syns]
Run Code Online (Sandbox Code Playgroud)

offsets_list = [(s.offset, s) for s in syns]
Run Code Online (Sandbox Code Playgroud)

因为在NLTK 3.0之前offset是属性而不是方法.

  • `offset`现在是一种方法.试试这个:`offsets_dict = {s.offset():s for wn.all_synsets()}` (6认同)
  • 有趣的是,这引发了NLTK 3.0的一个关键错误 (3认同)

小智 7

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

from nltk.corpus import wordnet as wn
syn = wn.of2ss('01580050a')
Run Code Online (Sandbox Code Playgroud)

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