如何使用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+视觉检测的路径,核心步骤如下:
- 将PDF逐页渲染为高分辨率图片
- 调用带版面分析功能的OCR引擎识别图片中所有文本块的内容、坐标范围
- 用图像处理工具检测每个文本块区域内,是否存在贯穿文本中部、长度覆盖文本区域绝大多数宽度的水平直线(即删除线的视觉特征),可通过边缘检测、霍夫直线变换实现,匹配对应阈值即可判定为带删除线的文本
- 汇总所有符合判定规则的文本即可
- 针对低质量扫描件,需要额外增加倾斜校正、二值化、去噪等图像预处理步骤,同时根据实际文件的特征调整直线检测的阈值,不存在100%适配所有扫描场景的通用参数。
内容的提问来源于stack exchange,提问作者Jayalekshmi R J
相关产品推荐
相关产品推荐

