如何从OCR文本中提取段落分隔符?

10 投票
2 回答
5723 浏览
提问于 2025-04-16 17:13

我正在尝试从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写个脚本来实现这一点相对简单。

谢谢!

2 个回答

1

你可以试着判断一行的第一个单词是否本来可以放在上一行,这样就能知道是不是故意换行,而不仅仅是看短行。除此之外(还有像你例子中那样仔细注意标点符号),我觉得唯一的其他选择就是回去查看原始的图片。

5

你可以通过查看每个5到10像素宽的水平条带的,把图片分成多个段落。虽然这种方法通常用来从大图或视频中制作“有趣”的缩略图,但你也可以用它来判断文本是否存在。下面是具体的做法。

首先,你把图片分成一条条水平的条带,每条高5到10像素。如果某条条带看起来不“繁忙”,那么就可以认为那里没有文本。这样你就可以把段落分开。接下来,你把每个段落单独拿出来,输入到你的OCR(光学字符识别)工具中。

撰写回答