特定の文字列が正しいスペルの英語の単語であるかどうかを確認する簡単な方法を探しています。たとえば、「looked」はTrueを返し、「hurrr」はFalseを返します。スペルの提案やスペル修正機能は必要ありません。文字列を受け取り、ブール値を返す単純な関数です。
PyEnchantを使用してPythonでこれを簡単に行うことができますが、MS Visual C ++で使用する場合は、ライブラリを自分でコンパイルする必要があるようです。
PyEnchantは、CおよびC++インターフェイスを提供するCライブラリであるEnchantに基づいています。したがって、C++に使用できます。最小限の例は次のようになります。
#include <memory>
#include <cstdio>
#include "enchant.h"
#include "enchant++.h"
int main ()
{
try
{
enchant::Broker *broker = enchant::Broker::instance ();
std::auto_ptr<enchant::Dict> dict (broker->request_dict ("en_US"));
const char *check_checks[] = { "hello", "helllo" };
for (int i = 0; i < (sizeof (check_checks) / sizeof (check_checks[0])); ++i)
{
printf ("enchant_dict_check (%s): %d\n", check_checks[i],
dict->check (check_checks[i]) == false);
}
} catch (const enchant::Exception &) {
return 1;
}
}
その他の例/テストについては、SVNリポジトリを参照してください。
このような関数を自分で実装する場合は、特定の単語が有効かどうかを確認するためにクエリを実行するデータベースが必要になります(/usr/share/dict/words
Linuxの場合のように、通常はプレーンテキストファイルで十分です)。
それ以外の場合は、それを実行するサードパーティのスペルチェックライブラリに依存する可能性があります。
(前述のように)GNU辞書の1つを取り出して/usr/share/dict/words
適切なデータ構造に組み込むと、パフォーマンスのニーズに応じて、有向非巡回ワードグラフや単なるトライで十分かもしれません。
手始めに、単語リストが必要です。(/ usr / share / dict / words多分?)
単語リストをに読み込む必要がありますstd::set
。次に、正しいスペルのテストは、すべてのユーザー入力単語をチェックして、それらがセットに含まれているかどうかを確認するだけです。
bool spell_check(std::string const& str)
{
std::cout << "Is '" << str << "' spelled correctly? ";
std::string input;
std::getline(input);
return input[0] == 'y' || input[0] == 'Y';
}