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

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

Python SELF UA
Рівень 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

А що якщо ви хочете більше, ніж просто CSV? Немає проблем! pandas надає все необхідне для цього. Просто замініть останній рядок у попередньому прикладі на:

Python

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

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

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

Як завжди буває, на нашому шляху трапляються перешкоди. Витяг тексту з PDF-документів іноді нагадує спробу пояснити бабусі, що таке хмарне сховище. Деякі PDF-документи можуть мати складні структури, такі як таблиці, графіки та зображення, які не так просто перетворити на текст, особливо структурований. У таких випадках вам може знадобитися додаткова обробка тексту, використання регулярних виразів або навіть спеціальні OCR-бібліотеки для витягу даних із зображень, наявних усередині PDF.

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

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ