Как получить синтаксис WordNet по идентификатору смещения? - PullRequest
13 голосов
/ 10 ноября 2011

У меня есть смещение синтаксиса WordNet (например, id="n#05576222").Учитывая это смещение, как я могу получить синтаксис, используя Python?

Ответы [ 4 ]

18 голосов
/ 26 ноября 2014

Начиная с NLTK 3.2.3, есть открытый метод для этого:

wordnet.synset_from_pos_and_offset(pos, offset)

В более ранних версиях вы можете использовать:

wordnet._synset_from_pos_and_offset(pos, offset)

Возвращает синтаксис в зависимости от его POS и идентификатора. Я думаю, что этот метод доступен только в NLTK 3.0, но я не уверен.

Пример:

from nltk.corpus import wordnet as wn
wn._synset_from_pos_and_offset('n',4543158)
>> Synset('wagon.n.01')
12 голосов
/ 12 сентября 2012

Для 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')

Затем вы можете выбрать словарь и загрузить его в любое время.

Для версий NLTK до 3.0 заменить строку

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

с

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

поскольку до NLTK 3.0 offset был атрибутом, а не методом.

1 голос
/ 20 марта 2017

Вы можете использовать of2ss(), например:

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

вернется Synset('necessary.a.01')

1 голос
/ 02 февраля 2013

Кроме использования NLTK, другим вариантом будет использование файла .tab из Open Multilingual WordNet http://compling.hss.ntu.edu.sg/omw/ для Princeton WordNet.Обычно я использовал приведенный ниже рецепт для доступа к wordnet в качестве словаря со смещением в качестве ключа и ; разделенными строками в качестве значений:

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