HOOOS

Python OCR实战:轻松将扫描PDF转换为可编辑Word文档

0 20 码农小李 Python OCRPDF to WordTesseract
Apple

你是否遇到过这样的情况:收到一份扫描版的PDF文档,想要编辑其中的内容,却发现无法直接选中文字? 这时候,OCR(Optical Character Recognition,光学字符识别)技术就能派上大用场。 本文将教你如何使用Python,结合OCR技术,将扫描版的PDF文档转换为可编辑的Word文档。

准备工作

在开始之前,我们需要安装一些必要的Python库:

  • pdf2image: 用于将PDF页面转换为图像。
  • PIL (Pillow): 用于处理图像。
  • pytesseract: Tesseract OCR引擎的Python封装。
  • python-docx: 用于创建和编辑Word文档。

你可以使用pip命令来安装这些库:

pip install pdf2image Pillow pytesseract python-docx

除了Python库,你还需要安装Tesseract OCR引擎。 Tesseract是一个开源的OCR引擎,pytesseract库只是它的一个Python接口。

  • Windows: 你可以从https://digi.bib.uni-mannheim.de/tesseract/ 下载安装包。 安装完成后,需要将Tesseract的安装路径添加到系统环境变量PATH中。

  • macOS: 你可以使用Homebrew来安装:

    brew install tesseract
    
  • Linux: 你可以使用包管理器来安装,例如在Ubuntu上:

    sudo apt update
    sudo apt install tesseract-ocr
    

代码实现

下面是一个完整的Python脚本,用于将扫描版的PDF文档转换为可编辑的Word文档:

from pdf2image import convert_from_path
from PIL import Image
import pytesseract
from docx import Document

# 配置Tesseract OCR引擎的路径 (请根据你的实际安装路径修改)
# 如果你已经将Tesseract添加到系统环境变量,可以省略这一步
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def pdf_to_word(pdf_path, output_path):
    """将扫描版PDF转换为可编辑Word文档。"""
    # 1. 将PDF转换为图像
    images = convert_from_path(pdf_path)

    # 2. 识别图像中的文字
    text = ""
    for i, image in enumerate(images):
        print(f"正在处理第 {i+1}/{len(images)} 页")
        text += pytesseract.image_to_string(image, lang='chi_sim') #  lang='chi_sim' 指定中文识别
        text += "\n\n"  # 每页之间添加空行,方便区分

    # 3. 创建Word文档并写入文字
    document = Document()
    document.add_paragraph(text)

    # 4. 保存Word文档
    document.save(output_path)

if __name__ == '__main__':
    pdf_file = 'input.pdf'  # 替换为你的PDF文件路径
    word_file = 'output.docx' # 替换为你想保存的Word文件路径
    pdf_to_word(pdf_file, word_file)
    print(f"转换完成,已保存为 {word_file}")

代码解释:

  1. 导入库: 导入所需的Python库。
  2. pdf_to_word 函数: 这个函数接收PDF文件路径和输出Word文件路径作为参数。
  3. PDF转换为图像: 使用pdf2image.convert_from_path函数将PDF的每一页转换为PIL图像对象。 convert_from_path函数还有很多可选参数,例如可以指定DPI(每英寸点数)来控制图像的质量,提高OCR的准确率。 例如: images = convert_from_path(pdf_path, dpi=300)
  4. OCR识别: 循环遍历每一张图像,使用pytesseract.image_to_string函数识别图像中的文字。 lang='chi_sim'参数指定使用简体中文进行识别。 如果你的PDF是英文的,可以设置为lang='eng'。 识别结果追加到text变量中。 可以在每页之间添加分隔符,方便后续处理。
  5. 创建Word文档: 使用python-docx库创建一个新的Word文档,并将识别出的文字添加到文档中。
  6. 保存Word文档: 将Word文档保存到指定的路径。
  7. 主程序: 在if __name__ == '__main__':中,指定输入PDF文件路径和输出Word文件路径,然后调用pdf_to_word函数进行转换。

使用方法

  1. 将代码保存为.py文件,例如pdf_to_word.py

  2. input.pdf替换为你需要转换的PDF文件路径。

  3. output.docx替换为你想要保存的Word文件路径。

  4. 运行脚本:

    python pdf_to_word.py
    

注意事项

  • Tesseract路径: 确保你已经正确配置了Tesseract OCR引擎的路径。 如果你已经将Tesseract添加到系统环境变量,可以注释掉pytesseract.pytesseract.tesseract_cmd这一行。
  • 语言: 根据PDF文档的语言,选择正确的lang参数。 例如,中文使用chi_sim,英文使用eng
  • 图像质量: 扫描质量会直接影响OCR的准确率。 如果OCR结果不理想,可以尝试提高PDF的扫描质量,或者在convert_from_path函数中指定更高的DPI。
  • 复杂布局: 对于包含复杂布局的PDF文档,OCR的准确率可能会受到影响。 你可以尝试使用更高级的OCR技术,或者手动校对转换后的Word文档。
  • 中文字体: 确保你的系统安装了中文字体,否则转换后的Word文档可能无法正确显示中文。

优化建议

  • 预处理图像: 在进行OCR之前,可以对图像进行预处理,例如灰度化、二值化、降噪等,以提高OCR的准确率。 可以使用PIL库来进行图像预处理。
  • 分块处理: 对于大型PDF文档,可以将其分割成多个小块,分别进行OCR,然后再将结果合并。 这样可以减少内存占用,提高处理效率。
  • 多线程/多进程: 可以使用多线程或多进程来并行处理PDF的每一页,以提高转换速度。
  • 使用GPU: 如果你的计算机配备了GPU,可以使用支持GPU加速的OCR引擎,例如CUDA版本的Tesseract,以进一步提高OCR速度。

总结

本文介绍了如何使用Python,结合pdf2imagePILpytesseractpython-docx库,将扫描版的PDF文档转换为可编辑的Word文档。 希望本文能够帮助你解决实际问题,提高工作效率。 记住,OCR的准确率受到多种因素的影响,需要根据实际情况进行调整和优化。 祝你使用愉快!

点评评价

captcha
健康