21 Stimmen

Wie erhält man das WordNet-Synset anhand einer Offset-ID?

Ich habe einen WordNet-Synset-Offset (zum Beispiel id="n#05576222" ). Wie kann ich angesichts dieses Offsets das Synset mit Python ermitteln?

29voto

donners45 Punkte 351

Seit NLTK 3.2.3 gibt es eine öffentliche Methode, um dies zu tun:

wordnet.synset_from_pos_and_offset(pos, offset)

In früheren Versionen können Sie das verwenden:

wordnet._synset_from_pos_and_offset(pos, offset)

Dies gibt ein Synset auf der Grundlage seiner POS- und Offest-ID zurück. Ich glaube, diese Methode ist nur in NLTK 3.0 verfügbar, aber ich bin mir nicht sicher.

Beispiel:

from nltk.corpus import wordnet as wn
wn.synset_from_pos_and_offset('n',4543158)
>> Synset('wagon.n.01')

14voto

Suzana Punkte 4131

Für NTLK 3.2.3 oder neuere Versionen lesen Sie bitte die Antwort von donners45.

Für ältere Versionen von NLTK:

Es gibt keine eingebaute Methode im NLTK, aber Sie könnten diese verwenden:

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

Sie können das Wörterbuch dann speichern und bei Bedarf laden.

Für NLTK-Versionen vor 3.0 ersetzen Sie die Zeile

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

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

seit vor NLTK 3.0 offset ein Attribut statt einer Methode war.

7voto

carcar Punkte 81

Sie können verwenden of2ss() Zum Beispiel:

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

wird zurückgegeben Synset('necessary.a.01')

1voto

alvas Punkte 104216

Eine andere Möglichkeit als die Verwendung von NLTK wäre die Verwendung der .tab-Datei aus dem Open Multilingual WordNet http://compling.hss.ntu.edu.sg/omw/ für das Princeton WordNet. Normalerweise habe ich das folgende Rezept verwendet, um auf das WordNet als Wörterbuch mit Offset als Schlüssel und ; abgegrenzte Zeichenketten als Werte:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X