Python – 使用OCR读取PDF内容

Python – 使用OCR读取PDF内容

PDF代表便携式文档格式,是一种流行的文件格式,可在设备之间交换。由于PDF格式的文件包含无法更改的文本,因此用户可更轻松地阅读和稳定地处理文件格式。尽管PDF格式的文本阅读更容易,但从中复制内容可能会耗费时间。为了简化阅读过程,使用OCR(光学字符识别)工具。

使用OCR读取PDF内容

在本文中,我们将介绍光学字符识别(OCR)或OCR,这是一种电子工具,可帮助将扫描的图像或手写文本转换为可编辑的计算机文件。 Python支持多个第三方库,这些库利用OCR技术从PDF中读取内容。

其中一个库是Pytesseract。它是Python的光学字符识别(OCR)引擎,底层使用了Google的Tesseract-OCR。 Pytesseract可识别100多种语言(包括英语、印地语、阿拉伯语和中文等)的PDF文件中的文本。

光学字符识别:

OCR技术消除了对文档的手动阅读,并节省了时间。它的应用不仅限于文档提取,还可以扩展到手写识别、身份证识别和身份验证等领域。 总之,鉴于其在处理图像或PDF文档时的各种用途,OCR是每个开发人员都应熟悉的工具之一。

Python提供了与许多商业可用的OCR库(如pytesseract)有效交互所需的灵活性,通过在大型数据集上扩展项目而无需人工干预,使我们的项目运行更加流畅。当将此能力与自然语言处理(NLP)和目标检测等不同的机器学习概念结合使用时,将计算机程序的渲染能力推向无限。

使用try和except方法的Python程序读取PDF内容的OCR

输入以PDF形式给出,并命名为sample.pdf,然后使用光学字符识别工具识别PDF文件中的文本,最后返回示例文本。为此,使用了try和except方法。

算法

  • Step 1 - 导入所需模块,如os和pytesseract。

  • Step 2 - 从PIL软件包中导入图像模块。

  • Step 3 - 使用名为”convert_from_path”的函数将给定的pdf文件转换为图像。

  • Step 4 - 定义带有一个参数的函数,参数为输入文件名。

  • Step 5 - 初始化一个空列表。

  • Step 6 - 尝试将PDF文件中的每个文本转换为文本。

  • Step 7 - 对于图像列表中的每个图像,为每个图像生成一个文件名,并将其以JPEG格式保存。

  • Step 8 - 使用pytesseract模块提取文本,然后将其添加到初始化的空列表中。

  • Step 9 - 如果在执行上述步骤时出现任何异常,则打印出异常。

  • Step 10 - 通过删除输入文件名的扩展名并追加.txt扩展名来生成输出文件名。

  • Step 11 - 将提取的文本写入输出文件并返回输出文件名。

  • Step 12 - 使用输入文件名定义pdf_file变量。

  • Step 13 - 使用pdf_file变量作为输入调用read_pdf函数,并打印其输出。

示例

# Importing the os module to perform file operations
import os  
# Importing the pytesseract module to extract text from images
import pytesseract as tess  
# Importing the Image module from the PIL package to work with images
from PIL import Image  
# Importing the convert_from_path function from the pdf2image module to convert PDF files to images
from pdf2image import convert_from_path  

#This function takes a PDF file name as input and returns the name of the text file that contains the extracted text.
def read_pdf(file_name):   
    # Store all pages of one file here:
    pages = []

    try:
        # Convert the PDF file to a list of PIL images:
        images = convert_from_path(file_name)  

        # Extract text from each image:
        for i, image in enumerate(images):
          # Generating filename for each image
            filename = "page_" + str(i) + "_" + os.path.basename(file_name) + ".jpeg"  
            image.save(filename, "JPEG")  
          # Saving each image as JPEG
            text = tess.image_to_string(Image.open(filename))  # Extracting text from each image using pytesseract
            pages.append(text)  
          # Appending extracted text to pages list

    except Exception as e:
        print(str(e))

    # Write the extracted text to a file:
    output_file_name = os.path.splitext(file_name)[0] + ".txt"  # Generating output file name
    with open(output_file_name, "w") as f:
        f.write("\n".join(pages))  
      # Writing extracted text to output file

    return output_file_name

#print function returns the final converted text 
pdf_file = "sample.pdf"
print(read_pdf(pdf_file))

输入

Python - 使用OCR读取PDF内容

输出

Python - 使用OCR读取PDF内容

结论

在21世纪,处理数据是对具有大量数据的组织来说最具挑战性的任务,并且随着数据科学和机器学习的发展,访问数据变得更加容易。最受欢迎的传输文件且不进行任何更改的文件是pdf文件,因此这种方法可以帮助人们将其转换为文本文件。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程