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

Python从巴西农业部门PDF正确提取表格数据的技术求助

解决PDF表格提取问题的Python方案

我之前也碰到过类似的官方报告PDF表格提取难题,尤其是这类排版复杂的农业文档,tabula-py偶尔会因为隐性边框、合并单元格或者不规则布局抽取不到准确内容。下面给你几个亲测有效的Python实现方案,按从易到难的顺序排列:

方案1:优化tabula-py参数(最快上手)

如果只是参数没调对,不用换工具就能解决问题。tabula的lattice和stream模式是关键,再加上精确的区域定位,能大幅提升准确率:

import tabula
import pandas as pd

# 先运行这个打开GUI工具,定位表格的坐标(top, left, bottom, right)
# tabula.gui()

# 用定位好的区域提取第一页的第一个表格
# lattice模式适合有实线边框的表格,stream适合靠文本对齐的无框表格
df_list = tabula.read_pdf(
    "你的本地PDF文件路径",
    pages=1,
    area=[[60, 20, 400, 580]],  # 替换成你用GUI得到的坐标
    lattice=True,  # 切换为stream如果表格没有明显边框
    multiple_tables=False
)

# 提取第一个表格并查看结果
df = df_list[0]
print(df.head())

关键提示:很多时候官方报告的表格会和页眉页脚重叠,用area参数精准框选表格范围,能避免把无关内容混进来。

方案2:用Camelot-py(专业表格提取工具)

Camelot是专门针对PDF表格的提取工具,比tabula更擅长处理复杂排版,还能生成解析报告帮你排查问题:

首先安装依赖(需要先装Ghostscript,Windows/macOS可以直接下载安装,Linux用包管理器安装):

pip install camelot-py[cv]

然后用代码提取:

import camelot

# 读取第一页的表格,flavor选'lattice'或'stream'
tables = camelot.read_pdf("你的本地PDF文件路径", pages='1', flavor='lattice')

# 查看解析结果的准确率
print(f"提取到{len(tables)}个表格,第一个表格准确率:{tables[0].parsing_report['accuracy']}%")

# 把第一个表格转为DataFrame
df = tables[0].df

# 生成可视化解析图,帮你调整参数
camelot.plot(tables[0], kind='grid').show()

进阶调整:如果解析准确率低,可以试试columns参数手动指定列的分隔x坐标,或者split_text=True拆分合并单元格里的多行文本。

方案3:pdfplumber精细化提取(终极解决方案)

如果前两个工具都搞不定,pdfplumber能让你完全控制提取过程,适合处理那些“非标准”表格:

import pdfplumber
import pandas as pd

with pdfplumber.open("你的本地PDF文件路径") as pdf:
    page = pdf.pages[0]
    # 手动裁剪表格区域(x0, top, x1, bottom),坐标可以用pdfplumber的可视化工具查看
    table_crop = page.crop((25, 70, 590, 410))
    
    # 提取表格,指定行列识别策略
    table_data = table_crop.extract_table(
        {
            "vertical_strategy": "lines",  # 靠竖线识别列
            "horizontal_strategy": "lines", # 靠横线识别行
            # 如果没有明显边框,手动指定列的x坐标:"explicit_vertical_lines": [100, 200, 300]
        }
    )

# 转为DataFrame,第一行作为表头
df = pd.DataFrame(table_data[1:], columns=table_data[0])
print(df)

额外提示:如果你的PDF是扫描件(图像格式),那得先做OCR:用pdf2image把PDF转成图片,再用pytesseract识别文本,之后再用上述工具提取表格。

内容的提问来源于stack exchange,提问作者Cristian Favaro Carriço

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:10