170

単語が英語の辞​​書にあるかどうか、Python プログラムでチェックインしたいと考えています。

nltk wordnet インターフェイスが最適な方法であると思いますが、そのような単純なタスクにそれを使用する方法がわかりません。

def is_english_word(word):
    pass # how to I implement is_english_word?

is_english_word(token.lower())

将来的には、単語の単数形が辞書にあるかどうかを確認したいと思うかもしれません (例: プロパティ -> プロパティ -> 英単語)。どうすればそれを達成できますか?

4

11 に答える 11

253

(はるかに) 強力で柔軟な場合は、専用のスペルチェック ライブラリを使用してPyEnchantください。チュートリアルがあります。または、直接飛び込むこともできます。

>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
>>> d.suggest("Helo")
['He lo', 'He-lo', 'Hello', 'Helot', 'Help', 'Halo', 'Hell', 'Held', 'Helm', 'Hero', "He'll"]
>>>

PyEnchantにはいくつかの辞書 (en_GB、en_US、de_DE、fr_FR) が付属していますが、さらに多くの言語が必要な場合は、 OpenOfficeのいずれかを使用できます。

と呼ばれる複数形化ライブラリがあるようですがinflect、それが良いかどうかはわかりません。

于 2010-09-24T16:26:11.297 に答える
68

WordNet にはすべての英単語が含まれているわけではないため、WordNet ではうまく機能しません。エンチャントなしの NLTK に基づくもう 1 つの可能性は、NLTK の単語コーパスです。

>>> from nltk.corpus import words
>>> "would" in words.words()
True
>>> "could" in words.words()
True
>>> "should" in words.words()
True
>>> "I" in words.words()
True
>>> "you" in words.words()
True
于 2014-01-28T08:38:26.433 に答える
42

セットを使用して単語リストを保存するのは、検索が高速になるためです。

with open("english_words.txt") as word_file:
    english_words = set(word.strip().lower() for word in word_file)

def is_english_word(word):
    return word.lower() in english_words

print is_english_word("ham")  # should be true if you have a good english_words.txt

質問の 2 番目の部分に答えるには、複数形は既に適切な単語リストに含まれていますが、何らかの理由で複数形をリストから明確に除外したい場合は、実際にそれを処理する関数を作成できます。しかし、英語の複数形のルールは非常に複雑なので、最初から複数形を単語リストに含めておきます。

英単語リストがどこにあるかというと、「英単語リスト」でググるだけでいくつか出てきました。ここに 1 つがあります: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt 特にこれらの方言の 1 つが必要な場合は、イギリス英語またはアメリカ英語を Google で検索できます。

于 2010-09-24T16:12:00.430 に答える
7

より高速な NLTK ベースのソリューションでは、一連の単語をハッシュして線形検索を回避できます。

from nltk.corpus import words as nltk_words
def is_english_word(word):
    # creation of this dictionary would be done outside of 
    #     the function because you only need to do it once.
    dictionary = dict.fromkeys(nltk_words.words(), None)
    try:
        x = dictionary[word]
        return True
    except KeyError:
        return False
于 2016-06-27T19:58:47.543 に答える
1

セマンティック Web アプローチの場合、RDF 形式の WordNet に対して sparql クエリを実行できます。基本的には urllib モジュールを使用して GET リクエストを発行し、結果を JSON 形式で返し、python 'json' モジュールを使用して解析します。英単語でない場合、結果は得られません。

別のアイデアとして、ウィクショナリーの APIに問い合わせることができます。

于 2010-09-24T17:28:58.483 に答える
0

このページを見ることができます:

言語を決定する方法

をお勧めしますlangid

于 2021-10-12T19:50:06.773 に答える