首页 > 解决方案 > PDF 上的光学字符识别 (python)

问题描述

我正在使用 ocrmypdf。我正在尝试对竞选财务 pdf 进行 ocr。示例 pdf:https ://apps1.lavote.net/camp/comm.cfm?&cid=11

我的客户想要解析这些 pdf 文件以及其他文件(表格 496s、表格 497s)。问题是,即使是相同类型的表格,ocr 结果也不一致。

例如,一份 pdf(表格 460)将产生以下结果:

Statement covers period

from 07/01/2005

through __11/30/2005

另一个相同类型的产生:

Statement covers period

01/01/2006

from

through 03/17/2006

请注意,在第一个中,第一个日期在 之后from,而在第二个中,第一个日期在 之前from。这会在尝试解析数据时产生复杂性。

我正在使用我所谓的“检查点”来解析类似类型的表单。这是一个例子:

checkpoints = [
        ['Statement covers period from', 'Date From'],
        ['through', 'Date Thru'],
        ['Date of election if applicable:', None],
        ['\n', None],
        ['\\NUMBER Treasurer(s)\n', 'ID'],
        ['\n', None],
        ['COMMITTEE NAME (OR CANDIDATE’S NAME IF NO COMMITTEE)\n\n', 'Committee / Candidate Name'],
        ['\n', None],
        ['NAME OF TREASURER\n\n', 'Name of Treasurer'],
        ['\n', None],
        ['NAME OF OFFICEHOLDER OR CANDIDATE\n\n', 'Name of Officeholder or Candidate'],
        ['\n', None],
        ['OFFICE SOUGHT OR HELD (INCLUDE LOCATION AND DISTRICT NUMBER IF APPLICABLE)\n\n', 'Office Sough or Held'],
        ['\n', None],
    ]

我遍历每个检查点,找到当前迭代的开始索引和结束(使用当前检查点和下一个)索引,[0] 而不是 [1],并将内容保存到主对象中的一个键中,例如county_object[checkpoint[1]] = contents[start_index:end_index].

此设置仅适用于我正在解析的 pdf。因为 ocrmypdf 即使对于相同的表单类型也会产生不同的结果,所以我的设置并不理想。有人可以指出我应该如何去做的正确方向吗?

谢谢

标签: pythonocr

解决方案


我想“相同”的 460 表格之间的区别是由于一个以轻微的 CW 角度扫描而另一个以轻微的 CCW 角度扫描而导致的垂直未对准。我希望您使用 调用--deskew,但即使使用 调用,也可能存在一些小偏差,这很麻烦。

日期之间的垂直间隔似乎很大且很牢固,因此一个日期将以适当的方式在另一个日期之前。考虑更多地关注 mm/dd/yyyy 模式,而不是文本锚。

您可以从 Tesseract OCR获取绑定框坐标。使用它们来消除日期的歧义,根据您对表格上更高或更低的知识以及(大约)多少的了解。


推荐阅读