5

我正在使用 tesseract 进行 OCR 并注意到,有时会发生分段错误,并且“显然”属于一起的字符被拆分为单独的字符串。

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

所以这是可用的数据:

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

1 回答 1

5

对于考虑字符和单词但不考虑边界框的OCR 后校正,一种常见的做法是

  • 使用有效词的字典,尽可能全面
  • 对照该词典检查 OCR 算法产生的单词
  • 如果在字典中找不到一个单词作为完全匹配的单词,尝试找到一个相似的单词

为了使这成为可能,您需要准备字典实现,以便能够搜索相似的字符串,也称为近似字符串匹配模糊字符串匹配

我知道的两种主要方法是

这些方法以及一般的近似字符串匹配方法(例如搜索尝试、q-gram 匹配和 n-gram 匹配)都固有地使用某种编辑距离度量,或多或少类似于Levenshtein distance。在分析了您正在处理的特定 OCR 错误之后,您可能需要调整编辑距离算法和您正在使用的其他资源以满足您的特定需求。这可能涉及以下内容:

  • 假设您的 OCR 程序经常混淆的字符之间的替换距离较小,或者在使用您正在处理的字体或样式呈现时看起来特别相似的字符
  • 通过将频繁出现的单词对放入字典中(除了单个单词)来考虑可能的切分错误
  • 确保您的字典包含尽可能多的命名实体和其他特定于域(或特定于语料库)的元素

此外,您可以尝试使用语法和/或统计语言模型,例如隐马尔可夫模型或条件随机场模型——类似于 POS 标注器使用的模型——在上下文中进行单词更正。

于 2012-04-18T15:41:35.630 回答