我正在使用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进行猜测和测试,暴力方法,但如果有人已经解决了类似的问题,我将非常感谢有关修复的见解。它也可能是一些训练数据,但我不确切知道它是如何工作的。
答案 0 :(得分:4)
尝试在单个列Page Segmentation Modes之一中运行tesseract:
tesseract input.tif output-filename --psm 6
默认情况下,Tesseract在分割图像时需要一页文本。如果您只是想要使用
-psm
参数尝试OCR小区域尝试不同的分段模式。请注意,在文本过于紧缩的情况下添加白色边框也会有所帮助,请参阅问题398.要查看支持的网页分割模式的完整列表,请使用
tesseract -h
。这是从3.21开始的 [ed:excerpt only] 列表:
- 全自动页面分割,但没有OSD。 (默认)
- 假设一列可变大小的文本。
- 假设一个垂直对齐文本的统一块。
- 假设一个统一的文本块。
醇>
答案 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' )