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

使用pdfplumber提取超300页PDF仅获每页首行数据的问题求助

问题排查与解决方案

可能原因分析

  • PDF表格的水平分隔线不连续,horizontal_strategy="lines"仅能识别完整实线,导致后续行被忽略
  • 裁剪区域box范围设置不准确,仅覆盖了第一行数据区域
  • 表格提取的默认参数未适配该PDF的布局细节

调整后的脚本

修改表格识别策略,同时优化裁剪区域和过滤逻辑:

import pandas as pd
import pdfplumber

pdf_file = "C:/Users/xxx/Downloads/aeronaves_inscritas.pdf"
# 微调裁剪区域,确保覆盖所有数据行(可根据实际页面调整数值)
box = (0, 120, 840, 560)

all_tables = []

with pdfplumber.open(pdf_file) as pdf:
    for page in pdf.pages:
        cropped_page = page.crop(bbox=box)
        # 改用"text"策略识别行,适配不连续的分隔线
        table = cropped_page.extract_table(table_settings={
            "vertical_strategy": "lines",
            "horizontal_strategy": "text",
            # 调整文本垂直偏差阈值,适配行间距
            "text_y_tolerance": 5
        })
        
        # 精准过滤空行(排除无有效内容的行)
        filtered_table = [
            row for row in table 
            if row and any(cell.strip() for cell in row if cell is not None)
        ]
        
        all_tables.extend(filtered_table)

df = pd.DataFrame(all_tables)
# 可选:手动设置表头(根据表格实际列名调整)
# df.columns = ["注册号", "机型", "运营方", ...]
print(df.head())
df.to_csv('extracted_tables.csv', index=False)

关键调整说明

  • 替换horizontal_strategy为"text":该策略通过文本块的垂直位置识别行,适配分隔线不完整的PDF表格
  • 优化空行过滤逻辑:避免误删有效数据行,同时彻底排除无内容的空行
  • 微调裁剪区域:确保完整覆盖每页的所有数据行(可通过cropped_page.to_image()查看裁剪范围是否正确)

额外排查步骤

  • 打印单页裁剪后的图片(cropped_page.to_image().save("test_crop.png")),确认裁剪范围是否包含所有行
  • 调整text_y_tolerance数值:数值越大,允许文本块的垂直偏差越大,可适配行间距较大的表格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:25:16