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