JavaRush /Курсы /Python SELF /Извлечение текста из PDF-документов для последующего анал...

Извлечение текста из PDF-документов для последующего анализа данных

Python SELF
43 уровень , 2 лекция
Открыта

1. Извлечение текста

Практически каждый из нас сталкивался с ситуацией, когда нужна информация из PDF-документа, будь то бухгалтерский отчет, исследование или даже любимая электронная книга. Но как быть, если нужно извлечь данные не вручную, а автоматически? Здесь на сцену выходит Python и его невероятная библиотека PyPDF2.

Основные шаги при извлечении текста

Чтобы успешно извлечь текст из PDF, необходимо следовать нескольким простым шагам:

  1. Чтение PDF-файла.
  2. Парсинг содержимого PDF.
  3. Извлечение текста для последующего анализа.

2. Чтение и парсинг PDF-файлов

Давайте рассмотрим, как открыть и прочитать PDF-документ в Python. Для начала нам нужно импортировать PyPDF2:

Python

import PyPDF2

Теперь, откроем PDF-документ. Предположим, у нас есть файл sample.pdf, который мы хотим проанализировать. Давайте загрузим его и узнаем сколько в нем страниц.

Загрузка PDF-файла

Python

# Открытие PDF-файла
with open("sample.pdf", "rb") as pdf_file:
    # Создаем объект PDF Reader
    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 (Natural Language Toolkit) или 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 с многоуровневыми форматами, таблицами и изображениями.
  • Отсутствие поддержки прямого извлечения изображений и таблиц.
  • Не поддерживает обработку зашифрованных или защищенных паролем файлов (хотя можно попытаться снять защиту, если известен пароль).
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
1 августа 2025
вся лекция кроме части про "re" - полный повтор информации из двух предыдущих