如何通过偏移ID获取WordNet同义词集?

21 投票
4 回答
14082 浏览
提问于 2025-04-17 06:01

我有一个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')

撰写回答