我有一个WordNet词汇集(synset)的偏移量(例如id="n#05576222"
)。使用Python,如何通过这个偏移量获取词汇集?
我有一个WordNet词汇集(synset)的偏移量(例如id="n#05576222"
)。使用Python,如何通过这个偏移量获取词汇集?
从NLTK 3.2.3版本开始,有一个公开的方法可以做到这一点:
wordnet.synset_from_pos_and_offset(pos, offset)
在早期版本中,您可以使用:
wordnet._synset_from_pos_and_offset(pos, offset)
根据词性和偏移ID返回一个同义词集。我认为这种方法仅适用于NLTK 3.0,但我不确定。
示例:
from nltk.corpus import wordnet as wn
wn.synset_from_pos_and_offset('n',4543158)
>> Synset('wagon.n.01')
对于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')
您可以将该字典进行pickling,以便在需要时加载。
对于版本低于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
是一个属性而不是一个方法。
offset
现在是一个方法。请尝试使用以下代码代替:offsets_dict = {s.offset(): s for s in wn.all_synsets()}
- Omerof2ss()
,例如:from nltk.corpus import wordnet as wn
syn = wn.of2ss('01580050a')
will return
Synset('necessary.a.01')
;
分隔的字符串为值:# 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')