CodeGym /Kursy /Python SELF PL /Konwersja tekstu z pliku PDF do formatu CSV lub Excel do ...

Konwersja tekstu z pliku PDF do formatu CSV lub Excel do analizy danych

Python SELF PL
Poziom 44 , Lekcja 1
Dostępny

1. Analityk PDF

Dlaczego warto konwertować PDF na CSV lub Excel?

Zanim zagłębimy się w to zadanie, porozmawiajmy o tym, dlaczego w ogóle warto zajmować się takimi konwersjami. Pliki PDF są powszechnie używane do przesyłania informacji dzięki swojej statyczności i wygodzie w drukowaniu.

Jednak kiedy przychodzi do analizy danych, PDF nie jest najlepszym przyjacielem analityka. Tutaj na scenę wkraczają pliki CSV i Excel. Są one wygodne do analizy, można je łatwo otworzyć w Excelu lub zaimportować do dowolnego narzędzia analitycznego. Odczyt, filtrowanie, sortowanie i wizualizacja danych w tych formatach odbywa się błyskawicznie. Kto by z tego zrezygnował?

Narzędzia i biblioteki

Do realizacji naszego zadania użyjemy kilku bibliotek w Pythonie, które pomogą nam zdjąć "klątwę PDF" z dokumentu i przekształcić go w magiczny CSV (lub Excel, jeśli tak wolisz). To PyPDF2, PDFPlumber i pandas. PyPDF2 pozwoli nam wyodrębnić tekst z PDF, PDFPlumber - robić to na profesjonalnym poziomie, a pandas - pracować z danymi jak z tabelami.

Jeśli jeszcze nie zainstalowałeś tych bibliotek, to dlaczego by nie zrobić tego od razu? Wpisz w terminalu komendę:

Bash
pip install PyPDF2 PDFPlumber pandas

Z tym załatwione, a teraz do dzieła!

2. Wyodrębnianie tekstu z pliku PDF

Wyodrębnianie tekstu za pomocą PyPDF2

Pierwsze zadanie — wydobyć cenny tekst z PDF. Do tego skorzystamy z biblioteki PyPDF2. Napiszmy krótki skrypt, który otworzy plik PDF i wyodrębni tekst z każdej strony dokumentu.

Python

import PyPDF2

# Otwieramy plik
with open('sample.pdf', 'rb') as file:
    reader = PyPDF2.PdfReader(file)
    text = ""
    
    # Iterujemy przez wszystkie strony i wyciągamy tekst
    for page in reader.pages:
        text += page.extract_text()
    
    print(text)  # Wyświetlamy wyodrębniony tekst

Prosto, prawda? Przeczytaliśmy plik i wyodrębniliśmy z niego tekst. Ale teksty bywają różne: czasami może być potrzebna dodatkowa obróbka, usunięcie zbędnych znaków lub podział na linie.

Wyodrębnianie tekstu za pomocą PDFPlumber

PDFPlumber bardziej precyzyjnie obsługuje PDF z tabelami i złożoną strukturą. Dzięki niemu można wyodrębnić tekst, a także pracować z tabelami.

Python

import pdfplumber

# Otwieramy plik PDF
with pdfplumber.open("sample_with_table.pdf") as pdf:
    text = ""
    for page in pdf.pages:
        text += page.extract_text() + "\n"

print(text)

Ten kod również wyodrębnia tekst ze wszystkich stron, ale w przeciwieństwie do PyPDF2, PDFPlumber lepiej radzi sobie z formatowaniem i tabelami.

Wyodrębnianie tabel z PDF za pomocą PDFPlumber

Jeśli w PDF znajdują się tabele, PDFPlumber pozwala je wyodrębnić jako listy, co ułatwia ich późniejszą konwersję na CSV lub Excel.

Python

import pdfplumber
import pandas as pd

# Otwieramy PDF i wyodrębniamy tabele
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)

# Konwertujemy dane do DataFrame
df = pd.DataFrame(all_tables[1:], columns=all_tables[0])  # Pierwszy wiersz jako nagłówki
print(df)

Ten kod tworzy tabelę z danych PDF i zapisuje ją w DataFrame, co pozwala łatwo zapisać tabelę w CSV lub Excel.

3. Zapisywanie danych

Konwersja tekstu do DataFrame

Teraz, gdy mamy tekst, załóżmy, że jest on "zapakowany" w linie, każda z nich — to wiersz naszej przyszłej tabeli. Naszym zadaniem będzie przekształcić go w DataFrame przy użyciu pandas, a następnie zapisać jako plik CSV.

Python

import pandas as pd

# Załóżmy, że każda linia tekstu to wiersz danych
data = text.split('\n')
data = [row.split(',') for row in data if row.strip() != '']  # Dzielimy linie po przecinkach

# Tworzymy DataFrame
df = pd.DataFrame(data[1:], columns=data[0])  # Pierwszy wiersz jako nagłówki

# Zapisujemy DataFrame jako CSV
df.to_csv('output.csv', index=False)

Tutaj po prostu podzieliliśmy cały tekst na linie, następnie na poszczególne elementy, i stworzyliśmy DataFrame, wskazując pierwszy wiersz jako nagłówki kolumn. Po tym zapisaliśmy go w pliku CSV. Hurra! Właśnie wykonaliśmy pracę, która wcześniej wymagałaby długiego analizowania z długopisem i kalkulatorem w dłoni.

Konwersja danych do CSV

Po wyodrębnieniu tekstu lub tabel z PDF można zapisać dane w CSV przy pomocy biblioteki Pandas.

Zapisywanie danych w CSV

Python

# Zapis danych w CSV
df.to_csv("output.csv", index=False)
print("Dane zostały pomyślnie zapisane w output.csv")

Ten kod zapisuje DataFrame z danymi z PDF w pliku output.csv, który można otworzyć w dowolnym edytorze tabel lub załadować do platformy analitycznej.

Konwersja do Excela

A co, jeśli chcesz coś więcej niż CSV, na przykład Excel? Żaden problem! pandas oferuje wszystkie niezbędne narzędzia. Po prostu zamień ostatnią linię w poprzednim przykładzie na:

Python

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

W ten sposób twój DataFrame zostanie zapisany w pliku Excel, i będziesz mógł go przeglądać wzdłuż i wszerz, stosować wszelkie filtry i używać tabel przestawnych Excela — wszystko to, co sprawia, że jesteś analitykiem roku na imprezie firmowej.

Funkcje specjalne i pułapki

Jak to zwykle bywa, na naszej drodze spotykamy przeszkody. Wyodrębnianie tekstu z plików PDF czasami przypomina próby wytłumaczenia babci, czym jest chmura obliczeniowa. Niektóre pliki PDF mogą mieć skomplikowane struktury, takie jak tabele, wykresy i obrazy, które nie tak łatwo przekształcić w tekst, szczególnie tekst ustrukturyzowany. W takich przypadkach możesz potrzebować dodatkowej obróbki tekstu, użycia wyrażeń regularnych, a nawet specjalnych bibliotek OCR do wyodrębnienia danych z obrazów zawartych w PDF.

Ponadto nie wszystkie pliki PDF są tak samo przyjazne dla automatyzacji. Niektóre z nich są szyfrowane lub chronione hasłem. PyPDF2 pozwala obsługiwać hasła, ale szyfrowanie może stanowić większe wyzwanie.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION