PDF 的光学字符识别 (python)

Optical Character Recognition on PDFs (python)

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

我的客户想要解析这些 pdf 以及其他(496 表、497 表)。问题是,即使使用相同类型的表格,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],然后将内容保存到 master 中的一个键对象,例如 county_object[checkpoint[1]] = contents[start_index:end_index].

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

谢谢

我认为“相同的”460 表格之间的区别是 由于一个正在扫描的垂直错位 以轻微的 CW 角度和另一个以轻微的 CCW 角度。 我希望你用 --deskew 调用, 但即便如此,也可能存在一些小的偏差,证明是麻烦的。

日期之间的垂直分隔似乎很大而且很稳固, 所以一个日期将以正确的方式先于另一个日期。 考虑更多地关注 mm/dd/yyyy 模式 而在文本锚点上更少。

您可以 obtain bound box coordinates 从 Tesseract OCR。 使用它们来消除日期歧义, 根据您对表格上显示较高或较低的内容的了解, 以及(大约)多少。