当处理文档时,有时候我们需要提取其中的文本信息。这可能是为了进行文本分析、搜索、或者其他各种自动化处理。在这篇博客中,我们将介绍如何使用 Python 中的几个库来实现 PDF 文档中文本的提取,以及如何利用 OCR 技术处理图像中的文本信息。
背景
在日常工作中,我们经常会遇到需要处理 PDF 文档中文本的需求。而有时候,这些 PDF 文档中的文本可能并不是可直接复制的,或者我们需要处理图像中的文本信息。这时候,OCR(光学字符识别)技术就显得尤为重要了。OCR 可以将图像中的文本信息提取出来,转换成计算机可处理的文本数据,为后续的分析和处理提供了便利。
工具与技术
在本文中,我们将使用以下工具和技术来实现 PDF 文档中文本的提取以及图像中文本的 OCR 处理:
- PyMuPDF(fitz): 一个 Python 库,用于处理 PDF 文档。我们将使用它来打开 PDF 文件,并将每一页转换为图像格式。
- Pillow(PIL): 一个 Python 图像处理库,用于处理图像。我们将使用它来读取图像文件。
- pytesseract: 一个 Python 包装器,用于 Google 的 Tesseract-OCR 引擎。我们将使用它来进行 OCR 处理,提取图像中的文本信息。
- OpenCV: 一个流行的开源计算机视觉库,用于图像处理。我们将使用它来读取图像文件,作为 pytesseract 的输入。
实现步骤
以下是我们将要实现的步骤:
- 使用 PyMuPDF 打开 PDF 文件,并遍历每一页。
- 将每一页转换为图像格式。
- 使用 Pillow 读取图像文件,并将其转换为 pytesseract 所需的格式。
- 使用 pytesseract 进行 OCR 处理,提取图像中的文本信息。
- 将提取的文本信息保存到文本文件中。
代码实现
from PIL import Image
import pytesseract
import fitz
import cv2
pdf_file_path = "OCR素材1:招友.pdf"
pdf_document = fitz.open(pdf_file_path)
scale_factor = 2
ocr_language = 'chi_sim'
for page_number in range(pdf_document.page_count):
page = pdf_document.load_page(page_number)
pix = page.get_pixmap(dpi=300)
img = Image.frombytes("RGB", (pix.width, pix.height), pix.samples)
image_file_name = f"page_{page_number + 1}.png"
img.save(image_file_name)
img1 = cv2.imread(f"page_{page_number + 1}.png", 0)
text = pytesseract.image_to_string(img1, lang=ocr_language, config='--psm 4')
text_file_name = f"page_{page_number + 1}.txt"
with open(text_file_name, "w", encoding="utf-8") as text_file:
text_file.write(text)
pdf_document.close()
结论
通过这篇博客,我们学习了如何使用 Python 中的几个库来实现 PDF 文档中文本的提取以及图像中文本的 OCR 处理。这些技术可以帮助我们更轻松地处理文档中的文本信息,为后续的分析和处理提供了便利。如果你有任何疑问或者建议,欢迎在下方留言讨论。