1. PDF-аналитик
Зачем преобразовывать PDF в CSV или Excel?
Прежде чем мы будем разбираться в этой задаче, давайте поговорим о том, почему вообще стоит заниматься подобными преобразованиями. PDF-документы повсеместно используются для передачи информации благодаря своей статичности и удобству печати.
Однако, когда дело доходит до анализа данных, PDF не наилучший друг аналитика. Именно здесь на сцену выходят CSV и Excel файлы. Они удобны для анализа, их можно легко открывать в Excel или импортировать в любой аналитический инструмент. Чтение, фильтрация, сортировка и визуализация данных в этих форматах происходят на раз-два. И кто захочет от такого отказаться?
Инструменты и библиотеки
Для выполнения нашего задания мы воспользуемся несколькими библиотеками на Python, которые помогут нам снять заклятие "PDF" с документа и превратить его в чудесный CSV (или Excel, если вам так больше нравится). Это PyPDF2, PDFPlumber и pandas. PyPDF2 позволит нам извлекать текст из PDF, PDFPlumber - делать это на профессиональном уровне, а pandas — работать с данными как с таблицами.
Если вы еще не установили эти библиотеки, то почему бы не сделать это прямо сейчас? Введите в терминале команду:
pip install PyPDF2 PDFPlumber pandas
С этим покончено, а теперь за дело!
2. Извлечение текста из PDF-документа
Извлечение текста с помощью PyPDF2
Первая задача — вытащить драгоценный текст из PDF. Для этого мы воспользуемся библиотекой PyPDF2. Давайте напишем небольшой скрипт, который откроет PDF-файл и извлечет текст из каждой страницы документа.
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 с таблицами и сложной структурой. С его помощью можно извлечь текст, а также работать с таблицами.
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.
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-файл.
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
# Сохранение данных в CSV
df.to_csv("output.csv", index=False)
print("Данные успешно сохранены в output.csv")
Этот код сохраняет DataFrame с данными из PDF в файл output.csv, который можно открыть в любом табличном редакторе или загрузить в аналитическую платформу.
Преобразование в Excel
А что если вы хотите ни больше, ни меньше, чем Excel? Нет проблем! pandas предоставляет все необходимое для этого. Просто замените последнюю строку в предыдущем примере на:
df.to_excel('output.xlsx', index=False)
Таким образом, ваш DataFrame будет сохранен в Excel-файл, и вы сможете прокручивать его туда-сюда, применять всевозможные фильтры и использовать сводные таблицы Excel — все то, что делает вас аналитиком года на корпоративной вечеринке.
Особенности и подводные камни
Как всегда бывает, на нашем пути встречаются преграды. Извлечение текста из PDF-документов порой напоминает попытку объяснить бабушке, что такое облачное хранилище. Некоторые PDF-документы могут иметь сложные структуры, такие как таблицы, графики и изображения, которые не так просто преобразовать в текст, особенно в структурированный. В таких случаях вам может понадобиться дополнительная обработка текста, использование регулярных выражений, или даже специальные OCR-библиотеки для извлечения данных из изображений, содержащихся внутри PDF.
Кроме того, не все PDF-документы одинаково дружелюбны к автоматизации. Некоторые из них шифруются или защищаются паролями. PyPDF2 позволяет обрабатывать пароли, но с шифрованием дела обстоят сложнее.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ