有没有办法创建一个正则表达式,以确保在给定的字符范围内按顺序存在八个字符中的五个(例如20个字符)?
我正在处理可怕的OCR /扫描,我可以忍受误报。
有办法做到这一点吗?
更新:我希望将“mshpeln”匹配为misspelling
。我不想做OCR。 OCR工作已经完成,但是做得很差(即最初说misspelling
,但OCR的副本读取“mshpeln”)。我不知道我将要与之匹配的文本是什么(即我不知道它是“mshpeln”它可能是“mispel”或任何其他组合)。
我不是试图将它用作拼写检查程序,而只是找到捕获组的结尾。顺便说一句,我目前无法获取all.css文件,因此暂时无法进行评论。
答案 0 :(得分:3)
我认为你不需要正则表达式,而是包含所有有效单词和soundex()
和/或levenshtein()
等函数的创造性使用的数据库。
您可以这样做:创建包含所有有效单词(词典)的表格,并使用word
和snd
(计算为soundex(word)
)等列填充它,为word
和snd
列创建索引。
例如,对于单词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错误不是程序化的:
您无法量化OCR算法所产生的错误,因为它可以介于0到100%之间
要应用更正,您需要知道最大错误可能是什么,以便设置可接受的级别。
让 nello world 成为“hello world”的第一个猜测,这非常相似。然后,使用另一种用“痛苦的”黄色或其他东西写的字体,对于同一表达式,第二次猜测是 noiio verio 。如果能够更好地识别出这个词,那该计算机应该怎么知道?
否则,鉴于预定的错误,mvp的解决方案在我看来似乎是最好的。
更新:
在挖掘了一点后,我找到了一个可能相关的参考:String similarity measures