2

我正在寻找一种简单的方法来检查某个字符串是否是正确拼写的英文单词。例如,'looked' 将返回 True,而 'hurrr' 将返回 False。我不需要拼写建议或任何拼写纠正功能。只是一个简单的函数,它接受一个字符串并返回一个布尔值。

我可以使用 PyEnchant 使用 Python 轻松完成此操作,但如果您想将它与 MS Visual C++ 一起使用,您似乎必须自己编译该库。

4

5 回答 5

3

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 存储库

于 2010-12-23T18:45:30.897 回答
2

如果你想自己实现这样的功能,你需要一个数据库来查询,以确定给定的单词是否有效(通常一个纯文本文件就足够了,比如/usr/share/dict/words在 Linux 上)。

否则,您可以依赖第三方拼写检查库来做到这一点。

于 2010-12-23T18:38:52.907 回答
2

您可以使用其中一个 GNU 字典(/usr/share/dict/words如前所述)并将其构建到适当的数据结构中,根据您的性能需求为您提供快速查找和成员资格检查,例如有向无环词图甚至只是一个尝试可能就足够了。

于 2010-12-23T18:39:56.270 回答
1

首先,您需要一个单词列表。(/usr/share/dict/words也许?)

你应该把你的单词表读成std::set. 然后一个正确的拼写测试只是简单地检查所有用户输入的单词是否在集合中。

于 2010-12-23T18:40:27.407 回答
-1
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';
}
于 2010-12-23T18:39:52.320 回答