CodeGym /Java 课程 /Python SELF ZH /从PDF文档提取文本以进行后续数据分析

从PDF文档提取文本以进行后续数据分析

Python SELF ZH
第 43 级 , 课程 2
可用

1. 提取文本

我们几乎都会碰到需要从PDF文档中获取信息的时候,比如财务报告、研究报告,甚至你最爱的电子书。那么,如果我们不想手动提取,而是自动提取该怎么办?这时Python和它强大的PyPDF2库就派上用场了。

提取文本的主要步骤

要成功从PDF中提取文本,需要遵循几个简单步骤:

  1. 读取PDF文件。
  2. 解析PDF内容。
  3. 提取文本以便后续分析。

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中正确提取文本。
  • 不支持直接提取图像和表格。
  • 不支持处理加密或有密码保护的文件(虽然如果知道密码,可以尝试解除保护)。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION