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

pdfminer提取PDF表格文本按列分组 无法解析指定列数据问题咨询

可行解决方法

方案1:换用专门的PDF表格提取工具(优先推荐)

pdfminer的extract_text接口默认按文本块纵向坐标排序输出,天生不适合提取结构化表格内容。推荐使用专门处理PDF表格的camelot库,可直接识别表格行列结构,精准提取所需两列。

  • 第一步:安装依赖
    pip install camelot-py[cv] openpyxl
  • 第二步:使用示例代码
import camelot
import pandas as pd

# 读取PDF中的所有表格
tables = camelot.read_pdf('Portfolio.pdf', pages='all')

# 合并所有表格的所需两列
result_df = pd.DataFrame(columns=['Security Name', 'Market Value in Deal CCY/Market Value in Fund CCY'])
for table in tables:
    # 取表格的第0行作为表头匹配,找到对应列的索引
    header = table.df.iloc[0].tolist()
    try:
        name_col = header.index('Security Name')
        value_col = header.index('Market Value in Deal CCY/Market Value in Fund CCY')
    except ValueError:
        # 跳过无对应表头的表格
        continue
    # 提取当前表格的目标列,跳过表头行
    temp_df = table.df.iloc[1:][[name_col, value_col]]
    temp_df.columns = result_df.columns
    result_df = pd.concat([result_df, temp_df], ignore_index=True)

# 导出到Excel
result_df.to_excel('提取结果.xlsx', index=False)

如果camelot识别效果不佳,可替换为tabula-py库,逻辑基本一致,安装命令为pip install tabula-py。

方案2:基于已提取的字符串正则解析

如果必须使用你当前已经提取到的PDFtext变量内容解析,可以通过两列内容的特征做正则匹配配对:

  • Security Name列内容特征:多为字母、数字、空格、特殊符号组成的证券名称,无纯数字/货币符号开头的特征
  • Market Value列内容特征:多为带千分位逗号、小数点的数字,部分带有货币符号前缀
    示例解析代码:
import re
import pandas as pd

# 匹配市值的正则规则,可根据实际内容调整
value_pattern = re.compile(r'^[A-Z]{0,3}\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$')

# 先把提取的文本按换行分割
lines = [line.strip() for line in PDFtext.split('\n') if line.strip()]
names = []
values = []
temp_name = []

for line in lines:
    if value_pattern.match(line):
        # 匹配到市值行,把之前攒的证券名合并
        if temp_name:
            names.append(' '.join(temp_name))
            values.append(line)
            temp_name = []
    else:
        # 未匹配到市值,判定为证券名内容(支持跨行的证券名)
        temp_name.append(line)

# 生成DataFrame导出Excel
result_df = pd.DataFrame({
    'Security Name': names,
    'Market Value in Deal CCY/Market Value in Fund CCY': values
})
result_df.to_excel('提取结果.xlsx', index=False)

注意正则规则需要根据你实际提取到的文本格式微调,适配你PDF中的市值格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:45:08