Python – 使用 OCR(光学字符识别)读取 PDF 内容
PDF 代表便携式文档格式,是可以在设备之间交换的流行文件格式之一。由于 PDF 格式的文件包含无法更改的文本,因此它使用户能够更轻松地阅读并保持文件的格式稳定。尽管阅读 PDF 格式的文本很容易,但从中复制内容可能很耗时。为了使阅读过程更容易,使用了 OCR(光学字符识别)工具。
使用 OCR 读取 PDF 内容
在本文中,我们将讨论光学字符识别或 OCR,这是一种电子工具,可帮助将扫描的图像或手写文本转换为可编辑的计算机文件。Python 支持多个第三方库,这些库利用 OCR 技术从 PDF 中读取内容。
其中一个库是 Pytesseract。它是一个用于 Python 的光学字符识别 (OCR) 引擎,它在后台使用 Google 的 Tesseract-OCR。Pytesseract 可以识别超过 100 种语言(包括英语、印地语、阿拉伯语和中文等)的 PDF 文件中的文本。
光学字符识别
OCR 技术消除了手动阅读文档的过程并节省了时间。其应用不仅限于文档提取,还扩展到手写识别、身份证识别和身份验证。总之,考虑到 OCR 在处理图像或 PDF 文档时的各种用例,它是每个开发人员都应该熟悉的工具之一。
Python 提供了与许多市售 OCR 库(如 pytesseract)高效交互所需的灵活性,使我们的项目能够通过在大型数据集上扩展它们来实现简化运行,而无需人工干预。当我们将这种能力与自然语言处理 (NLP) 和对象检测等不同的机器学习概念相结合时,我们能够将计算机的程序化渲染能力推向何种程度就没有限制了。
使用 try 和 except 方法的 Python 程序,用于使用 OCR 读取 PDF 内容
输入以 PDF 格式给出,并命名为 sample.pdf,然后使用光学字符识别工具识别 PDF 文件中的文本,最后返回示例文本。为此,使用了 try 和 except 方法。
算法
步骤 1 - 导入所需的模块,如 os 和 pytesseract。
步骤 2 - 从 PIL 包中导入 image 模块
步骤 3 - 使用名为“convert_from_path”的函数将给定的 pdf 文件转换为图像
步骤 4 - 该函数定义了一个参数作为输入文件名。
步骤 5 - 初始化空列表
步骤 6 - try 方法将把 PDF 文件中的每个文本转换为文本。
步骤 7 - 对于 images 列表中的每个图像,为每个图像生成文件名并以 JPEG 格式保存。
步骤 8 - 使用 pytesseract 模块提取文本,然后将其添加到初始化的空列表中。
步骤 9 - 如果在执行上述步骤时出现任何异常,则打印该异常。
步骤 10 - 通过从输入文件名中删除扩展名并附加 .txt 扩展名来生成输出文件名。
步骤 11 - 将提取的文本写入输出文件并返回输出文件名。
步骤 12 - 使用输入文件名定义 pdf_file 变量。
步骤 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))
输入
输出
结论
在 21 世纪,对于拥有大量数据的组织来说,数据处理是最具挑战性的任务,随着数据科学和机器学习的发展,访问数据变得更加容易。最适合传输且无需任何更改的文件是 pdf,因此这种方法可以帮助人们将其转换为文本文件。