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ę:
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.
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.
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.
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.
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
# 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:
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.
GO TO FULL VERSION