如何根据指定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
相关产品推荐
相关产品推荐

