1

私は比較的新しく、Pythonを学んでいます。ユーザーから提供された単語を受け取り、その単語に対していくつかの代替提案を行うアプリを作成しようとしています。必要なものはほとんど nltk にあるようです。私はいくつかの例を見てきましたが、次のように機能させることができました。

from nltk.corpus import wordnet as wn
    for lemma in wn.synset('car.n.01').lemmas:
        print lemma, lemma.count()

これはうまくいきます。私が見つけている問題は、ユーザーが単語のスペルを間違えたり複数形にしたりすると、クラッシュすることです。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/nltk-2.0.1rc1-py2.6.egg/nltk/corpus/reader/wordnet.py", line 1035, in synset
    raise WordNetError(message % (lemma, pos))
nltk.corpus.reader.wordnet.WordNetError: no lemma 'cars' with part of speech 'n'

このエラーに基づいて、名詞として「cars」を見つけることができなかったようです。単語が見つかったかどうかを確認するために検索を行う方法、またはこれを実装するより良い方法はありますか?

4

1 に答える 1

1

Wordnet を正しい方法で呼び出していないと思います。

>>> wn.synsets('cars')
[Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'),
Synset('car.n.04'), Synset('cable_car.n.01')]

今:

>>> for synset in wn.synsets('cars'):
...    synset.lemmas
[Lemma('car.n.01.car'), Lemma('car.n.01.auto'),
Lemma('car.n.01.automobile'),Lemma('car.n.01.machine'),
Lemma('car.n.01.motorcar')]...

スペルミスに関しては、NLTK に機能が組み込まれているとは思えません。次のいずれかを実行できます。

  1. のようなライブラリを使用してください。このライブラリはpyenchant、優れた C ライブラリ (Myspell、Hunspell) へのアクセスを提供します。主な問題、IMO は、スペルミスの単語に対して多くの異なる提案が得られないことです。
  2. ユーザーが提出した単語を自分で確認し、別のスペルを提案します。これは大したことではありません。このプログラムが何をするか (または直接使用するか) を調べることから始めることができます。これは、単語リストにグラム インデックスを作成する方法の良い例を提供します。

補題に関する情報を取得するには:

>>> # get one of the lemmas
>>> lemma = wn.synsets('cars')[0].lemmas[0]
>>> lemma
Lemma('car.n.01.car')
>>> dir(lemma)
[...'antonyms', 'attributes', 'causes', 'count',
'derivationally_related_forms', 'entailments', 'frame_ids'... 'name'...]
>>> lemma.name
'car'

各オブジェクトで使用dirしてそのプロパティを確認し、試してみてください:)

于 2013-06-20T15:24:24.017 に答える