You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python或R从含文本、图片的PDF中提取表格?

从PDF中提取表格:Python & R 实用方案

嘿,我刚好处理过不少PDF表格提取的需求,给你分享两个主流语言的靠谱方案,亲测能解决大部分场景!

Python 实现

Python有几个专门处理PDF表格的库,这里推荐两个最常用的:

1. tabula-py

这个库对结构规整的表格支持很好,上手简单。

  • 先安装:
    pip install tabula-py
    
  • 示例代码:
    import tabula
    
    # 提取单页表格(比如第2页)
    df = tabula.read_pdf("你的PDF文件路径.pdf", pages=2)[0]
    # 提取多页表格(比如1-5页)
    dfs = tabula.read_pdf("你的PDF文件路径.pdf", pages="1-5")
    
    # 把提取到的表格保存为CSV
    tabula.convert_into("你的PDF文件路径.pdf", "输出文件.csv", output_format="csv", pages="all")
    

2. Camelot

如果你的表格比较复杂(比如有合并单元格、不规则布局),Camelot会更给力,它还能评估表格提取的质量。

  • 先安装(需要依赖OpenCV,所以带[cv]):
    pip install camelot-py[cv]
    
  • 示例代码:
    import camelot
    
    # 读取PDF并提取表格
    tables = camelot.read_pdf("你的PDF文件路径.pdf", pages="all")
    # 查看提取到的表格数量
    print(f"提取到 {len(tables)} 个表格")
    
    # 查看第一个表格的内容
    print(tables[0].df)
    # 保存为CSV
    tables.export("输出文件.csv", f="csv", compress=True)
    

R 实现

R里用tabulizer包就很方便,注意它依赖Java,所以先确保你的环境装了Java。

步骤:

  1. 安装包:
    install.packages("tabulizer")
    library(tabulizer)
    
  2. 提取表格:
    # 提取单页表格
    tab <- extract_tables("你的PDF文件路径.pdf", pages = 1)
    # 转换成数据框(方便后续处理)
    df <- as.data.frame(do.call(rbind, tab), stringsAsFactors = FALSE)
    
    # 提取多页表格并合并
    tabs <- extract_tables("你的PDF文件路径.pdf", pages = 1:5)
    combined_df <- do.call(rbind, lapply(tabs, function(x) as.data.frame(x, stringsAsFactors = FALSE)))
    

小提示

如果你的PDF是扫描件(图片型PDF),上面的方法直接用不了,得先做OCR(光学字符识别):

  • Python可以搭配pytesseract库,先把PDF转成图片,再OCR识别文字后提取表格;
  • R可以用tesseract包做类似的操作。

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

火山引擎 最新活动