C++: проверьте, правильно ли написано слово
Я ищу простой способ проверить, является ли определенная строка правильно написанным английским словом. Например, "look" вернул бы "True", а "hurrr" вернул бы "False". Мне не нужны предложения правописания или какие-либо исправляющие орфографию функции. Просто простая функция, которая принимает строку и возвращает логическое значение.
Я мог бы легко сделать это с Python, используя PyEnchant, но, похоже, вам нужно скомпилировать библиотеку самостоятельно, если вы хотите использовать ее с MS Visual C++.
5 ответов
PyEnchant основан на Enchant- библиотеке C, предоставляющей интерфейсы C и C++. Так что вы можете просто использовать это для 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 там (например, /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';
}