如何从OCR文本中提取段落分隔符?
我正在尝试从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(光学字符识别)工具中。