跳转到主要内容

使用pdfminer从PDF中提取表格数据的工具

项目描述

有没有一些表格数据被锁在PDF格式中?比如我在尊敬的当前工作地点的财务信息,看起来大致如下

example/ui-financials.png

Tabula 对于您需要提取的信息量来说不太可行?(我的情况是数千页。)这个包可能就是您所需要的。我应该注意的是,这是一个针对非常结构化数据的简单工具。Tabula可以处理比这个包更混乱的情况。单元格高度不对齐?文本换行?跨行单元格?您最好使用Tabula。计算机生成的报告PDF,迫切希望进入SQLite数据库?您来对地方了。

阅读UIUC财务报表

如果您来到这里是为了阅读UIUC的财务报表,有一个专门为您准备的页面在此

包概述

此包基于pdfminer,使其能够轻松地吸收PDF形式的计算机生成的表格数据,并生成类似JSON的行字典列表。基本工作流程如下

# identify top of table
top_y0 = find_attr_group_matching(
        ["Last Name", "First Name"], "y0", page_it.lines)

# extract text snippets making up table body
table_lines = [l for l in page_it.lines if l.y0 < top_y0]

# extract header text snippets
headers = [l for l in page_it.lines if abs(l.y0 - top_y0) < 5]

# extract table
rows = find_row_table(headers, table_lines)
rows = merge_overlapping_rows(rows, "y0", "y1")

这将使rows成为一个类似于以下的数据结构

{'Amount ': TL('           60.00 '), 'Last Name': TL('Lidstad'), 'Address': TL('62\xa0Mississippi\xa0River\xa0Blvd\xa0N'), 'First Name': TL('Dick\xa0&\xa0Peg'), 'City': TL('Saint\xa0Paul'), 'State': TL('MN'), 'Zip': TL('55104'), 'Occupation': TL('retired'), 'Date': TL('10/12/2012')}
{'Amount ': TL('           60.00 '), 'Last Name': TL('Strom'), 'Address': TL('1229\xa0Hague\xa0Ave'), 'First Name': TL('Pam'), 'City': TL('St.\xa0Paul'), 'State': TL('MN'), 'Zip': TL('55104'), 'Date': TL('9/12/2012')}
{'Amount ': TL('           60.00 '), 'Last Name': TL('Seeba'), 'Address': TL('1399\xa0Sheldon\xa0St'), 'First Name': TL('Louise\xa0&\xa0Paul'), 'City': TL('Saint\xa0Paul'), 'State': TL('MN'), 'Zip': TL('55108'), 'Occupation': TL('BOE'), 'Employer': TL('City\xa0of\xa0Saint\xa0Paul'), 'Date': TL('10/12/2012')}
{'Amount ': TL('           60.00 '), 'Last Name': TL('Schumacher\xa0/\xa0Bales'), 'First Name': TL('Douglas\xa0L.\xa0/\xa0Patricia\xa0948\xa0County\xa0Rd.\xa0D\xa0W'), 'City': TL('Saint\xa0Paul'), 'State': TL('MN'), 'Zip': TL('55126'), 'Date': TL('10/13/2012')}
{'Amount ': TL('           75.00 '), 'Last Name': TL('Abrams'), 'Address': TL('238\xa08th\xa0St\xa0east'), 'First Name': TL('Marjorie'), 'City': TL('St\xa0Paul'), 'State': TL('MN'), 'Zip': TL('55101'), 'Occupation': TL('Retired'), 'Employer': TL('Retired'), 'Date': TL('8/8/2012')}

请参阅此演示,它是一个最小且完全功能性的示例。在源代码有一些文档。此外,还有一些(文档较少)用于将获取的数据插入SQLite3数据库和用于使我财务信息可消化的完整脚本的工具。

该包仅适用于Python 3。使用以下命令安装

pip install pdf2data

https://github.com/inducer/pdf2data

版权所有 2019 Andreas Kloeckner

在MIT许可证下发布

关于支持,如果这个功能不能满足您的需求,您可能需要自己解决。我很乐意接受补丁,但很可能没有时间来解决您的具体用例。

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

pdf2data-2019.1.tar.gz (82.1 kB 查看哈希值)

上传时间

由以下支持