You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Camelot提取无列分隔线PDF表格的问题求助

无列分隔线PDF表格提取问题及解决方法

我需要从一份无内部列分隔线的PDF中提取表格,文档截图如下:
无列分隔线的PDF表格

已尝试的操作及问题

  • 默认方式提取
    运行代码:
tables = camelot.read_pdf(filename)
print(tables[0].df)

提取到的内容正确,但所有数据被识别为单列,输出示例:

0  Credit  \nDate  \nReference No.  \nDescription...
1  09/10/2016  \n3194949206  \nOnline Banking tra...
2  09/20/2016  \n3194749206  \nOnline Banking tra...
3  09/20/2016  \n34236757678  \nCA TLR cash withd...
4  10/08/2016  \n5444  \nInterest  \n            ...

执行print(tables[0].df.shape)返回结果为(5, 1)。

  • 使用flavor='stream'提取
    运行代码:
tables = camelot.read_pdf(filename, flavor='stream')

提取结果错误,获取到了页面上的银行信息而非目标表格,输出示例:

0                                   1
0                  Bank of Domino                                    
1                                        Customer service information
2                  P.O. Box 15001                        1.888.DOMINO
3             Arlington, VA 18505  TDD/TTY users only: 1.800.288.4101
4                                          En Espanol: 1.800.688.6229
5  Account Number: 00000970987652                    bankofdomino.com
6                     ROBERT BELL                Bank of Domino, N.A.
7              HOLLOW WAY,APT 503                      P.O. Box 25125
8         SAN MESA, CA 92627-5125                   San Mesa,CA 33390

该DataFrame的形状为(9, 2)。

  • 指定列x坐标提取
    运行代码:
tables = camelot.read_pdf(filename, flavor='stream', columns="10, 120, 230, 470, 520, 650, 720, 800")

依旧提取到错误数据。

可行解决方法

针对无列分隔线的表格,需结合flavor='stream'、精准列坐标和表格区域限定来提取:

  1. 限定表格区域:先确定目标表格在PDF页面中的坐标范围(可通过PDF阅读器的坐标显示功能,或Camelot的可视化工具辅助),比如该表格的区域可设为table_areas=["10, 600, 850, 200"](需根据实际PDF调整数值),避免误提取页面其他内容。
  2. 精准测量列坐标:用截图工具查看表格各列的分隔像素位置,转换为PDF坐标(注意PDF的坐标原点在页面左下角),确保列坐标准确对应每列的边界。
  3. 最终代码示例:
tables = camelot.read_pdf(
    filename,
    flavor='stream',
    table_areas=["10, 600, 850, 200"],  # 限定目标表格的区域
    columns=["10, 120, 230, 470, 520, 650, 720, 800"]  # 精准列分隔坐标
)
print(tables[0].df)

如果上述方法效果不佳,还可以尝试:

  • 运行camelot.plot(tables[0], kind='contour')可视化表格检测区域,根据结果调整table_areas和columns参数。
  • 对PDF进行预处理,比如添加虚拟列分隔线或调整对比度,再进行提取。
  • 尝试其他表格提取工具(如tabula-py),同样使用区域和列坐标参数来定位表格。

内容的提问来源于stack exchange,提问作者aziz aon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:45:35