我有一个使用OCR从图像中提取的文本。某些单词在文本中无法正确识别,如下所示:
'DRNE 0F OFF1CE RESTAURAUT,QNE THO ...'
从视觉上看,某些字符很容易与其他字符混合:1-> I,O-> D-> Q,H-> W,U-> N等。
问题:除了Levenshtein距离之类的标准算法外,还有Java或Python库实现了OCR专用算法,该算法可以帮助将单词与预定义词典进行比较并给出分数,并考虑到可能的OCR角色混搭?
答案 0 :(得分:1)
我不知道任何特定于OCR的内容,但是您可以使用Biopython来完成此工作,因为使用得分为每个字符与其他字符相似度的矩阵将一个字符串与另一个字符串进行比较的基本问题非常严重在生物信息学中很常见。我们称其为序列比对问题。
看看Biopython提供的pairwise2 module;您将能够使用具有所有成对字符相似性的字典将每个输入词与每个字典词与pairwise2.align.globaldx
进行比较。那里也有为删除/插入的字符评分的功能。
计算成对字符相似度是您自己需要做的事情,可能是通过渲染所选字体中的每个字符并比较图像,或者也许只是通过评估哪些字符与您相似来手动进行。您还可以查看this other SO answer,其中根据笔画的有无将字符分为几类。
如果您想要比O(input * dictionary)更好的东西,则必须从蛮力比较切换到某种基于种子匹配的算法。例如,如果您假设总是有2个字符的完美匹配,则可以索引包含每个length-2字符串的单词的字典,并仅将输入单词与共享length-2字符串的字典单词进行比较和他们在一起。