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

具有表格或行的文档的Tesseract OCR文本顺序,ocr,tesseract,Ocr,Tesseract,我正在使用将扫描的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 正在生成

我正在使用将扫描的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

我开始阅读文档,并使用猜测和测试、蛮力方法,但如果有人已经解决了类似的问题,我将感谢对修复的深入了解。它也可能是一些训练数据,但我不知道具体是如何工作的。

尝试在一列中运行tesseract:

tesseract input.tif输出文件名--psm 6

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

要查看支持的页面分段模式的完整列表,请使用
tesseract-h
。以下是截至3.21的[编辑:仅摘录]列表:

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

  • 参见此处的示例:

    我知道这是一个老问题,但我一直在为类似问题而挣扎,并发现输出是解决方案。运行

    tesseract input.tif output-filename hocr
    
    将创建
    输出文件.hocr
    (基本上是HTML),为每个短语的边界框提供坐标。由您决定如何从这些数据(可能使用输入图像的维度)重建表


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

    您需要使用以下配置

    #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 input.tif output filename-psm 6”吗?请注意psm参数之前的单个hifen