少し前に、SO=に尋ねました 特定のSynsetの単語リストを取得する方法 NLTKのwordnetラッパーを使用しています。推奨される応答の1つを次に示します:
for synset in wn.synsets('dog'):
print synset.lemmas[0].name
このコードをNLTK 3.0で実行すると、TypeError: 'instancemethod' object is not subscriptable
。
以前に提案されたソリューション(上記のリンク先のページで説明されている各ソリューション)をそれぞれ試しましたが、それぞれがエラーをスローします。したがって、私は尋ねました:NLTK 3.0でシンセットのリストの単語を印刷することは可能ですか?他の人がこの質問についてアドバイスできることを感謝します。
WordNetはNLTK 3.0で正常に動作します。間違った方法で補題(および名前)にアクセスしているだけです。代わりにこれを試してください:
_>>> import nltk
>>> nltk.__version__
'3.0.0'
>>> from nltk.corpus import wordnet as wn
>>> for synset in wn.synsets('dog'):
for lemma in synset.lemmas():
print lemma.name()
dog
domestic_dog
Canis_familiaris
frump
dog
dog
cad
bounder
blackguard
...
_
_synset.lemmas
_はメソッドであり、__getitem__()
メソッドがありません(したがって、添え字を付けることはできません)。
lemma_names()
を使用して、見出し語名に直接移動することもできます。
>>> wordnet.synset('dog.n.1').lemma_names()
['dog', 'domestic_dog', 'Canis_familiaris']
そしてそれは複数の言語で動作します
>>>> wordnet.synset('dog.n.1').lemma_names(lang='jpn')
['イヌ', 'ドッグ', '洋犬', '犬', '飼犬', '飼い犬']
使用する:
wn.synset('dog.n.1').name()
の代わりに:
wn.synset('dog.n.1').name
nLTKがSynsetプロパティを変更して、代わりに関数を取得するためです。参照 https://github.com/nltk/nltk/commit/ba8ab7e23ea2b8d61029484098fd62d5986acd9c
これは、py3.xに合わせてNLTKのAPIを変更するための優れたリストです。 https://github.com/nltk/nltk/wiki/Porting-your-code-to-NLTK-3.