【问题标题】:Extracting paragraph breaks from OCR text?从 OCR 文本中提取分段符?
【发布时间】:2011-08-20 23:59:29
【问题描述】:

我正在尝试从 OCR 图像文本的输出中重新创建段落和缩进,如下所示:

输入(想象这是一张图片,不是输入的):

输出(有一些错误):

如您所见,没有保留段落分隔符或缩进。

使用 Python,我尝试了这样的方法,但它不起作用(失败太频繁):

代码

def smart_format(text):
  textList = text.split('\n')
  temp = ''

  averageLL = sum([len(line) for line in textList]) / len(textList)

  for line in textList:
    if (line.strip().endswith('!') or line.strip().endswith('.') or line.strip().endswith('?')) and not line.strip().endswith('-'):
      if averageLL - len(line) > 7:
        temp += '{{ paragraph }}' + line + '\n'
      else:
        temp += line + '\n'
    else:
      temp += line + '\n'

  return temp.replace(' -\n', '').replace('-\n', '').replace(' \n', '').replace('\n', ' ').replace('{{ paragraph }}', '\n\n      ')

有人对我如何重新创建此布局有任何建议吗?我正在处理旧书,所以我希望用 LaTeX 重新排版它们,因为创建 Python 脚本来做到这一点非常简单。

谢谢!

【问题讨论】:

  • 澄清一下,您是否只查看文本输出并猜测应该在哪里换段?还是有别的原因?
  • 我有源图像文件,但最好只处理输出的文本文件。我正在尝试在下面实现@Nick ODell 的答案,但我的 OpenCV 技能相当生疏......
  • 这不会是在段落的最后一行 before 而不是 after 中插入分节符,对吗?
  • 什么软件在做 OCR?有些可以配置为提供换行符。
  • @Mu Mind 好像是(捂脸)。让我们再次尝试运行它...

标签: python latex ocr tesseract


【解决方案1】:

您可以通过查看每个 5-10 像素水平切片的 entropy 将图像分成多个段落。虽然这通常用于从较大的图像或视频创建“有趣”的缩略图,但您也可以使用它来识别文本的存在或不存在。方法如下。

您将图像分成一堆水平条带,每个条带高 5-10 像素。如果条带不“忙”,那么您可以假设那里没有文本。您可以使用它来隔离段落。现在,您可以单独提取每个段落,并将其输入到您的 OCR 中。

【讨论】:

  • 嗯,这很酷。我会尝试这样做。我希望有一种方法可以在不分割图像的情况下做到这一点,但如果它有效,它就有效。
  • 好吧,我最终还是这样做了。由于行高几乎是恒定的,我扫描每一行的熵(6000px 大约需要 10 秒),提取行高,然后从那里扫描像素条。谢谢!
  • 没问题。很高兴知道您的问题已得到解决。
  • 链接已损坏.. 熵听起来像我在 tesseract 中寻找的东西,所以谢谢。
  • @Pogrindis 感谢您的提醒,固定链接。
【解决方案2】:

您可以尝试判断一行中的第一个单词是否可以轻松地放在前一行,表示有意换行,而不是纯粹寻找短行。除此之外(并像您在示例中那样密切注意标点符号),我认为唯一的其他选择是回到原始图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-08
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多