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

如何根据指定ID提取PDF文本中对应表格的label特征并生成DataFrame

解决方案

步骤1:安装依赖库

需要用到pandas处理DataFrame、BeautifulSoup解析HTML表格结构,先执行安装命令:

pip install pandas beautifulsoup4

步骤2:完整代码实现

保留你原有的PDF读取函数,新增提取label列的核心逻辑:

import pandas as pd
from bs4 import BeautifulSoup
import PyPDF2

# 原PDF读取函数
def read_pdfs(dictionary):
    dfs_names_text_dic = {}
    for pdf_file, name in dictionary.items():
        pdfFileObj = open(pdf_file, 'rb')
        pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
        output = []
        for i in range(pdfReader.numPages):
            pageObj = pdfReader.getPage(i)
            output.append(pageObj.extractText())
        dfs_names_text_dic[name] = output
        pdfFileObj.close()
    return dfs_names_text_dic

# 提取指定关键词后的label列内容
def extract_label_lists(pdf_text_dict, target_keys):
    result_rows = []
    # 遍历每个PDF的文本内容
    for _, page_texts in pdf_text_dict.items():
        full_text = '\n'.join(page_texts)  # 合并多页文本,避免关键词跨页
        # 逐个处理目标关键词
        for key in target_keys:
            key_mark = f"{key}:"
            key_pos = full_text.find(key_mark)
            if key_pos == -1:
                continue  # 当前PDF无该关键词,跳过
            
            # 截取当前关键词到下一个关键词之间的内容
            next_key_positions = []
            for other_key in target_keys:
                if other_key != key:
                    pos = full_text.find(f"{other_key}:", key_pos)
                    if pos != -1:
                        next_key_positions.append(pos)
            if next_key_positions:
                target_segment = full_text[key_pos:min(next_key_positions)]
            else:
                target_segment = full_text[key_pos:]
            
            # 解析HTML表格
            soup = BeautifulSoup(target_segment, 'html.parser')
            table = soup.find('table', class_='s-table')
            if not table:
                continue
            
            # 提取label列所有内容
            label_list = []
            for row in table.tbody.find_all('tr'):
                td = row.find_all('td')[0]
                label_list.append(td.get_text(strip=True))
            
            result_rows.append({'ID': key, 'label': label_list})
    
    return pd.DataFrame(result_rows)

步骤3:调用示例

假设你要处理两个PDF文件,目标关键词为ID1和type,执行以下代码:

# 定义PDF路径与对应名称
pdf_files = {
    "./sample1.pdf": "pdf_name1",
    "./sample2.pdf": "pdf_name2"
}

# 读取PDF文本
pdf_texts = read_pdfs(pdf_files)

# 指定要提取的关键词
target_keys = ['ID1', 'type']

# 生成目标DataFrame
final_df = extract_label_lists(pdf_texts, target_keys)

# 打印结果
print(final_df)

执行后会输出你需要的格式:

ID        label
0  ID1  [yes, no]
1  type [f1, f3]

关键细节说明

  • 跨页兼容:合并单PDF的多页文本,避免关键词或表格被分割在不同页面;
  • 精准截取:通过定位下一个关键词的位置,确保只处理当前关键词对应的表格;
  • 鲁棒性:加入关键词、表格不存在的判断,避免报错中断程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:07:37