PDF上的光学字符识别(python)

时间:2020-09-07 17:51:31

标签: python ocr

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

我的客户想解析这些pdf以及其他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也会产生不同的结果,所以我的设置并不理想。有人可以为我指出正确的方向吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我认为“完全相同”的460表格之间的区别是 由于被扫描而导致的垂直未对准 以较小的CW角和另一个以较小的CCW角。 希望您使用--deskew进行调用, 但是即使这样,可能也会出现一些小的像差,这很麻烦。

日期之间的垂直分隔看起来很大且很稳健, 因此,一个日期将以适当的方式先于另一个日期。 考虑更多地关注mm / dd / yyyy模式 更少的文本锚点。

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

相关问题