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

如何使用Python识别并提取PDF文件中的删除线文本

Python提取PDF删除线文本的实现问题

需求描述

需要从PDF文件中仅提取带删除线格式的文本。现有实现代码在自制的可编辑PDF示例上可正常运行,但在判定为扫描件的PDF上无法生效,咨询是否存在Python实现该需求的标准方案。

现有实现代码

from pydoc import doc
from pdf2docx import parse
from typing import Tuple
from docx import Document

def convert_pdf2docx(input_file: str, output_file: str, pages: Tuple = None):
    """Converts pdf to docx"""
    if pages:
        pages = [int(i) for i in list(pages) if i.isnumeric()]
    result = parse(pdf_file=input_file,
                   docx_with_path=output_file, pages=pages)
    summary = {
        "File": input_file, "Pages": str(pages), "Output File": output_file
    }

if __name__ == "__main__":
    pdf_file = 'D:/AWS practice/sample_striken_out.pdf'
    doc_file = 'D:/AWS practice/sample_striken_out.docx'
    convert_pdf2docx(pdf_file, doc_file)
    document = Document(doc_file)
    with open('D:/AWS practice/sample_striken_out.txt', 'w') as f:
        for p in document.paragraphs:
            for run in p.runs:
                if not run.font.strike:
                    f.write(run.text)
                    print(run.text)
            f.write('\n')

现有方案问题

当前实现逻辑为先将PDF转换为DOCX格式,再识别DOCX中的删除线文本。该代码在普通可编辑示例文件上运行正常,但无法适配扫描PDF:PDF可正常转换为DOCX,但无法检测到文件内的删除线格式。

原因说明与可行方案

  • 现有方案仅能处理原生可编辑PDF:这类PDF内部存储了文本内容、坐标、字体样式(含删除线标记)的结构化数据,pdf2docx 可直接读取样式属性映射到DOCX的字体格式属性,因此可以正常识别。
  • 扫描件PDF本质是逐页内嵌的图片集合,内部不存在任何文本、字体样式的结构化元数据。现有流程转换得到的DOCX只是插入了整页扫描图片,不存在带字体属性的文本段,自然无法检测到删除线格式。
  • 目前没有适配所有PDF类型的一键式标准实现,针对扫描件需要走OCR+视觉检测的路径,核心步骤如下:
    1. 将PDF逐页渲染为高分辨率图片
    2. 调用带版面分析功能的OCR引擎识别图片中所有文本块的内容、坐标范围
    3. 用图像处理工具检测每个文本块区域内,是否存在贯穿文本中部、长度覆盖文本区域绝大多数宽度的水平直线(即删除线的视觉特征),可通过边缘检测、霍夫直线变换实现,匹配对应阈值即可判定为带删除线的文本
    4. 汇总所有符合判定规则的文本即可
  • 针对低质量扫描件,需要额外增加倾斜校正、二值化、去噪等图像预处理步骤,同时根据实际文件的特征调整直线检测的阈值,不存在100%适配所有扫描场景的通用参数。

内容的提问来源于stack exchange,提问作者Jayalekshmi R J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:30:52