首页/AI/AI 应用速查/表格抽取:从版式到结构化数据

表格抽取:从版式到结构化数据

表格是知识库里最容易丢失的信息:规则抽表(pdfplumber/camelot)适合边框清晰的表,无边框/复杂表用版面模型或 LLM 兜底,产出统一转 Markdown 或 CSV 再入库。

AI 应用速查AI更新于 2026-10-13

表格抽取是什么

表格是知识库里最容易丢信息的部分:正文可以按段落检索,表格一旦被当纯文本拍平,行列对应关系就没了,问「第三列的金额是多少」这类问题必然答错。实践中有三条路线:规则抽取(pdfplumber、camelot 一类)适合有线框、版式规整的 PDF;版面模型适合复杂版面与扫描件;少量疑难表格用模型兜底抽取。三条路的产出统一转成 Markdown 或 CSV 再入库,保留表头语义,检索命中后模型才能按行列理解。

基本信息

规则抽取pdfplumber、camelot,适合有线框规整表
版面模型复杂版面与扫描件,需部署模型
模型兜底少量疑难表格,逐表调用成本较高
统一产出Markdown 或 CSV,必须保留表头
易失点跨页表、合并单元格、多级表头
验收方式抽检行列对应关系与关键数值

典型使用场景

  • 财务报表入库:把利润表、资产负债表的行列完整保留
  • 产品参数表:抽取规格与型号对应关系供检索问答
  • 制度附表:收费标准、假期天数等结构化查询
  • 合同附件:报价明细与交付清单的字段化提取
  • 扫描件表格:先 OCR 再按版面区域重建表格
  • 批量文档处理:统一转 Markdown 后进入同一套切分流程

pdfplumber 抽表

pdfplumber 抽表
import pdfplumber
# 打开 PDF 逐页抽取表格,注意跨页表需要按表头续接
with pdfplumber.open("report.pdf") as pdf:
    for page_no, page in enumerate(pdf.pages, start=1):
        for table in page.extract_tables():
            for row in table:
                # 单元格内的换行符会破坏 Markdown 表格,先压平
                cells = [(c or "").replace("\n", " ").strip() for c in row]
                print(page_no, cells)
# 抽完先抽检:行列数量是否与原件一致,关键数值能否对上

三条抽取路线对比

路线适用代价与注意
规则抽取有线框、版式规整的 PDF遇到合并单元格与无线框表容易拆错行列
版面模型复杂版面与扫描件需要部署与调参,工程投入更大
模型兜底少量疑难表格逐表调用成本高,且可能漏行或编造数值
人工修复关键表格与少量数据最可靠,但无法规模化,适合作为兜底
表格转 Markdown 保留表头语义,检索命中后模型能直接按行列理解,效果远好于把单元格拍成一行文本。
用模型抽取表格时务必核对数值:模型会在缺行时补齐、把空单元格填成看似合理的内容,金额与比例字段必须与原件对照。

易错点

  • 跨页表格不做拼接:下半截丢失,查询只答出一半数据
  • 合并单元格直接展开:行列错位,字段与取值系统性错配
  • 把表格拍成纯文本入库:行列关系消失,按列提问必错
  • 模型抽取结果不核对:缺行被自动补齐,产出看似完整却不可信
  • 表头被当作普通行切分:每个块都缺少列含义,检索后无法解释数值

数据来源与参考

  • pdfplumber 官方文档 github.com/jsvine/pdfplumber;camelot 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌