1. 提取文本
我们几乎都会碰到需要从PDF文档中获取信息的时候,比如财务报告、研究报告,甚至你最爱的电子书。那么,如果我们不想手动提取,而是自动提取该怎么办?这时Python和它强大的PyPDF2库就派上用场了。
提取文本的主要步骤
要成功从PDF中提取文本,需要遵循几个简单步骤:
- 读取PDF文件。
- 解析PDF内容。
- 提取文本以便后续分析。
2. 读取和解析PDF文件
我们来看看如何在Python中打开和读取PDF文档。首先需要导入PyPDF2:
Python
import PyPDF2
现在,我们打开一个PDF文档。假设我们有一个文件sample.pdf
,希望分析它。让我们加载它并查看它有多少页。
加载PDF文件
Python
# 打开PDF文件
with open("sample.pdf", "rb") as pdf_file:
# 创建PDF阅读器对象
pdf_reader = PyPDF2.PdfReader(pdf_file)
# 获取总页数
num_pages = len(pdf_reader.pages)
print(f"文档的总页数: {num_pages}")
提取文本
现在,PDF文档已经打开,让我们从中提取文本。我们需要:
PdfReader
用于打开PDF文件进行读取。- 我们使用
for
循环遍历所有页面,并调用extract_text()
提取文本。 - 提取的文本存储在变量
text
中,可以输出或者进一步处理。
这是一个示例:
Python
import PyPDF2
# 打开PDF文件
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
text = ""
# 从每页提取文本
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
text += page.extract_text() + "\n"
print(text)
从指定页面提取文本
如果我们只需要特定页面的文本怎么办?比如说,我们只想提取第三页的文本。这可以这样实现:
Python
import PyPDF2
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
page = pdf_reader.pages[2] # 提取第三页的文本(索引为2)
text = page.extract_text()
print(text)
这个示例只提取第三页的文本,这在处理包含大量页面的文档时非常有用,并且你只想限制处理的范围。PyPDF2使用从0开始的页面编号。
3. 自动化PDF文本处理
从PDF中提取文本后,可以分析和处理它以进行更深入的数据分析。PyPDF2支持这个过程自动化,这在处理大量文档时特别有用。
提取文本并保存到单独的文件
为了方便后续分析,可以将提取的文本保存到一个文本文件中。这会让进一步处理更简单。
Python
import PyPDF2
# 打开PDF文件
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
text = ""
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
text += page.extract_text() + "\n"
# 保存提取的文本到文件
with open("extracted_text.txt", "w", encoding="utf-8") as text_file:
text_file.write(text)
处理和分析提取的文本
提取文本后,可以使用Python对其进行分析。常用的库包括re
(正则表达式)、nltk
(自然语言工具包)或pandas
。
统计单词并寻找关键短语
假设我们有一个文本文件extracted_text.txt
,并且我们想统计文档中特定单词和短语的数量。
Python
import re
# 打开提取的文本
with open("extracted_text.txt", "r", encoding="utf-8") as text_file:
text = text_file.read()
# 查找并统计关键字
keywords = ["报告", "数据", "分析"]
keyword_counts = {keyword: len(re.findall(keyword, text, re.IGNORECASE)) for keyword in keywords}
print("关键词频率:", keyword_counts)
这里:
- 我们打开保存的文本。
- 使用正则表达式统计关键词(不区分大小写)。
- 获取每个关键词的出现次数。
4. PyPDF2的优点和局限性
优点:
- 易于用于基本文本提取和页面处理。
- 支持核心操作:读取文本、合并和拆分文档。
- 与Python其他库轻松集成。
局限性:
- PyPDF2有时无法从具有复杂格式、表格和图像的PDF中正确提取文本。
- 不支持直接提取图像和表格。
- 不支持处理加密或有密码保护的文件(虽然如果知道密码,可以尝试解除保护)。
GO TO FULL VERSION