如何在 Python 中处理 PDF 文件中的文本?

PDF 是共享文本的常见方式。PDF代表便携式文档格式并使用.pdf文件扩展名它是由 Adob​​e Systems 于 20 世纪 90 年代初创建的。

使用 python 阅读 PDF 文档可以帮助您自动执行各种任务。

在本教程中,我们将学习如何使用Python 从 PDF 文件中提取文本

让我们开始吧。

使用 Python 从 PDF 文件中读取和提取文本

出于本教程的目的,我们将创建一个包含 2 页的示例 PDF。您可以使用任何文字处理器(例如 Microsoft Word 或 Google Docs)执行此操作,并将文件另存为 PDF。

第 1 页的文字:

Hello World.
This is a sample PDF with 2 pages.
This is the first page.

第 2 页的文字:

This is the text on Page 2.

使用 PyPDF2 提取 PDF 文本

您可以使用PyPDF2从 PDF 中提取文本。让我们看看它是如何工作的。

1.安装包

要在系统上安装 PyPDF2,请在终端上输入以下命令。您可以阅读有关pip 包管理器的更多信息。

pip install pypdf2
pypdf

2.导入PyPDF2

打开一个新的 python 笔记本并开始导入 PyPDF2。

import PyPDF2

3. 以读取二进制模式打开 PDF

首先使用以下代码行以读取二进制模式打开 PDF :

pdf = open('sample_pdf.pdf', 'rb')

这将为我们的 PDF 创建一个PdfFileReader 对象并将其存储到变量“ pdf”中。

4.使用PyPDF2.PdfFileReader()读取文本

现在您可以使用PyPDF2 中的PdfFileReader () 方法来读取文件。

pdfReader = PyPDF2.PdfFileReader(pdf)

要从 PDF 第一页获取文本,请使用以下代码行:

page_one = pdfReader.getPage(0)
print(page_one.extractText())

我们得到的输出为:

Hello World.
!This is a sample PDF with 2 pages. !This is the first page. !
 
Process finished with exit code 0

这里我们使用 getPage 方法将页面存储为对象。然后我们使用 extractText() 方法从页面对象中获取文本。

我们得到的文本是String 类型。

类似地,要从 PDF 中获取第二页,请使用:

page_one = pdfReader.getPage(1)
print(page_one.extractText())

我们得到的输出为:

This is the text on Page 2.

使用 PyPDF2 读取 PDF 文本的完整代码

本节的完整代码如下:

import PyPDF2
pdf = open('sample_pdf.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdf)
page_one = pdfReader.getPage(0)
print(page_one.extractText())

如果您注意到,上面的输出中第一页的格式有点偏差。这是因为 PyPDF2 读取 PDF 的效率不是很高。

幸运的是,Python 有一个比 PyPDF2 更好的替代品。接下来我们将讨论这一点。

使用 PDFplumber 提取文本

PDFplumber是另一个可以从 PDF 中提取文本的工具。与 PyPDF2 相比,它更强大。

1.安装包

让我们开始安装 PDFplumber。

pip install pdfplumber
PDF水管工

2.导入pdfplumber

首先使用以下代码行导入 PDFplumber:

import pdfplumber

3.使用PDFplumber阅读pdf

您可以通过以下代码开始使用 PDFplumber 阅读 PDF:

with pdfplumber.open("sample_pdf.pdf") as pdf:
    first_page = pdf.pages[0]
    print(first_page.extract_text())

这将从我们的 PDF 第一页获取文本。输出如下:

Hello World.
 
This is a sample PDF with 2 pages.
 
This is the first page.
 
 
Process finished with exit code 0

您可以将其与 PyPDF2 的输出进行比较,看看 PDFplumber 在格式化方面如何更好。

PDFplumber 还提供了从 PDF 获取其他信息的选项。

例如,您可以使用.page_number来获取页码。

print(first_page.page_number)

输出 :

1

要了解有关 PDFPlumber 下方法的更多信息,请参阅其官方文档。

结论

本教程是关于从 PDF 中读取文本的。我们研究了两种不同的工具,发现其中一种比另一种更好。

现在您已经知道如何从 PDF 中读取文本,您应该阅读我们的标记化教程以开始自然语言处理!