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

如何用Python提取PDF单行表格数据?Camelot提取失败求方案

解决Camelot无法提取PDF单行表格的问题

Camelot默认的lattice模式依赖完整表格边框识别,单行表格如果边框不完整或缺失,很容易被漏检。以下是几个实用解决办法:

1. 切换到Stream模式提取

Stream模式基于文本间距识别表格,适合无框或边框不全的单行表格,同时可调整行容差参数避免单行被忽略:

import camelot

file = 'IR-E-U-0306.pdf'
# 使用stream模式,row_tol控制行合并的容差(值越大,越容易将邻近文本识别为同一行)
tables = camelot.read_pdf(file, pages="all", flavor='stream', row_tol=10)

# 遍历所有表格,找到目标单行表格
for idx, table in enumerate(tables):
    print(f"表格 {idx} 内容:")
    print(table.df)
    print("---")

2. 指定表格区域精准提取

如果目标单行表格在页面中的位置固定,可以通过指定坐标区域强制提取:

  • 用PDF阅读器查看目标表格的坐标(Camelot以页面左下角为原点,坐标格式为x1,y1,x2,y2)
  • 在代码中添加table_regions参数定位:
# 示例:假设目标单行表格在第6页,坐标为(50, 100, 750, 150),需根据实际调整
tables = camelot.read_pdf(file, pages="6", flavor='stream', table_regions=['50,100,750,150'])
print(tables[0].df)

3. 结合Tabula-Py补充提取

如果Camelot仍无法识别,可尝试用Tabula-Py作为补充,它对部分不规则单行表格的支持更友好:

import tabula

# 提取第6页的所有表格
dfs = tabula.read_pdf(file, pages="6", multiple_tables=True)

# 筛选出单行表格
for df in dfs:
    if len(df) == 1:
        print("找到单行表格:")
        print(df)

关键参数说明

  • flavor='stream':切换到文本间距识别模式,替代默认的边框识别
  • row_tol:控制行的合并容差,值越大,越容易将垂直方向邻近的文本判定为同一行
  • table_regions:限定提取的区域,减少页面其他元素的干扰

内容的提问来源于stack exchange,提问作者Anuva Goyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:35:35