Camelot:从 PDF 提取表格的 Python 工具

处理 PDF 文件里的表格,是数据工作中最烦的环节之一。复制粘贴格式全乱,手动重建又太费时间。Camelot 是一个专门解决这个问题的 Python 库,目前在 GitHub 上有 3,750 个 Star。它的目标很明确:把 PDF 中的表格准确提取出来,转成可以直接分析的数据。

正文顶部截图

它能做什么

Camelot 的核心能力是从 PDF 中提取表格结构,输出为 pandas DataFrame。这意味着提取结果可以直接进入数据分析流程,不用再做格式转换。

它内置了五种解析器,对应不同的表格类型:

  • lattice:处理有线表格,通过检测网格线定位单元格
  • stream:处理无线表格,基于空白区域推断结构
  • network / hybrid:通过文本对齐关系识别表格
  • ml:基于 Table Transformer 的模型解析,适合复杂无线表格
  • auto:自动选择解析器

这个设计挺实用。PDF 表格的呈现方式千差万别,单一策略很难覆盖所有场景。Camelot 把选择权交给用户,不确定时用 auto 即可。

README区域截图

几个值得注意的功能

扫描版 PDF 也能处理。安装 camelot-py[ml,ocr] 后,模型负责识别表格结构,OCR 负责提取文字。这对处理扫描文档的场景很有用。

质量评分。每张提取的表格会附带 accuracy、whitespace、confidence 等指标,可以用 TableList.filter(...) 过滤掉低质量结果。批量处理时,这个机制能省去大量人工检查的时间。

导出格式丰富。CSV、JSON、Excel、HTML、Markdown、SQLite 都支持。提取完直接导出,不用自己写转换代码。

多页表格合并。跨页表格可以用 stack_contiguous() 拼接,处理长表格时比较方便。

轻量安装。默认使用 pdfium 后端,作为 Python wheel 直接安装,不需要系统级依赖。只有用到神经网络和 OCR 功能时才需要额外安装 PyTorch 和 OCR 组件。

用法示例

代码层面的使用很简单:

import camelot
tables = camelot.read_pdf('foo.pdf')
tables.export('foo.csv', f='csv')

也提供了命令行工具:camelot lattice file.pdf 这种形式,适合脚本化调用。

安装方式

支持 pip、uv、conda 三种安装渠道。核心包很轻量:

pip install camelot-py

需要模型解析和 OCR 功能时:

pip install "camelot-py[ml,ocr]"

文档提到 [ml][ocr] 是懒加载的,普通导入不会引入 PyTorch 和 OCR 依赖,这个设计对保持启动速度有帮助。

怎么选解析器

官方给了一个对照表,可以根据 PDF 类型直接选择:

PDF 类型 推荐解析器
有线表格 lattice(默认)
无线表格 networkstream
复杂无线表格 ml
扫描版 PDF ml + OCR
不确定 auto

ml 后端的一个特点是模型只负责表格结构识别,单元格文字仍然来自 PDF 本身的文本层(或 OCR 结果),不会凭空生成或修改数据。这个设计在数据准确性上比端到端生成更可靠。

总结

Camelot 是一个专注于单一功能的工具:把 PDF 里的表格干净地提取出来。它的优势在于解析策略丰富、输出格式灵活、安装门槛低。如果你的工作流中经常需要从 PDF 获取表格数据,值得了解一下。

工具:把 PDF 里的表格干净地提取出来。它的优势在于解析策略丰富、输出格式灵活、安装门槛低。如果你的工作流中经常需要从 PDF 获取表格数据,值得了解一下。

更多推荐