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
А що якщо ви хочете більше, ніж просто CSV? Немає проблем! pandas надає все необхідне для цього. Просто замініть останній рядок у попередньому прикладі на:
df.to_excel('output.xlsx', index=False)
Таким чином, ваш DataFrame буде збережений у Excel-файл, і ви зможете прокручувати його туди-сюди, застосовувати всілякі фільтри та використовувати зведені таблиці Excel — усе те, що робить вас аналітиком року на корпоративній вечірці.
Особливості та підводні камені
Як завжди буває, на нашому шляху трапляються перешкоди. Витяг тексту з PDF-документів іноді нагадує спробу пояснити бабусі, що таке хмарне сховище. Деякі PDF-документи можуть мати складні структури, такі як таблиці, графіки та зображення, які не так просто перетворити на текст, особливо структурований. У таких випадках вам може знадобитися додаткова обробка тексту, використання регулярних виразів або навіть спеціальні OCR-бібліотеки для витягу даних із зображень, наявних усередині PDF.
Крім того, не всі PDF-документи однаково дружні до автоматизації. Деякі з них шифруються або захищаються паролями. PyPDF2 дозволяє працювати з паролями, але з шифруванням справа складніша.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ