如何使用边界矩形来纠正OCR分割错误?

5

我正在使用tesseract进行OCR,有时会出现分割错误,将“明显”属于一起的字符分成不同的字符串。

基于在一个文本行中找到的字符及其边界框列表和初步OCR结果,建议哪些字符属于一个单词,可以应用哪些算法来纠正分割错误或验证结果?

因此,这是可用的数据:

List<Word> words;
for(Word word : words){
    for(Char c : word.getChars()){
        char ch = c.getValue();
        Rectangle rect = c.getRect();
    }
}
1个回答

5

针对OCR后校正,考虑字符和单词,但不包括边界框的情况,一种常见做法是:

  • 使用尽可能全面的有效词典
  • 将OCR算法结果与该词典进行比对
  • 如果在词典中找不到完全匹配的单词,则尝试寻找一个相似的单词

为了实现这一点,需要准备好词典实现,使其能够搜索相似字符串,也称为近似字符串匹配模糊字符串匹配

我知道的两种主要方法是:

这些方法以及一般的近似字符串匹配方法(如搜索尝试、q-gram匹配和n-gram匹配)都固有地使用某种编辑距离度量,更或者类似于Levenshtein distance。在分析你正在处理的具体OCR错误之后,你可能想要调整编辑距离算法和其他你正在使用的资源以满足你的特定需求。这可能涉及以下事项:
- 假设字符间的替换距离更低,这些字符经常被你的OCR程序混淆,或者在你正在处理的字体或样式下看起来非常相似。 - 通过将经常出现的单词对放入字典中(除了单个单词),考虑可能的分割错误。 - 确保你的字典包含尽可能多的命名实体和其他领域特定(或语料库特定)元素。
此外,你可以尝试使用语法和/或统计语言模型,例如隐马尔可夫模型或条件随机场模型——类似于POS标注器使用的模型——以使单词更正在上下文中

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接