原文: How to Extract Data from PDF Files with Python

数据存在于现代数字世界的所有领域,它有许多不同的形式。

最常见的数据格式之一是 PDF。企业和机构经常将发票、报告和其他表格存储在便携式文档格式(PDF)文件中。

从 PDF 文件中提取数据可能会很费力和费时。幸运的是,为了方便从 PDF 文件中提取数据,Python 提供了各种库。

本教程将解释如何使用 Python 从 PDF 文件中提取数据。你将学习如何安装必要的库,我将提供如何安装的例子。

有几个 Python 库,你可以用来读取和提取 PDF 文件中的数据。这些库包括 PDFMiner、PyPDF2、PDFQuery 和 PyMuPDF。这里,我们将使用 PDFQuery 从多个 PDF 文件中读取和提取数据。

如何使用 PDFQuery

PDFQuery 是一个 Python 库,通过使用类似于 CSS 的选择器来定位文档中的元素,提供了一种从 PDF 文件中提取数据的简单方法。

它将一个 PDF 文件作为一个对象来读取,将 PDF 对象转换为一个 XML 文件,并通过其在 PDF 文件中的特定位置来访问所需的信息。

让我们考虑一个简短的例子来看看它是如何工作的。

from pdfquery import PDFQuery

pdf = PDFQuery('example.pdf')
pdf.load()

# 使用类似 CSS 的选择器来定位元素
text_elements = pdf.pq('LTTextLineHorizontal')

# 从元素中提取文本
text = [t.text for t in text_elements]

print(text)

在这段代码中,我们首先通过传递我们想要提取数据的 PDF 文件的文件名创建一个 PDFQuery 对象。然后我们通过调用 load() 方法将文件加载到该对象中。

接下来,我们使用类似 CSS 的选择器来定位 PDF 文档中的文本元素。pq() 方法被用来定位这些元素,它返回一个代表所选元素的 PyQuery 对象。

最后,我们通过访问每个元素的 text 属性从这些元素中提取文本,并将提取的文本存储在一个叫作 text 的列表中。

让我们考虑另一种方法,读取 PDF 文件,提取一些数据元素,并使用 PDFQuery 创建一个结构化的数据集。我们将遵循以下步骤:

  • 安装包
  • 导入库
  • 读取和转换 PDF 文件
  • 读取和转换数据

安装包

首先,我们需要安装 PDFQuery,同时安装 Pandas 以进行一些分析和数据展示。

pip install pdfquery
pip install pandas

导入库

import pandas as pd
import pdfquery

我们导入这两个库,以便能够在我们的项目中使用它们。

读取和转换 PDF 文件

#读取 PDF
pdf = pdfquery.PDFQuery('customers.pdf')
pdf.load()


#将 pdf 转换为 XML
pdf.tree.write('customers.xml', pretty_print = True)
pdf

我们将把 pdf 文件作为一个元素对象读入我们的项目,并加载它。将 pdf 对象转换成可扩展标记语言(XML)文件。这个文件包含了一个给定的 PDF 页面的数据和元数据。

XML 定义了一套规则,用于将 PDF 编码成人类和机器都能阅读的格式。使用文本编辑器查看 XML 文件,我们可以看到我们要提取的数据在哪里。

读取和转换数据

我们可以在 LTTextBoxHorizontal 标签里面得到想要提取的信息,我们可以看到与之相关的元数据。

在 XML 片段中,文本框内的值 [68.0, 231.57, 101.990, 234.893] 是指文本框的左、下、右、上坐标。你可以把它看作是我们要提取的数据周围的边界。

让我们使用文本框的坐标来访问和提取客户名称。

# 使用坐标读取数据
customer_name = pdf.pq('LTTextLineHorizontal:in_bbox("68.0, 231.57, 101.990, 234.893")').text()

print(customer_name)

#output: Brandon James

就这样,我们完成了!

注意:有时我们想提取的数据在每个文件中的位置不完全相同,这可能会导致问题。幸运的是,PDFQuery 也可以查询包含一个给定字符串的标签。

总结

从 PDF 文件中提取数据是一项重要任务,因为这些文件经常被用于文档存储和共享。

Python 的 PDFQuery 是一个强大的工具,可用于从 PDF 文件中提取数据。任何想要从 PDF 文件中提取数据的人都会发现 PDFQuery 是一个很好的选择,因为它语法简单、文档全面,它也是开源的,可以修改以适应特定的用例。

欢迎在 TwitterLinkedIn 联系我。你也可以订阅我的 YouTube 频道。

Happy Coding!