PDF图像挖掘中结构化文本转Python字典的简洁实现方案咨询
简洁实现PDF挖掘文本的结构化字段提取
可以通过正则模式映射+批量匹配的方式替代零散的re.sub操作,代码更简洁易维护,同时自动处理字段缺失的情况:
核心思路
- 把需要提取的字段和对应的正则模式统一存入字典,方便管理和修改
- 初始化结果字典,所有字段默认设为
NULL - 对文本做一次全局预处理,消除多余换行和空格
- 遍历字段模式,批量匹配并更新结果字典
代码实现
import re def extract_structured_data(raw_text): # 定义字段与对应的正则匹配模式,兼容换行、空格等格式问题 field_patterns = { "Name": r"Name\s*:\s*(.*?)(?=\s*[A-Za-z']+:|$)", "Father/Husband Name": r"(Father's Name|Husband's Name)\s*:\s*(.*?)(?=\s*[A-Za-z']+:|$)", "House Number": r"House Number\s*:\s*(.*?)(?=\s*[A-Za-z']+:|$)", "Age": r"Age\s*:\s*(.*?)(?=\s*[A-Za-z']+:|$)", "Gender": r"Gender\s*:\s*(.*?)(?=\s*[A-Za-z']+:|$)" } # 初始化结果,所有字段默认设为NULL result = {field: "NULL" for field in field_patterns.keys()} # 全局预处理:合并多余的换行、空格,统一文本格式 cleaned_text = re.sub(r'\s+', ' ', raw_text).strip() # 批量匹配每个字段 for field, pattern in field_patterns.items(): match = re.search(pattern, cleaned_text, re.DOTALL) if match: # 针对Father/Husband Name字段,取第二个分组的值 value = match.group(2).strip() if field == "Father/Husband Name" else match.group(1).strip() # 若匹配到空值,仍设为NULL result[field] = value if value else "NULL" return result
使用示例
假设从PDF提取的原始文本如下:
Name : Alice Smith Husband's Name : Bob Smith House Number : 78 Age : Gender : Female
调用函数并输出结果:
sample_raw_text = """Name : Alice Smith Husband's Name : Bob Smith House Number : 78 Age : Gender : Female""" extracted_data = extract_structured_data(sample_raw_text) print(extracted_data)
输出结果:
{ 'Name': 'Alice Smith', 'Father/Husband Name': 'Bob Smith', 'House Number': '78', 'Age': 'NULL', 'Gender': 'Female' }
优势说明
- 字段规则集中管理,新增或修改字段只需调整
field_patterns字典,无需改动核心逻辑 - 全局预处理替代多次零散的
re.sub,减少重复操作 - 自动处理字段缺失、值为空的情况,统一返回
NULL
内容的提问来源于stack exchange,提问作者yawwml
相关产品推荐
相关产品推荐

