【发布时间】:2011-05-30 02:50:33
【问题描述】:
我正在寻找一种简单的方法来检查某个字符串是否是正确拼写的英文单词。例如,'looked' 将返回 True,而 'hurrr' 将返回 False。我不需要拼写建议或任何拼写纠正功能。只是一个简单的函数,它接受一个字符串并返回一个布尔值。
我可以使用 PyEnchant 通过 Python 轻松完成此操作,但如果您想将它与 MS Visual C++ 一起使用,您似乎必须自己编译该库。
【问题讨论】:
我正在寻找一种简单的方法来检查某个字符串是否是正确拼写的英文单词。例如,'looked' 将返回 True,而 'hurrr' 将返回 False。我不需要拼写建议或任何拼写纠正功能。只是一个简单的函数,它接受一个字符串并返回一个布尔值。
我可以使用 PyEnchant 通过 Python 轻松完成此操作,但如果您想将它与 MS Visual C++ 一起使用,您似乎必须自己编译该库。
【问题讨论】:
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 repository。
【讨论】:
如果你想自己实现这样的功能,你需要一个数据库来查询一个给定的单词是否有效(通常一个纯文本文件就足够了,比如Linux上的/usr/share/dict/words)。
否则,您可以依赖第三方拼写检查库来执行此操作。
【讨论】:
您可以使用其中一个 GNU 字典(如前面提到的 /usr/share/dict/words)并将其构建到适当的数据结构中,以便根据您的性能需求为您提供快速查找和成员资格检查,例如 @987654321 @ 甚至只是一个 trie 可能就足够了。
【讨论】:
首先,您需要一个单词列表。 (/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';
}
【讨论】: