跳转至

用 Python 代码(Camelot)从 PDF 文件中提取表格

如何使用Camelot从 PDF 提取表并将表转换为Pandas

数据科学的一个标准原则是,更多的数据的存在导致培训一个更好的模型。数据可以以任何格式存在,数据收集和数据准备是模型开发管道的重要组成部分。任何案例研究所需的数据都可以以任何格式存在,数据科学家的任务是将数据以所需的格式进行数据预处理和管道的其他组件。

许多结构化/半结构化或非结构化数据可以以基于文本的 PDF 文档和图像格式以表格格式存在。开发自定义表提取模型需要大量的时间和精力。在本文中,我们将讨论如何使用开源库 Camelot,仅在 Python 代码的一行中从 PDF 文档中提取所有可用表。

什么是Camelot?

Camelot 是一个开源 Python 库,使开发人员能够从 PDF 文档中提取所有表并将它转换为Pandas数据框架格式。提取的表也可以以结构化形式导出,如 CSV、JSON、Excel 或其他格式,并可用于建模。

Camelot有一个限制,因为它只适用于基于文本的PDF,而不是扫描的文档。

Camelot是如何工作的?

Camelot使用两种表解析技术,即 Stream 和 Lattice 从 PDF 文档中提取表。您可以在两个表解析技术之间进行选择。

Stream:

流是一种解析技术,使用 PDFMiner 的功能将字符按空白或边距将字符分组到单词或句子中。流解析技术就像基于猜测的技术。

Lattice:

Lattice 是另一种分析技术,它不依赖于猜测,而是在表中找到水平和垂直线条来分析 PDF 文档中的多个表。Lattice只能通过在细胞之间划出界线的表进行解析。在 PDF 文档中查找表的莱迪思算法步骤是:

  1. 使用Ghostscript将 PDF 文档转换为图像。
  2. 应用基于 OpenCV 的形态转换,以获取转换后的图像中表的水平和垂直线段。
  3. 然后通过采取和线段(从点 2)和表像素的特性检测到线交叉口。
  4. 表边界线通过采取或线段(从点 2)及其像素的特性检测。
  5. 使用线交叉点和线段检测跨度单元或合并单元。
  6. 然后,对表的检测到的线段和边界进行缩放并映射到 PDF 文档,因为图像和 PDF 中的尺寸可能会有所不同。
  7. 将表的线段和边框置于适当的 (x, y) 坐标中后,会检测到表单元上的单词并映射到数据框架中。

要可视化上述每个步骤,请按照 Camelot 的高级使用文档页面 操作。

安装:

可以使用命令从 Pypl 安装Camelot和Ghostscript:

!pip install "camelot-py[cv]"
!apt install python3-tk ghostscript

安装后,可以使用 import camelot

用法:

导入camelot 模块后,使用 camelot.read_pdf() 函数读取 PDF 文件。

tables = camelot.read_pdf('table.pdf')

默认情况下,Camelot 仅分析 pdf 文档的第一页,为解析文档多页中的表, 请在read_pdf函数中使用参数 pages

# pass comma seperated page numbers or page ranges
tables = camelot.read_pdf('table.pdf', pages='1,2,3,5-7,8')

Camelot还可以从受密码保护的 PDF 文档中提取表,只需输入所需的密码即可。

tables = camelot.read_pdf('table.pdf', password='*******')

camelot.read_pdf 是Python代码的唯一一行,需要从PDF文件中提取所有表。所有表现在都以表列表格式提取,并可通过其索引访问。

#Access the ith table as Pandas Data frame
tables[i].df

要将表导出到所需的格式,您可以使用 camelot.export() 函数,并使用参数 f=’csv’, f=’excel’, f=’html’, f=’sqlite’

tables.export('name.csv', f='csv')

获取有关数据提取情况的解析报告或公制报告

1
2
3
tables[i].parsing_report
# Output: 
{'accuracy': 99.27, 'order': 1, 'page': 1, 'whitespace': 13.89}

代码

下图中使用的 PDF 文档是从中下载的。 表1

notebook

结论:

在本文中,我们讨论了如何从 PDF 文档中提取表并将它们转换为Pandas数据框架,这些数据框架可用于进一步建模。有各种开源库,包括塔Tabula, pdftables, pdf-table-extract, pdfplumber,提供类似Camelot的功能。

Camelot比它的替代品效果更好, 阅读 这篇文章 , 以获得Camelot和其他包的结果比较。

引用:

[1] Camelot文档 :https://camelot-py.readthedocs.io/en/master/

凡本网注明"来源:XXX "的文/图/视频等稿件,本网转载出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如涉及作品内容、版权和其它问题,请与本网联系,我们将在第一时间删除内容!
作者: Satyam Kumar
来源: https://towardsdatascience.com/extract-tables-from-pdf-file-in-a-single-line-of-python-code-5b572cd9fbe5