我正在尝试的是基于组合相同文本页面的各种不良版本来修复文本的功能.基本上,这可以用于将不同的OCR结果组合成一个比任何一个单独的更准确的结果.
我从一本60万英文单词的字典开始,几乎包括法律和医学术语以及通用名称.我已经有了
然后我有4个版本的文本示例.
这样的事情
$text[0] = 'Fir5t text sample is thisline'; $text[1] = 'Fir5t text Smplee is this line.'; $text[2] = 'First te*t sample i this l1ne.'; $text[3] = 'F i r st text s ample is this line.';
我试图结合以上来获得一个如下所示的输出:
$text = 'First text sample is this line.';
不要告诉我这是不可能的,因为它当然不是,只是非常困难.
我非常感谢任何人对此有任何想法.
谢谢!
我目前的想法:
只是检查字典对字典将不起作用,因为一些空格在错误的地方,偶尔这个词不会在字典中.
主要的问题是修复破碎的间距,一旦这是固定的,那么最常出现的词典词可以选择,如果存在,或者是最常发生的非词典单词.
http://en.wikipedia.org/wiki/Diff
几年前,我在一个类似于你的OCR应用程序.而不是将多个OCR引擎应用于一个映像,我使用一个OCR引擎来分析同一映像的多个版本.每个处理后的图像都是对原始图像应用不同的去噪技术的结果:一种技术对于较低的对比度效果更好,另一种技术在人物形成不佳时效果更好.比较OCR结果对每个图像的“投票”方案提高了诸如“BQCM10032”之类的任意字符串的读取速率.其他投票方案在OCR的学术文献中有描述.
有时,您可能需要匹配一个单词,没有OCR结果的组合将产生所有字母.例如,中间字母可能会丢失,如“w rd”或“c tch”(可能是“单词”和“catch”).在这种情况下,可以使用三个键中的任何一个来访问您的字典:初始字母,中间字母和最终字母(或字母组合).每个密钥与通过语言发生频率排序的单词列表相关联. (我使用这种多键查找来提高纵横字谜生成应用程序的速度;可能有更好的方法,但是这个方法很容易实现.)
为了节省内存,您可以仅将多键方式应用于语言中的前几千个常用单词,然后只能使用较少常用单词的一种查找技术.
有几个在线列表的词频.
http://en.wiktionary.org/wiki/Wiktionary:Frequency_lists
如果你想得到想象,你也可以依靠在文本中的先前出现的频率.例如,如果“Byrd”出现多次,那么如果OCR引擎以低置信度得分报告“鸟”或“吟游诗人”,则可能是更好的选择.您可以将医学词典加载到内存中,只要在同一页面上统计学上不太可能出现医学术语 – 否则将医学术语从您的工作字典中删除,或至少指定合理的可能性. “假肢”是一个常识; “前列腺炎”较少.
如果您有图像处理技术(如去噪和形态操作)的经验,还可以在将图像传送到OCR引擎之前尝试预处理图像.在您的软件识别出OCR引擎表现不佳的单词或区域之后,图像处理也可以应用于选择区域.
某些字母/字母和字母/数字替换是常见的.数字0(零)可以与字母O,C表示O,8表示B,E表示F,P表示R等.如果找到一个低信心的词,或者如果有两个常见的单词可以匹配一个不完整的单词,那么ad hoc形状匹配规则可以帮助.例如,“bcth”可以匹配“both”或“bath”,但是对于许多字体(和上下文),“both”是更可能的匹配,因为“o”更类似于“c”形状.在长篇小说中,例如小说或杂志文章中的一段话,“浴”比“b8”更好.
最后,您可以编写一个插件或脚本来将结果传递给拼写检查引擎,该引擎检查名词动词协议和其他语法检查.这可能会遇到一些额外的错误.也许你可以尝试VBA Word或任何其他脚本/应用程序组合是受欢迎的这些天.