正则表达式,可以处理可怕的拼写错误的单词

时间:2013-06-04 03:34:58

标签: c# regex

有没有办法创建一个正则表达式,以确保在给定的字符范围内按顺序存在八个字符中的五个(例如20个字符)?

我正在处理可怕的OCR /扫描,我可以忍受误报。

有办法做到这一点吗?

更新:我希望将“mshpeln”匹配为misspelling。我不想做OCR。 OCR工作已经完成,但是做得很差(即最初说misspelling,但OCR的副本读取“mshpeln”)。我不知道我将要与之匹配的文本是什么(即我不知道它是“mshpeln”它可能是“mispel”或任何其他组合)。

我不是试图将它用作拼写检查程序,而只是找到捕获组的结尾。顺便说一句,我目前无法获取all.css文件,因此暂时无法进行评论。

4 个答案:

答案 0 :(得分:3)

我认为你不需要正则表达式,而是包含所有有效单词和soundex()和/或levenshtein()等函数的创造性使用的数据库。

您可以这样做:创建包含所有有效单词(词典)的表格,并使用wordsnd(计算为soundex(word))等列填充它,为wordsnd列创建索引。 例如,对于单词mispeling,您可以将snd填充为M214。如果您使用SQLite,则它有soundex() implemented by default

现在,当您收到新的错误字词时,请为其计算soundex()并在索引表中查找。例如,对于单词mshpeln,它将是soundex('mshpeln') = M214。你走了,这样你就能找回正确的词。

但这看起来不像正则表达式 - 对不起。

答案 1 :(得分:0)

老实说,我认为像这样的项目对于真正的人来说会更好,而不是计算机。如果项目对于1或2人来说很容易做,那么你可能想看看亚马逊的机械土耳其人,你可以将其外包给每个解决方案的便士工作。

答案 2 :(得分:0)

使用正则表达式无法做到这一点,但可以使用自定义算法完成。

例如,要在您的正文中找到类似“拼写错误”的字词:

1)预处理。创建一个Set(在数学意义上,保证是唯一元素的集合),其中包含拼写错误的所有唯一字母 - {e, i, g, l, m, n, p, s}

2)将文本正文拆分为单词。

3)对于每个单词,创建一个包含所有独特字母的Set。然后,在此集合上执行集合交集的操作以及您要匹配的单词集合 - 这将获得两个集合包含的字母。如果此组中剩下5个或更多字符,则此处可能匹配。

如果OCR可以添加错误的空格,那么一次考虑两个单词而不是单个单词。等等根据您的要求而定。

答案 3 :(得分:0)

我没有解决这个问题的办法,事实上,这恰恰相反。

由于以下两个原因,纠正OCR错误不是程序化的:

  1. 您无法量化OCR算法所产生的错误,因为它可以介于0到100%之间

  2. 要应用更正,您需要知道最大错误可能是什么,以便设置可接受的级别。

  3. nello world 成为“hello world”的第一个猜测,这非常相似。然后,使用另一种用“痛苦的”黄色或其他东西写的字体,对于同一表达式,第二次猜测是 noiio verio 。如果能够更好地识别出这个词,那该计算机应该怎么知道?

    否则,鉴于预定的错误,mvp的解决方案在我看来似乎是最好的。


    更新:

    在挖掘了一点后,我找到了一个可能相关的参考:String similarity measures