【Camelot】| 从 PDF 中抽取表格

官方文档:https://camelot-py.readthedocs.io/en/master/

系统:Windows10

环境:

Python 3.8.7

PyCharm 2020.3

安装

安装依赖

  1. Ghostscript

    下载地址

    选择相应的系统和版本进行下载与安装

  2. Tkinter

    ActiveTcl

    Python 3.2 版本之后自动安装 Tkinter。因此安装了相应的 Python 版本则无需安装 Tkinter

    可以通过以下代码验证

    import tkinter
    tkinter._test()

安装Camelot

  1. 在虚拟环境中使用 pip 进行安装

    pip install "camelot-py[cv]" 

    [cv] 不要省略

  2. 检查是否安装成功

    import camelot
    
    print(camelot.__version__)

除了使用 pip 的方式,还可以通过 conda 和 `源码` 进行安装

conda安装

conda install -c conda-forge camelot-py

源码安装

  1. 克隆 Github 仓库

    git clone https://www.github.com/camelot-dev/camelot
  2. 使用 pip 进行安装

    cd camelot
    pip install ".[cv]"

Quickstart

读取 PDF

1.检测表格

打开 PyCharm,新建一个项目,输入以下代码

import camelot
tables = camelot.read_pdf(r'D:/foo.pdf') 
print(tables)

导入 camelot 包

读取 D 盘下的 foo.pdf 文件,返回 TableList,它是 Table 对象的列表(List)

输出结果:<TableList n=1> 表明 TableList 中只有一个 Table 对象,即表明在这个 PDF 文件中检测出了一个表格

2.访问 Table 对象

通过下标,我们可以访问 TableList 中的 Table 对象。

print(tables[0])

输出结果:<Table shape=(13, 8)> 表明第一个 Table 对象是一个 13行 × 8列 的表格

3.解析报告

通过 parsing_report() 方法,打印出解析报告

print(tables[0].parsing_report)

输出结果:

{
‘accuracy’: 99.02,
‘whitespace’: 12.24,
‘order’: 1,
‘page’: 1
}

accuracy 值越大, whitespace 值越小时,表明正确抽出表格的成功率越高

4.DataFram 格式

通过 df() 方法,将 Table 对象转换为 DataFrame 后,我们就可以通过 Pandas 来处理表格。

tables[0].df

5.导出表格

1. 单表格导出

通过以下方法,可以将表格导出为对应的形式:

  • to_csv()
  • to_json()
  • to_execl()
  • to_html()
  • to_sqlite()
tables[0].to_csv('foo.csv')

执行上面这行程序,表格会以 csv 类型 存储在 项目根路径

2. 多表格导出

通过 export() 方法,进行多表格导出

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

文件类型参数可以设置为:f='json' , f='execl', f='html', f='sqlite'

当有非常多的表格需要导出时,可以加上 compress=True 参数,表格将会被打包成压缩文件导出。

指定页码

默认情况下,Cmaelot 只会抽取 PDF 第一页的表格,指定页码需要使用 pages 参数

camelot.read_pdf('your.pdf', pages='1,2,3')

pages 参数也可以设置为一个 页码范围

pages='1,4-10,20-30'
pages='1,4-10,20-end'

读取加密 PDF

使用 password 参数来读取加密 PDF

tables = camelot.read_pdf('foo.pdf', password='userpass')

由于 Camelot 并不支持所有的加密算法,如果出现了无法读取 PDF 的情况。建议先使用第三方工具 QPDF 进行解密。

高级使用

识别调试

调试的 plot() 方法依赖于 matplotlib ,我们需要安装依赖

pip install camlot-py[plot]

指定表格区域

References

[1] Camelot: PDF Table Extraction for Humans


【Camelot】| 从 PDF 中抽取表格
http://example.com/2021/01/08/Camelot/
作者
Guoguo
发布于
2021年1月8日
许可协议