具有表格或行的文档的 Tesseract OCR 文本顺序

Posted

技术标签:

【中文标题】具有表格或行的文档的 Tesseract OCR 文本顺序【英文标题】:Tesseract OCR text order for documents with tables or rows 【发布时间】:2015-05-19 05:04:37 【问题描述】:

我正在使用Tesseract OCR 将扫描的 PDF 转换为纯文本。总的来说,它非常有效,但我对文本的扫描顺序有疑问。当看起来更自然的方式是逐行扫描时,带有表格数据的文档似乎逐列向下扫描。一个非常小规模的例子是:

This is column A, row 1   This is column B, row 1    This is column C, row 1
This is column A, row 2   This is column B, row 2    This is column C, row 2

正在生成以下文本:

This is column A, row 1
This is column A, row 2
This is column B, row 1
This is column B, row 2
This is column C, row 1
This is column C, row 2

我开始阅读文档并使用parameters documented here 进行猜测和测试,但如果有人已经解决了类似的问题,我将不胜感激有关修复的见解。它也可能是一些训练数据,但我不知道它是如何工作的。

【问题讨论】:

【参考方案1】:

尝试在Page Segmentation Modes 的单列之一中运行 tesseract:

tesseract input.tif output-filename --psm 6

默认情况下,Tesseract 在分割图像时需要一页文本。如果您只是想对一个小区域进行 OCR,请尝试使用不同的分段模式,使用 -psm 参数。请注意,为剪裁过紧的文本添加白色边框也可能会有所帮助,请参阅问题 398。

要查看支持的页面分段模式的完整列表,请使用tesseract -h。这是截至 3.21 的 [ed: excerpt only] 列表:

    全自动页面分割,但没有 OSD。 (默认) 假设有一列大小可变的文本。 假设一个统一的垂直对齐文本块。 假设一个统一的文本块。

在此处查看示例:#using-different-page-segmentation-modes

【讨论】:

命令不应该是:“tesseract input.tif output-filename -psm 6”吗?注意 psm 参数前的单个 hifen【参考方案2】:

我知道这是一个老问题,但我一直在努力解决类似的问题,并发现hOCR 输出是解决方案。跑步

tesseract input.tif output-filename hocr

将创建output-file.hocr(基本上是html),为每个短语的边界框提供坐标。由您决定如何根据这些数据重建表格(可能使用输入图像的尺寸)。

与其他答案一样,指定一些特定的 page segmentation mode 可能有助于将表格中的短语适当分组,但坐标将提供所需的精确结果。

【讨论】:

【参考方案3】:

您需要使用以下配置

#Read Image
r = Image.open('8.png')
r.load()
#Converting inmage to text with preserving interline spaces
text = pytesseract.image_to_string(r,config='-c preserve_interword_spaces=1x1 --psm 
1 --oem 3' )

另一种解决方案是在文本周围绘制轮廓,将所有轮廓保存在单独的文件中,并根据它们的 x,y 坐标对它们进行排序。之后,您只需要从每个图像中提取文本并根据需要显示即可。

【讨论】:

以上是关于具有表格或行的文档的 Tesseract OCR 文本顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 tesseract 对文档中的多个列进行 OCR

使用 OCR 引擎 tesseract 无法理解提取文档中的坐标

显式设置用于 Tesseract-OCR 识别的字体

配置 Tesseract OCR 以读取相同字体大小的单词

是否有可能使用 .insetGrouped 样式删除表格视图中特定部分或行的插图?

[转]Tesseract-OCR学习系列