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

非结构化PDF数据提取求助:Tabula失效,需获取艇级及出发时间

非结构化PDF数据提取求助:获取艇级和出发时间并导入Pandas DataFrame

我尝试从一份非结构化PDF中提取数据,目标是获取出发信息(艇级和出发时间),但因为数据不在结构化框内,Tabula这类工具无法正常工作。我希望把PDF里的信息导入Pandas DataFrame,当前使用的代码如下:

source = 'https://d3fpn4c9813ycf.cloudfront.net/pdfDocuments/WCH_2022_1/WCH_2022_1_ROWMSCULL1-L----------HEAT000100--_C77X5402.PDF'
pandas_options={'header': None}

data = tb.read_pdf(source, pages = 'all', pandas_options={'header': None})
data = data[0]
data = pd.DataFrame(data)
headers = data.iloc[0]

可行解决思路

1. OCR提取文本后正则解析

针对无结构化的PDF,先通过OCR转成纯文本,再用正则匹配目标信息:

  • 安装依赖:
    pip install pdf2image pytesseract pandas
    
  • 示例代码:
    from pdf2image import convert_from_path
    import pytesseract
    import pandas as pd
    import re
    
    # 将PDF转为图片并提取文本
    images = convert_from_path(source)
    full_text = ""
    for img in images:
        full_text += pytesseract.image_to_string(img)
    
    # 根据PDF实际文本格式调整正则规则,示例匹配类似"M1x - 10:05:00"的内容
    pattern = r"([A-Z0-9]+x?) - (\d{2}:\d{2}:\d{2})"
    matches = re.findall(pattern, full_text)
    
    # 转为DataFrame
    df = pd.DataFrame(matches, columns=["艇级", "出发时间"])
    print(df)
    

2. 用PyMuPDF直接提取文本

PyMuPDF(fitz)对非结构化PDF的文本提取精度更高:

  • 安装依赖:
    pip install pymupdf pandas
    
  • 示例代码:
    import fitz
    import pandas as pd
    import re
    
    doc = fitz.open(source)
    full_text = ""
    for page in doc:
        full_text += page.get_text()
    
    # 正则匹配目标内容,规则根据实际文本调整
    pattern = r"([A-Z0-9]+x?) - (\d{2}:\d{2}:\d{2})"
    matches = re.findall(pattern, full_text)
    df = pd.DataFrame(matches, columns=["艇级", "出发时间"])
    print(df)
    

3. 调整Tabula参数尝试

如果PDF存在隐性表格结构,可切换stream模式强制按行提取,再手动清洗:

import tabula as tb
import pandas as pd
import re

data = tb.read_pdf(source, pages='all', pandas_options={'header': None}, stream=True)
# 筛选包含时间或艇级关键词的行
filtered_rows = []
for row in data[0].values:
    if re.search(r"\d{2}:\d{2}:\d{2}", str(row)):
        filtered_rows.append(row)
df = pd.DataFrame(filtered_rows, columns=["艇级", "出发时间"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:14:59