web-dev-qa-db-ja.com

NLTK 3.0のWordnetを使用してSynsetから単語を抽出する

少し前に、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でシンセットのリストの単語を印刷することは可能ですか?他の人がこの質問についてアドバイスできることを感謝します。

14
duhaime

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__()メソッドがありません(したがって、添え字を付けることはできません)。

15

lemma_names()を使用して、見出し語名に直接移動することもできます。

>>> wordnet.synset('dog.n.1').lemma_names()
['dog', 'domestic_dog', 'Canis_familiaris']

そしてそれは複数の言語で動作します

>>>> wordnet.synset('dog.n.1').lemma_names(lang='jpn')
['イヌ', 'ドッグ', '洋犬', '犬', '飼犬', '飼い犬']
10
Francis Bond

使用する:

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.

7
alvas