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

如何用Python将非表格/容器类PDF数据转为列格式表格

需求与解决方案:PDF检验结果转结构化表格

需求说明

将PDF中的检验结果数据转换为用|分隔的结构化格式,无需依赖AI模型,替代此前在R中通过识别大空格替换为|的实现方式,解决使用pdfplumber、PdfReader、pytesseract时遇到的结构化提取问题。

已尝试工具及问题

  • pdfplumber:仅能提取顶部结构化个人信息,无法提取靠大空格分隔的检验结果数据
    代码示例:

    import pandas as pd
    import pdfplumber
    
    path = r"my_pdf_file.pdf"
    
    data = []
    
    with pdfplumber.open(path) as pdf:
        pages = pdf.pages
        for p in pages:
                data.append(p.extract_tables())
    
    print(data)
    

    问题:提取结果仅包含患者信息,无法获取检验结果数据。

  • PdfReader:仅返回纯文本格式,无结构化表格数据
    代码示例:

    from pypdf import PdfReader
    reader = PdfReader(path)
    reader.pages[0].extract_text().splitlines()
    

    问题:输出为无结构的文本行,无法直接转为表格。

  • pytesseract:提取的文本中检验结果靠空格分隔,无法直接转为目标格式

解决方案:基于大空格识别的文本处理

通过识别文本中的连续多空格,将其替换为|,同时保留特殊说明行的原始格式,以下是Python实现:

实现步骤

  1. 用PdfReader或pytesseract提取PDF纯文本行
  2. 遍历每行内容,区分检验结果行与说明行
  3. 用正则表达式将连续多空格替换为|
  4. 直接保留说明类行的原始格式

代码实现

from pypdf import PdfReader
import re

def process_pdf_test_results(pdf_path):
    reader = PdfReader(pdf_path)
    processed_lines = []
    # 匹配连续2个及以上空格的正则规则
    multi_space_pattern = re.compile(r'\s{2,}')
    
    for page in reader.pages:
        text_lines = page.extract_text().splitlines()
        for line in text_lines:
            stripped_line = line.strip()
            if not stripped_line:
                continue
            # 简单判断:包含数字的行视为检验结果行
            if any(char.isdigit() for char in stripped_line):
                processed_line = multi_space_pattern.sub('|', stripped_line)
                processed_lines.append(processed_line)
            else:
                # 保留检测方法等说明类行
                processed_lines.append(stripped_line)
    return processed_lines

# 使用示例
path = r"my_pdf_file.pdf"
result = process_pdf_test_results(path)
for line in result:
    print(line)

预期输出示例

血尿素氮(BUN)|15|6-21|mg/dl
(检测方法:计算法)
血清肌酐|1.10|0.9-1.3|mg/dL

补充优化建议

  • 若pytesseract提取的文本存在断行、空格混乱问题,可先增加预处理步骤:合并连续的断行、去除无意义的单个空格
  • 可根据实际PDF格式,调整检验结果行的判断逻辑,比如增加对常见检验单位(mg/dl、mmol/L等)的匹配,提升识别准确率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:20:03