使用python处理pdf中的表格
Posted
技术标签:
【中文标题】使用python处理pdf中的表格【英文标题】:Working on tables in pdf using python 【发布时间】:2012-04-04 16:39:25 【问题描述】:我正在处理一个 pdf 文件。该 pdf 中有许多表格。 根据pdf中给出的表名,我想使用python从该表中获取数据。
我从事过 html、xlm 解析,但从未使用过 pdf。 谁能告诉我如何使用 python 从 pdf 中获取表格?
【问题讨论】:
【参考方案1】:我认为您需要一个 python 解析器库。最著名的是PDFMiner。
根据文档:
PDFMiner 是一个从 PDF 文档中提取信息的工具。与其他 PDF 相关工具不同,它完全专注于获取和分析文本数据。 PDFMiner 允许获取页面中文本的确切位置,以及字体或线条等其他信息。它包括一个 PDF 转换器,可以将 PDF 文件转换为其他文本格式(例如 HTML)。它有一个可扩展的 PDF 解析器,可用于文本分析以外的其他目的。
【讨论】:
【参考方案2】:这是一个非常复杂的问题,一般无法解决。
原因很简单,PDF 格式过于灵活。有些 PDF 只是位图(你必须自己做 OCR——显然不是我们这里的主题),有些是一堆字面上溢出的字母;这意味着通过解析 PDF 中的文本信息,您可以将单个字符放置在某些坐标上。在某些情况下,这些以有序的方式出现(逐行,从左到右),但在某些情况下,您会得到相当随机的分布,最常见的是和东西,还有特殊字符,不同字体的字符等. 可能会不合时宜。
唯一合适的方法是将所有字符根据它们的坐标放置在页面模型上,然后使用启发式方法找出行是什么。
我建议在开始之前查看您的 PDF 以及您想要解析的表格。也许它们一直都是相似的,并且可以很好地解析。
祝你好运!
【讨论】:
【参考方案3】:我最近遇到了类似的问题,写了一个库来帮忙解决:pdfquery.
PDFQuery 从 PDF 创建一个元素树(使用 pdfminer,加上一些额外的糖),并允许您使用 JQuery 或 XPath 选择器从页面中获取元素,主要基于元素的文本内容或位置。所以要解析一个表格,你首先要通过搜索标签来找到它在文档中的位置:
label = pdf.pq(':contains("Name of your table")')
left_corner = float(label.attr('x0'))
bottom_corner = float(label.attr('y0'))
然后您将继续搜索表格下方的行,直到搜索没有返回结果:
page = label.closest('LTPage')
while 1:
row = pdf.extract( [
('column_1', ':in_bbox("%s,%s,%s,%s")' % (left_corner+10, bottom_corner+40, left_corner+50, bottom_corner+20)),
('column_2', ':in_bbox("%s,%s,%s,%s")' % (left_corner+50, bottom_corner+40, left_corner+80, bottom_corner+20))
], page)
if not row['column_1'] or row['column_2']:
break
print "Got row:", matches
bottom_corner -= 20
这假设您的行高 20 点,第一行从标签下方 20 点开始,第一列从标签左边缘跨越 10 到 50 点,第二列从 50 到 80 点从标签的左边缘开始。
如果您有空白行或高度不同的行,这将变得更加烦人。如果表中的条目足够接近以使解析器认为它只是一行,则您可能还需要使用 merge_tags=None 选项来选择单个字符而不是单词。但希望这能让你更接近......
【讨论】:
【参考方案4】:您可以使用 Camelot 从 PDF 中提取表格数据并将其导出为您喜欢的格式。现在;支持 CSV、Excel、JSON 和 HTML。您可以查看文档:http://camelot-py.readthedocs.io。如果您可以发布指向您的 PDF 的链接,将会很有帮助。这是一个通用代码示例:
>>> import camelot
>>> tables = camelot.read_pdf('file.pdf')
>>> type(tables[0].df)
<class 'pandas.core.frame.DataFrame'>
>>> tables[0].to_csv('file.csv')
免责声明:我是图书馆的作者。
【讨论】:
以上是关于使用python处理pdf中的表格的主要内容,如果未能解决你的问题,请参考以下文章
用python解析pdf中的文本与表格pdfplumber的安装与使用
Python解析PDF表格——PDFPlumber vs Camelot