20

WordNetシンセットオフセットがあります(たとえばid="n#05576222")。このオフセットが与えられた場合、Pythonを使用してシンセットを取得するにはどうすればよいですか?

4

4 に答える 4

28

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')
于 2014-11-26T09:37:04.037 に答える
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は、メソッドではなく属性でした。

于 2012-09-11T21:53:53.397 に答える
7

of2ss()たとえば、次のように使用できます。

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

戻ります Synset('necessary.a.01')

于 2017-03-20T14:36:28.570 に答える
1

NLTK を使用する以外に、Princeton WordNetのOpen Multilingual WordNet http://compling.hss.ntu.edu.sg/omw/にある .tab ファイルを使用する方法もあります。;通常、以下のレシピを使用して、オフセットをキーとして区切り文字列を値として持つ辞書として 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')
于 2013-02-02T02:21:28.473 に答える