CodeGym /Corso Java /Python SELF IT /Convertire testo da PDF a formato CSV o Excel per l'anali...

Convertire testo da PDF a formato CSV o Excel per l'analisi dei dati

Python SELF IT
Livello 44 , Lezione 1
Disponibile

1. Analisi di PDF

Perché convertire PDF in CSV o Excel?

Prima di affrontare questo compito, parliamo del perché possa essere utile occuparsi di tali conversioni. I documenti PDF sono ampiamente utilizzati per trasmettere informazioni grazie alla loro staticità e facilità di stampa.

Tuttavia, quando si tratta di analisi dei dati, i PDF non sono il miglior amico degli analisti. Ed è qui che entrano in gioco i file CSV ed Excel. Sono facili da analizzare, possono essere aperti comodamente in Excel o importati in qualsiasi strumento analitico. Leggere, filtrare, ordinare e visualizzare i dati in questi formati è un gioco da ragazzi. E chi vorrebbe rinunciare a una tale comodità?

Strumenti e librerie

Per svolgere il nostro compito, useremo alcune librerie Python che ci aiuteranno a rimuovere la "maledizione PDF" dal documento e trasformarlo in un fantastico CSV (o Excel, se preferisci così). Stiamo parlando di PyPDF2, PDFPlumber e pandas. PyPDF2 ci permetterà di estrarre testo dai PDF, PDFPlumber lo farà in modo più professionale, e pandas ci aiuterà a lavorare con i dati sotto forma di tabelle.

Se non hai ancora installato queste librerie, perché non farlo subito? Digita nel terminale il comando:

Bash
pip install PyPDF2 PDFPlumber pandas

Fatto questo, iniziamo sul serio!

2. Estrazione del testo dal documento PDF

Estrarre testo con PyPDF2

Il primo compito è tirare fuori il prezioso testo da un PDF. Per questo useremo la libreria PyPDF2. Scriviamo un piccolo script che apre un file PDF ed estrae il testo da ogni pagina del documento.

Python

import PyPDF2

# Apriamo il file
with open('sample.pdf', 'rb') as file:
    reader = PyPDF2.PdfReader(file)
    text = ""
    
    # Iteriamo attraverso tutte le pagine ed estraiamo il testo
    for page in reader.pages:
        text += page.extract_text()
    
    print(text)  # Stampiamo il testo estratto

Così semplice! Abbiamo letto un file ed estratto il testo da esso. Ma i testi possono variare: potrebbe essere necessario ulteriormente elaborare, rimuovere caratteri inutili o dividerli in righe.

Estrarre testo con PDFPlumber

PDFPlumber gestisce meglio PDF con tabelle e strutture complesse. Con esso, puoi estrarre testo e lavorare anche con tabelle.

Python

import pdfplumber

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

print(text)

Questo codice estrae testo da tutte le pagine, ma a differenza di PyPDF2, PDFPlumber gestisce meglio la formattazione e le tabelle.

Estrarre tabelle da PDF con PDFPlumber

Se nel PDF ci sono tabelle, PDFPlumber permette di estrarle sotto forma di liste, facilitando la loro successiva conversione in CSV o Excel.

Python

import pdfplumber
import pandas as pd

# Apriamo il PDF ed estraiamo le tabelle
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)

# Convertiamo i dati in DataFrame
df = pd.DataFrame(all_tables[1:], columns=all_tables[0])  # La prima riga è l'intestazione
print(df)

Questo codice crea una tabella dai dati PDF e la salva in un DataFrame, che può essere facilmente salvato in CSV o Excel.

3. Salvataggio dei dati

Conversione del testo in DataFrame

Ora che abbiamo il testo, immaginiamo che sia confezionato in righe, ognuna delle quali rappresenta una riga della nostra futura tabella. La nostra missione sarà convertirlo in un DataFrame con pandas e poi salvarlo come file CSV.

Python

import pandas as pd

# Supponiamo che ogni riga di testo corrisponda a una riga di dati
data = text.split('\n')
data = [row.split(',') for row in data if row.strip() != '']  # Dividiamo le righe per virgole

# Creiamo il DataFrame
df = pd.DataFrame(data[1:], columns=data[0])  # La prima riga è l'intestazione

# Salviamo il DataFrame come CSV
df.to_csv('output.csv', index=False)

Qui abbiamo semplicemente diviso tutto il testo in righe, poi in singoli elementi, e abbiamo creato un DataFrame, usando la prima riga come intestazione delle colonne. Dopo di che, lo abbiamo salvato in un file CSV. Yay! Abbiamo completato un lavoro che prima avrebbe richiesto un lungo smanettamento con penna e calcolatrice.

Conversione dei dati in CSV

Dopo aver estratto il testo o le tabelle dal PDF, i dati possono essere salvati in CSV usando la libreria pandas.

Salvare i dati in CSV

Python

# Salviamo i dati in CSV
df.to_csv("output.csv", index=False)
print("I dati sono stati salvati con successo in output.csv")

Questo codice salva un DataFrame con i dati del PDF in un file output.csv, che può essere aperto in qualsiasi editor di tabelle o caricato su una piattaforma analitica.

Conversione in Excel

E se vuoi nient'altro che Excel? Nessun problema! pandas offre tutto quello che serve per questo. Basta sostituire l'ultima riga nell'esempio precedente con:

Python

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

In questo modo, il tuo DataFrame sarà salvato in un file Excel, e potrai scorrerlo su e giù, applicare tutti i filtri del mondo e usare le tabelle pivot di Excel — tutto ciò che ti rende l'analista dell'anno alla festa aziendale.

Particolarità e ostacoli

Come al solito, sul nostro cammino incontriamo degli ostacoli. Estrarre testo da documenti PDF a volte sembra come cercare di spiegare alla nonna cosa sia un cloud storage. Alcuni documenti PDF possono avere strutture complesse, come tabelle, grafici e immagini, che non è sempre facile convertire in testo, specialmente in testo strutturato. In questi casi, potrebbe essere necessaria un'elaborazione aggiuntiva, l'uso di espressioni regolari, o perfino librerie OCR speciali per estrarre i dati dalle immagini contenute nei PDF.

Inoltre, non tutti i documenti PDF sono ugualmente amichevoli per l'automazione. Alcuni sono crittografati o protetti da password. PyPDF2 permette di gestire le password, ma con la crittografia le cose possono complicarsi.

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