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

时间:2015-03-16 22:00:43

标签: ocr tesseract

我正在使用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进行猜测和测试,暴力方法,但如果有人已经解决了类似的问题,我将非常感谢有关修复的见解。它也可能是一些训练数据,但我不确切知道它是如何工作的。

3 个答案:

答案 0 :(得分:4)

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

tesseract input.tif output-filename --psm 6

  

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

     

要查看支持的网页分割模式的完整列表,请使用tesseract -h。这是从3.21开始的 [ed:excerpt only] 列表:

     
      
  1. 全自动页面分割,但没有OSD。 (默认)
  2.   
  3. 假设一列可变大小的文本。
  4.   
  5. 假设一个垂直对齐文本的统一块。
  6.   
  7. 假设一个统一的文本块。
  8.   

请参阅此处的示例:#using-different-page-segmentation-modes

答案 1 :(得分:1)

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

tesseract input.tif output-filename hocr

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

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

答案 2 :(得分:0)

您需要使用以下配置

#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' )