是否有针对数据类型字符串的本机拼写检查方法

本文关键字:本机 检查 方法 字符串 数据类型 是否 | 更新日期: 2023-09-27 18:25:37

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

我读过关于SpellCheck类的文章,但我不知道除了使用文本框之外,它如何在一个简单的字符串上使用。如果可能的话,有人可以给我一个如何做的例子吗?

提前谢谢。

是否有针对数据类型字符串的本机拼写检查方法

我最近也在做类似的事情,我使用了NHunsell(你也可以从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词典列表(有不同的语言)。

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

实现这一点的第二种方法是下载一本字典,对每个可能的单词进行迭代,然后使用Levenstein距离计算。该计算将返回相似性百分比。你可以说,如果一个词的相似度达到75%或更高,那么就把它作为更正。

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

这是距离计算的基本思想

  1. 设置n为s的长度。("GUMBO")设置m为t的长度("GAMBOL")

    如果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]设置为的最小值:

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

    b。紧邻左侧的单元格加1:v0[j]+1。

    c。斜上方和左侧的单元格加上成本:v0[j-1]+成本。

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