C ++: проверьте, правильно ли написано слово - PullRequest
2 голосов
/ 23 декабря 2010

Я ищу простой способ проверить, является ли определенная строка правильно написанным английским словом. Например, «look» вернул бы «True», а «hurrr» вернул бы «False». Мне не нужны предложения правописания или какие-либо исправляющие орфографию функции. Просто простая функция, которая принимает строку и возвращает логическое значение.

Я мог бы легко сделать это с Python, используя PyEnchant, но, похоже, вам нужно скомпилировать библиотеку самостоятельно, если вы хотите использовать ее с MS Visual C ++.

Ответы [ 5 ]

3 голосов
/ 23 декабря 2010

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-репозитории .

2 голосов
/ 23 декабря 2010

Вы можете взять один из словарей GNU (например, /usr/share/dict/words, как уже упоминалось) и встроить его в соответствующую структуру данных, которая обеспечит вам быстрый поиск и проверку членства в зависимости от ваших потребностей в производительности, что-то вроде направленный ациклический граф слов или даже просто три может быть достаточно.

2 голосов
/ 23 декабря 2010

Если вы хотите реализовать такую ​​функцию самостоятельно, вам потребуется база данных для запроса, чтобы выяснить, является ли данное слово допустимым (обычно достаточно простого текстового файла, например /usr/share/dict/words в Linux).

В противном случае вы можете положиться на стороннюю библиотеку проверки орфографии, которая делает именно это.

1 голос
/ 23 декабря 2010

Для начала вам понадобится список слов.( / usr / share / dict / words возможно?)

Вы должны прочитать свой список слов в std::set.Затем проверка правильности орфографии состоит просто из проверки всех вводимых пользователем слов на предмет того, находятся ли они в наборе.

0 голосов
/ 23 декабря 2010
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';
}
...