2

我正在开发一种工具,该工具使用一个非常旧的数据库 GUI 来分析手动输入的大量数据,该 GUI 不允许进行拼写检查,因此我必须在后期处理中进行。这是我在 C# 中的第一个严肃程序,我想知道,在实现更复杂的东西(如字典)或使用外部库(如 NHunspell)之前,是否有任何本机方法可以应用于常规字符串以检查字符串内部是否存在拼写错误。

我已经阅读了有关 SpellCheck 类的信息,但我不知道如何在一个简单的字符串上使用它,而不是使用文本框。如果有可能有人可以给我一个如何做的例子吗?

提前致谢。

4

2 回答 2

4

我最近在做类似的事情,我使用了 NHunspell(你也可以从NuGet获得),所以我得到了这样的东西(它不是确切的代码,但它非常接近):

public IDictionary<string, IEnumerable<string>> Analyze(string text)
{
    var results = new Dictionary<string, IEnumerable<string>>();

    using (var hunspell = new Hunspell("Resources\\en_GB.aff", "Resources\\en_GB.dic"))
    {   
        string[] words = Regex.Split(text, @"\W+", RegexOptions.IgnoreCase);
        IEnumerable<string> misspelledWords = words.Where(word => !hunspell.Spell(word));

        foreach (string word in misspelledWords)
        {
            IEnumerable<string> suggestions = hunspell.Suggest(word);
            results.Add(word, suggestions);
        }
    }
    return results;
}

它会分析您的文本,返回拼写错误单词的字典以及每个单词的建议列表。

只是补充一下,这里是一个 Hunspell 词典列表(使用不同的语言)。

于 2013-07-31T16:03:03.767 回答
3

实现拼写检查的最简单方法是使用 Web api。幸运的是微软已经为你创建了一个http://msdn.microsoft.com/en-us/library/windows/desktop/hh869852(v=vs.85).aspx

实现这一点的第二种方法是下载一个字典,为每个可能的单词遍历它,然后使用Levenshtein 距离计算这个计算将返回一个相似度百分比。你可以说如果一个词有 75% 或更多的相似度,然后提供它作为更正。

这是 Levenshtein 距离计算的另一个链接,这有一个很好的 c# 示例http://www.dotnetperls.com/levenshtein

这是距离计算的基本思路

  1. 将 n 设置为 s 的长度。("GUMBO") 将 m 设置为 t 的长度。(“游戏”)

    如果 n = 0,则返回 m 并退出。

    如果 m = 0,则返回 n 并退出。

    构造两个向量,v0[m+1] 和 v1[m+1],包含 0..m 个元素。

  2. 将 v0 初始化为 0..m。

  3. 检查 s 的每个字符(i 从 1 到 n)。

  4. 检查 t 的每个字符(j 从 1 到 m)。

  5. 如果 s[i] 等于 t[j],则成本为 0。如果 s[i] 不等于 t[j],则成本为 1。

  6. 设置单元格 v1[j] 等于以下的最小值:

    一个。正上方的单元格加上 1:v1[j-1] + 1。

    湾。紧靠左边的单元格加 1:v0[j] + 1。

    C。对角线上方和左侧的单元格加上成本:v0[j-1] + 成本。

  7. 迭代步骤(3、4、5、6)完成后,在单元格 v1[m] 中找到距离。

于 2013-07-31T15:58:21.493 回答