Python程序:从PDF提取文本

2025年1月5日 | 阅读6分钟

在信息科学、学术研究和商业智能等不同领域,从 PDF 报告中提取文本通常是一个先决条件。本指南将探讨使用 Python 从 PDF 文档中提取文本的各种技术,详细介绍 PyPDF2、pdfminer.six 和 PyMuPDF 等库。我们将深入研究这些库的安装、基本用法和高级功能。

PDF 和文本提取简介

PDF(可移植文档格式)是由 Adobe 于 1993 年创建的一种通用文档格式,用于以独立于应用程序、硬件和操作系统的方式嵌入文档。每个 PDF 文件都包含一个固定布局文档的完整表示,包括显示它所需的文本、字体、图形和其他信息。这一特性使得 PDF 非常适合在不同平台和设备之间共享和保存文档的完整性。

PDF 文本提取工具

为了应对这些挑战,Python 中已经开发了几个库,每个库都有其自身的优点和用例。其中最受欢迎的是 PyPDF2、pdfminer.six 和 PyMuPDF。这些库提供了从 PDF 中提取文本所需的功能,但它们在方法和功能上存在显著差异。

PyPDF2

PyPDF2 是一个纯 Python 库,提供读取和处理 PDF 文档的功能。它非常易于使用,适合合并、拆分和提取文本等基本 PDF 操作。PyPDF2 的主要功能包括读取 PDF 文档、提取元数据以及处理加密和解密。它的主要优点是易用性,并包含主要的 PDF 操作。但是,它缺乏高级文本提取功能,可能难以处理复杂的布局或非标准字体,因此不适合详细的文本提取任务。

pdfminer.six

pdfminer.six 是一个更强大、更灵活的库,专门用于从 PDF 文档中提取文本和信息。它为文本提取过程提供了精细的控制,非常适合处理复杂的布局和各种字体。其主要功能包括强大的文本提取、布局分析和字符级控制。pdfminer.six 的优势在于其执行详细文本提取和布局分析的能力,使其适用于复杂的 PDF 文档。但是,其高级功能伴随着更高的复杂性,这对于初学者来说更具挑战性。此外,其彻底的解析过程可能导致执行速度较慢,尤其是在处理大型文档时。

PyMuPDF

PyMuPDF,也称为 fitz,是一个快速轻量级的 PDF 文档处理库。它将速度与高级功能相结合,使其在文本提取和 PDF 处理方面非常灵活。PyMuPDF 的主要功能包括快速文本提取、处理复杂文档以及提取图像。其优点在于高性能以及处理高级文本和图像提取任务以及文档处理功能的能力。

用于 PDF 文本提取的 Python 库

有几个 Python 库可以帮助从 PDF 文档中提取文本。本指南将重点介绍三个流行的库:PyPDF2、pdfminer.six 和 PyMuPDF。

PyPDF2

PyPDF2 是一个纯 Python 库,可以处理和读取 PDF 文档。它易于使用和安装,是执行基本文本提取任务的不错选择。

安装

要安装 PyPDF2,您可以使用 pip

基本用法

以下是使用 PyPDF2 从 PDF 中提取文本的基本示例

输出

 
This website is developed to help students on various technologies such as Artificial Intelligence, Machine Learning, C, C++, Python, Java, PHP, HTML, CSS, JavaScript, jQuery, ReactJS, Node.js, AngularJS, Bootstrap, XML, SQL, PL/SQL, MySQL etc.
This website provides tutorials with examples, code snippets, and practical insights, making it suitable for both beginners and experienced developers.
There are also many interview questions which will help students to get placed in the companies.   

说明

导入库

  • import PyPDF2: 导入 PyPDF2 库。

定义函数

  • def extract_text_from_pdf(pdf_path): 定义一个用于从 PDF 中提取文本的函数。

打开 PDF 文档

  • with open(pdf_path, 'rb') as document: 以二进制读取模式打开 PDF 文件。

初始化 PdfReader

  • reader = PyPDF2.PdfReader(file): 创建一个 PdfReader 对象来读取 PDF。

初始化文本容器

  • text = "": 初始化一个空字符串来存储提取的文本。

循环遍历页面

  • for page_num in range(len(reader.pages)): 循环遍历 PDF 中的每一页。

从页面提取文本

  • page = reader.pages[page_num]: 获取当前页面对象。
  • text += page.extract_text(): 提取当前页面的文本并将其追加到文本字符串。

返回提取的文本

  • return text: 在处理完所有页面后返回收集到的文本。

示例用法

  • pdf_path = 'file:///C:/Users/JACKSON%20MICHAEL%20FARADAY/OneDrive/Documents/inf.pdf': 指定 PDF 文件的路径。
  • extracted_text = extract_text_from_pdf(pdf_path): 从 PDF 中提取文本。
  • print(extracted_text): 将提取的文本打印到控制台。

pdfminer.six

pdfminer.six 是一个强大的库,用于从 PDF 文档中提取文本、图像和元数据。与 PyPDF2 相比,它提供了对文本提取过程的更多控制。

安装

要安装 pdfminer.six,您可以使用 pip

基本用法

这是使用 pdfminer.six 提取文本的示例

输出

 
This website is developed to help students on various technologies such as Artificial Intelligence, Machine Learning, C, C++, Python, Java, PHP, HTML, CSS, JavaScript, jQuery, ReactJS, Node.js, AngularJS, Bootstrap, XML, SQL, PL/SQL, MySQL etc.
This website provides tutorials with examples, code snippets, and practical insights, making it suitable for both beginners and experienced developers.
There are also many interview questions which will help students to get placed in the companies.   

说明

导入库

  • from pdfminer.high_level import extract_text: 从 pdfminer.high_level 模块导入 extract_text 函数。

定义函数

  • def extract_text_from_pdf(pdf_path): 定义一个名为 extract_text_from_pdf 的函数,它接受一个参数 pdf_path。

从 PDF 中提取文本

  • return extract_text(pdf_path): 使用 extract_text 函数从指定 pdf_path 的 PDF 文件中提取文本并返回提取的文本。

示例用法

  • pdf_path = ' file:///C:/Users/JACKSON%20MICHAEL%20FARADAY/OneDrive/Documents/inf.pdf': 指定 PDF 文件的路径。
  • extracted_text = extract_text_from_pdf(pdf_path): 使用 pdf_path 调用 extract_text_from_pdf 函数,并将提取的文本存储在 extracted_text 变量中。
  • print(extracted_text): 将提取的文本打印到控制台。

PyMuPDF (fitz)

PyMuPDF,也称为 fitz,是一个轻量级 PDF 库,提供快速高效的文本提取功能。它可以处理包含图像、表格和各种字体样式的复杂 PDF。

安装

要安装 PyMuPDF,您可以使用 pip

基本用法

这是使用 PyMuPDF 提取文本的示例

输出

 
This website is developed to help students on various technologies such as Artificial Intelligence, Machine Learning, C, C++, Python, Java, PHP, HTML, CSS, JavaScript, jQuery, ReactJS, Node.js, AngularJS, Bootstrap, XML, SQL, PL/SQL, MySQL etc.
This website provides tutorials with examples, code snippets, and practical insights, making it suitable for both beginners and experienced developers.
There are also many interview questions which will help students to get placed in the companies.   

说明

导入库

  • import fitz: 导入 fitz 模块,它是 PyMuPDF 用于处理 PDF 文件的库。

定义函数

  • def extract_text_from_pdf(pdf_path): 定义一个名为 extract_text_from_pdf 的函数,它接受一个参数 pdf_path。

打开 PDF 文件

  • document = fitz.open(pdf_path): 以指定 pdf_path 打开 PDF 文件,并创建一个名为 document 的 Document 对象。

初始化文本持有器

  • text = "": 初始化一个空字符串来累积提取的文本。

循环遍历页面

  • for page_num in range(len(document)): 循环遍历 PDF 文件中的每一页。

加载并提取每页的文本

  • page = document.load_page(page_num): 按页码加载当前页面对象。
  • text += page.get_text(): 使用 get_text() 方法提取当前页面的文本,并将其附加到文本字符串。

返回提取的文本

  • return text: 在处理完所有页面后返回累积的文本。

示例用法

  • pdf_path = ' file:///C:/Users/JACKSON%20MICHAEL%20FARADAY/OneDrive/Documents/inf.pdf': 指定 PDF 文件的路径(' file:///C:/Users/JACKSON%20MICHAEL%20FARADAY/OneDrive/Documents/inf.pdf')。
  • extracted_text = extract_text_from_pdf(pdf_path): 使用 pdf_path 调用 extract_text_from_pdf 函数,并将提取的文本存储在 extracted_text 变量中。
  • print(extracted_text): 将提取的文本打印到控制台。