有没有一种方法可以创建一个正则表达式,确保在给定的字符范围内(例如20个字符),8个字符中有5个是按顺序出现的?
我正在处理可怕的OCR/扫描,我可以忍受误报。
有办法做到这一点吗?
**更新:**我想匹配例如“mshpeln”作为misspelling
。我不想做OCR。OCR工作已经完成,但做得很差(即它最初说misspelling
,但OCR的副本读作“mshpeln”)。我不知道我必须匹配的文本是什么(即。我不知道它是“mshpeln”,它可能是“mispel”或任何数量的其他组合)。
我并不想用它来做拼写检查,而只是找到一个捕获组的结尾。顺便说一句,我目前在获取all.css文件时遇到了麻烦,所以暂时无法进行评论。
4条答案
按热度按时间xtupzzrd1#
我认为你不需要正则表达式,但数据库与所有有效的话和创造性的使用功能,如
soundex()
和/或levenshtein()
。你可以这样做:用所有有效的单词(dictionary)创建表,用
word
和snd
(计算为soundex(word)
)这样的列填充它,为word
和snd
列创建索引。例如,对于单词mispeling
,您可以将snd
填充为M214
。如果你使用SQLite,它有soundex()
implemented by default。现在,当你得到新的坏单词时,计算
soundex()
并在索引表中查找它。例如,对于单词mshpeln
,它将是soundex('mshpeln')
=M214
。好了,这样你就能得到正确的单词了。但这看起来不像正则表达式-对不起。
2uluyalo2#
老实说,我认为这样的项目更适合真人来做,而不是电脑。如果项目太大,一两个人很难完成,你可能想看看亚马逊的Mechanical Turk,在那里你可以外包工作,每个解决方案只需要几分钱。
hmtdttj43#
这不能用正则表达式来完成,但可以用自定义算法来完成。
例如,要在文本正文中查找类似“拼写错误”的单词:
1)预处理。创建一个
Set
(在数学意义上,保证是唯一元素的集合),其中包含拼写错误的所有唯一字母-{e, i, g, l, m, n, p, s}
2)将正文拆分为单词。
3)对于每个单词,创建一个包含所有唯一字母的
Set
。然后,在这个集合和你要匹配的单词的集合上执行集合交集的操作-这将得到两个集合都包含的字母。如果这个集合中剩下5个或更多字符,则您在这里有一个可能的匹配。如果OCR可以添加错误的空格,则考虑一次添加两个单词而不是单个单词。等等根据你的要求。
2skhul334#
我没有解决这个问题的办法,事实上,这里正好相反。
由于以下两个原因,无法通过编程方式更正OCR错误:
1.您无法量化OCR算法产生的错误,因为它可能在0到100%之间
1.要应用校正,您需要知道最大误差可能是多少,以便设置可接受的水平。
让 nello world 作为“hello world”的第一个猜测,这是非常相似的。然后,用另一种字体,写在“痛苦”黄色或什么,第二个猜测是 noiio verio 相同的表达。计算机如何知道这个词如果被更好地识别的话会是相似的呢?
否则,给定一个预定的误差,mvp的解决方案在我看来似乎是最好的。
更新:
经过一点挖掘,我发现了一个可能相关的参考:String similarity measures