JavaRush /Курсы /Python SELF /Преобразование текста из PDF в формат CSV или Excel для а...

Преобразование текста из PDF в формат CSV или Excel для анализа данных

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

1. PDF-аналитик

Зачем преобразовывать PDF в CSV или Excel?

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

Однако, когда дело доходит до анализа данных, PDF не наилучший друг аналитика. Именно здесь на сцену выходят CSV и Excel файлы. Они удобны для анализа, их можно легко открывать в Excel или импортировать в любой аналитический инструмент. Чтение, фильтрация, сортировка и визуализация данных в этих форматах происходят на раз-два. И кто захочет от такого отказаться?

Инструменты и библиотеки

Для выполнения нашего задания мы воспользуемся несколькими библиотеками на Python, которые помогут нам снять заклятие "PDF" с документа и превратить его в чудесный CSV (или Excel, если вам так больше нравится). Это PyPDF2, PDFPlumber и pandas. PyPDF2 позволит нам извлекать текст из PDF, PDFPlumber - делать это на профессиональном уровне, а pandas — работать с данными как с таблицами.

Если вы еще не установили эти библиотеки, то почему бы не сделать это прямо сейчас? Введите в терминале команду:

Bash
pip install PyPDF2 PDFPlumber pandas

С этим покончено, а теперь за дело!

2. Извлечение текста из PDF-документа

Извлечение текста с помощью PyPDF2

Первая задача — вытащить драгоценный текст из PDF. Для этого мы воспользуемся библиотекой PyPDF2. Давайте напишем небольшой скрипт, который откроет PDF-файл и извлечет текст из каждой страницы документа.

Python

import PyPDF2

# Открываем файл
with open('sample.pdf', 'rb') as file:
    reader = PyPDF2.PdfReader(file)
    text = ""
    
    # Перебираем все страницы и извлекаем текст
    for page in reader.pages:
        text += page.extract_text()
    
    print(text)  # Выводим извлеченный текст

Вот так просто! Мы прочли файл и извлекли из него текст. Но тексты бывают разные: где-то может понадобиться дополнительная обработка, удаление лишних символов или же разбиение на строки.

Извлечение текста с помощью PDFPlumber

PDFPlumber более точно обрабатывает PDF с таблицами и сложной структурой. С его помощью можно извлечь текст, а также работать с таблицами.

Python

import pdfplumber

# Открываем PDF-файл
with pdfplumber.open("sample_with_table.pdf") as pdf:
    text = ""
    for page in pdf.pages:
        text += page.extract_text() + "\n"

print(text)

Этот код аналогично извлекает текст со всех страниц, но в отличие от PyPDF2, PDFPlumber лучше справляется с разметкой и таблицами.

Извлечение таблиц из PDF с помощью PDFPlumber

Если в PDF содержатся таблицы, PDFPlumber позволяет извлечь их в виде списков, что облегчает их последующее преобразование в CSV или Excel.

Python

import pdfplumber
import pandas as pd

# Открываем PDF и извлекаем таблицы
with pdfplumber.open("sample_with_table.pdf") as pdf:
    all_tables = []
    for page in pdf.pages:
        table = page.extract_table()
        if table:
            all_tables.extend(table)

# Преобразуем данные в DataFrame
df = pd.DataFrame(all_tables[1:], columns=all_tables[0])  # Первая строка — заголовки
print(df)

Этот код создает таблицу из данных PDF и сохраняет её в DataFrame, что позволяет легко сохранить таблицу в CSV или Excel.

3. Сохранение данных

Преобразование текста в DataFrame

Теперь, когда у нас есть текст, давайте представим, что он упакован в строки, каждая из которых — это строка нашей будущей таблицы. Нашей задачей будет преобразовать его в DataFrame с помощью pandas и затем сохранить как CSV-файл.

Python

import pandas as pd

# Представим, что каждая строка текста соответствует строке данных
data = text.split('\n')
data = [row.split(',') for row in data if row.strip() != '']  # Разбиваем строки по запятым

# Создаем DataFrame
df = pd.DataFrame(data[1:], columns=data[0])  # Первую строку используем как заголовки

# Сохраняем DataFrame как CSV
df.to_csv('output.csv', index=False)

Здесь мы просто разбили весь текст на строки, затем — на отдельные элементы, и создали DataFrame, указав первую строку в качестве заголовков колонок. После этого сохранили его в CSV-файл. Юхуу! Мы проделали работу, которая раньше требовала бы долгого разбора с ручкой и калькулятором.

Преобразование данных в CSV

После извлечения текста или таблиц из PDF можно сохранить данные в CSV с помощью библиотеки Pandas.

Сохранение данных в CSV

Python

# Сохранение данных в CSV
df.to_csv("output.csv", index=False)
print("Данные успешно сохранены в output.csv")

Этот код сохраняет DataFrame с данными из PDF в файл output.csv, который можно открыть в любом табличном редакторе или загрузить в аналитическую платформу.

Преобразование в Excel

А что если вы хотите ни больше, ни меньше, чем Excel? Нет проблем! pandas предоставляет все необходимое для этого. Просто замените последнюю строку в предыдущем примере на:

Python

df.to_excel('output.xlsx', index=False)

Таким образом, ваш DataFrame будет сохранен в Excel-файл, и вы сможете прокручивать его туда-сюда, применять всевозможные фильтры и использовать сводные таблицы Excel — все то, что делает вас аналитиком года на корпоративной вечеринке.

Особенности и подводные камни

Как всегда бывает, на нашем пути встречаются преграды. Извлечение текста из PDF-документов порой напоминает попытку объяснить бабушке, что такое облачное хранилище. Некоторые PDF-документы могут иметь сложные структуры, такие как таблицы, графики и изображения, которые не так просто преобразовать в текст, особенно в структурированный. В таких случаях вам может понадобиться дополнительная обработка текста, использование регулярных выражений, или даже специальные OCR-библиотеки для извлечения данных из изображений, содержащихся внутри PDF.

Кроме того, не все PDF-документы одинаково дружелюбны к автоматизации. Некоторые из них шифруются или защищаются паролями. PyPDF2 позволяет обрабатывать пароли, но с шифрованием дела обстоят сложнее.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ