Estrarre dati dalle fatture con Python

Punti chiave:

  • Python può aiutarti ad automatizzare l’estrazione dei dati dalle fatture, ma non esiste una soluzione magica.
  • Parseur sfrutta Python per estrarre dati dalle fatture per te.
  • Il PDF non è un formato dati, ma una rappresentazione tipografica di un documento cartaceo.

Il formato PDF

Il formato PDF è versatile e consente la rappresentazione accurata di documenti cartacei, come le fatture, senza limitare il design. Nasce dal mondo della stampa cartacea ed è pensato per essere una rappresentazione digitale di una pagina stampata. Questa flessibilità offre grande libertà, permettendo ai creatori di PDF di esprimersi e di rispettare vari standard e regolamenti.

Tuttavia, il problema sorge quando i dati sono bloccati all’interno di un PDF. La natura libera e complessa del formato può entrare in conflitto con l'approccio strutturato e coerente necessario per gestire la grande mole di dati che un’azienda elabora ogni giorno.

Una schermata dei livelli del formato di file PDF
Livelli del formato di file PDF

Quali sono i passaggi per estrarre i dati da una fattura?

Una fattura è un documento che solitamente arriva in formato PDF. Una fattura formalizza una transazione tra un fornitore e un cliente, dove un prodotto o servizio viene scambiato per una somma precisa di denaro. Ecco i passaggi necessari per estrarre i dati da questo documento:

  1. Definire uno schema per i dati che vuoi estrarre dalle tue fatture
  2. Convertire la fattura da immagine a testo
  3. Estrarre il testo dalla fattura in base al tuo schema dati
  4. Raccogliere i dati estratti

Una schermata del processo di estrazione dei dati della fattura
Processo di estrazione dei dati della fattura

Definire uno schema per i dati della fattura

Le fatture arrivano da fornitori diversi e ognuno tende a personalizzare l’aspetto delle proprie fatture. Nonostante questa varietà, la sostanza di tutte le fatture è fondamentalmente la stessa: serve il fornitore, il cliente, un riferimento fattura, una data e un elenco di articoli con relativa quantità, descrizione e costo. Un ottimo modo per iniziare a definire il tuo formato è partire dal software di contabilità: probabilmente è proprio lì che andrai a registrare i dati estratti dalle fatture. Se vuoi solo un formato dati che copra ogni possibile caso, ti consiglio il sito schema.org che definisce una serie di formati dati standard per diversi ambiti, incluse le fatture. Parseur definisce uno schema dati predefinito per le fatture, ma puoi modificarlo in base alle tue esigenze rinominando i campi nella tua mailbox dedicata alle fatture, come spiegato qui. Una volta definito il tuo formato dati, puoi convertire la fattura da immagine a testo.

Ad esempio, ecco come puoi definire i seguenti campi per una fattura usando il formato JSON Swagger:

{
    "InvoiceNumber": {
        "type": "string",
        "description": "Il numero della fattura"
    },
    "InvoiceIssueDate": {
        "type": "string",
        "description": "La data della fattura"
    },
    "Items": {
        "type": "array",
        "description": "L'elenco degli articoli nella fattura",
        "items": {
            "type": "object",
            "properties": {
                "quantity": {
                    "type": "number",
                    "description": "La quantità dell'articolo"
                },
                "description": {
                    "type": "string",
                    "description": "La descrizione dell'articolo"
                },
                "unit_price": {
                    "type": "number",
                    "description": "Il prezzo unitario dell'articolo"
                },
                "price": {
                    "type": "number",
                    "description": "Il prezzo totale dell'articolo"
                }
            }
        }
    }
}

Convertire la fattura da immagine a testo

Una schermata di una fattura scattata da uno smartphone
Foto di una fattura scattata da uno smartphone

Un file PDF può contenere un’immagine. Ad esempio, un dipendente può scattare una foto della fattura con la fotocamera dello smartphone. Poi la salva come PDF e la invia all’ufficio contabilità. Il tuo team contabile dovrà estrarre i dati da questa fattura e inserirli nel sistema contabile senza errori. Il passaggio successivo è convertire l’immagine in testo utilizzando un sistema di riconoscimento ottico dei caratteri (OCR). Uno dei sistemi OCR più popolari è Tesseract. Tesseract è scritto in C e C++. Per usarlo da un programma Python occorre una binding come PyTesseract. Una binding è un modo per richiamare una libreria da un linguaggio diverso da quello in cui è scritta (in questo caso, Python per Tesseract scritto in C/C++). Esistono molti sistemi di questo tipo e i risultati variano notevolmente a seconda della tecnologia e della qualità della scansione del documento su cui lavorano. Parseur rileva automaticamente se il documento è un’immagine e lo converte automaticamente in testo internamente. Una volta che i dati del documento sono in formato testuale, sono pronti per estrarre le informazioni.

Estrarre il testo dalla fattura in base al tuo schema dati

Ora che il PDF è in formato testo (o ricercabile), puoi usare la libreria Python pdftotext per estrarre i dati dalla fattura come testo. Ecco un esempio di codice per estrarre il testo da un file PDF:

import pdftotext

# Carica la fattura
with open("invoice.pdf", "rb") as file_handle:
    pdf = pdftotext.PDF(file_handle)

# Itera su tutte le pagine
for page in pdf:
    print(page)

Dai a questo script il nome convert_pdf_to_text.py ed eseguilo: otterrai la fattura come testo in output. Se vuoi reindirizzare l'output su un file, puoi eseguire:

$ python convert_pdf_to_text.py > invoice.txt

Ora che hai la fattura in formato testo, puoi estrarre i dati che desideri utilizzando una combinazione delle seguenti tecniche:

  • Puoi usare una espressione regolare per estrarre i dati desiderati. Le espressioni regolari sono uno strumento potente per estrarre dati da un testo, ma sono molto fragili. Se il formato della fattura cambia, dovrai aggiornare l’espressione regolare. Inoltre, le espressioni regolari non si adattano bene all’estrazione di dati da tabelle.
  • Puoi utilizzare un sistema di templating visuale, sfruttando OCR Dinamico e OCR Zonale. Questo metodo avanzato è più robusto delle espressioni regolari, ma anche più complesso da implementare.
  • Infine, puoi usare un sistema di apprendimento automatico. È un approccio molto potente ma anche il più complesso da implementare. Dovrai addestrare il sistema con molti dati, operazione che richiede molto tempo. Inoltre, i sistemi di machine learning non sono perfetti e dovrai controllare manualmente i risultati per assicurarti che siano corretti.

Estraiamo un dato dalla tua fattura usando le espressioni regolari di Python (modulo re). Ecco un esempio di codice per estrarre il numero della fattura:

import re

# Carica la fattura
with open("invoice.txt", "r") as file_handle:
    invoice = file_handle.read()

# Estrai il numero della fattura
invoice_number = re.search(r"Invoice number: (\w+)", invoice).group(1)
print(invoice_number)

Chiama questo script extract.py ed eseguilo: otterrai il numero della fattura sullo standard output:

$ python extract.py

E otterrai qualcosa come:

INV-1234

Nota che questo funziona solo per le fatture che hanno una riga del tipo Invoice number: INV-1234. Se il formato della fattura cambia, dovrai aggiornare l’espressione regolare. Questo può diventare presto un’attività molto onerosa se devi gestire numerosi formati di fatture diversi.

Parseur può aiutarti a gestire tutto questo.

Crea il tuo account gratuito
Risparmia tempo e fatica con Parseur. Automatizza i tuoi documenti.

Se decidi di utilizzare il parsing tramite espressioni regolari, il nostro motore di template ti aiuterà a gestirle e abbiamo anche una libreria di modelli che abbiamo costruito in anni di esperienza. Potrai scegliere il metodo di estrazione migliore per il tuo caso: puoi usare espressioni regolari, ma anche template visuali (motore OCR) o apprendimento automatico (motore IA). Puoi anche combinarli per avere il meglio da ogni approccio. Parseur ti permette inoltre di rivedere i risultati e correggerli se necessario. Questo passaggio è molto importante e ti permette di migliorare progressivamente l’accuratezza dell’estrazione.

Raccogliere i dati estratti

Con Python, puoi iterare sui file di fatture in una determinata cartella ed estrarre i dati. Mettiamo di voler estrarre il numero della fattura e l’importo totale, e salvare il risultato in formato CSV:

import os
import re

import pdftotext

# Itera su tutti i file PDF nella cartella
for filename in os.listdir("invoices/"):
    if not filename.endswith(".pdf"):
        continue

    # Carica la fattura
    with open("invoices/" + filename, "rb") as file_handle:
        pdf = pdftotext.PDF(file_handle)

    # Intestazione colonne CSV
    print("InvoiceNumber,TotalAmount")

    # Itera su tutte le pagine
    for page in pdf:
        # Estrai i dati
        invoice_number = re.search(r"Invoice number: (\w+)", page).group(1)
        total_amount = re.search(r"Total amount: (\w+)", page).group(1)
        print(invoice_number, total_amount, sep=",")

Chiama questo script extract_to_csv.py ed eseguilo: otterrai i numeri delle fatture e i totali come output, che puoi reindirizzare in un file CSV da aprire con il tuo software di fogli di calcolo, come Excel:

$ python extract_to_csv.py > invoices.csv

In Parseur, una volta che hai estratto i dati dalle fatture, puoi scaricarli tutti come foglio di calcolo, oppure esportarli direttamente nel tuo gestionale di contabilità, usando webhook diretti, Make, Zapier o Microsoft Power Automate. Puoi anche usare la nostra API per recuperarli in formato JSON.

Conclusione

Spero che questo articolo ti sia stato utile. In breve, estrarre dati dalle fatture con Python è un processo complesso, ma fattibile, a patto che le tue fatture siano coerenti e tu abbia molto tempo da dedicarci. Se il tuo tempo è limitato, puoi utilizzare l’esperienza e il know-how accumulati da Parseur negli anni, per arrivare più rapidamente al tuo obiettivo ed estrarre dati da tutte le tue fatture in modo flessibile e accurato.

Ultimo aggiornamento il

Software di estrazione dati basato sull'IA.
Inizia a utilizzare Parseur oggi stesso.

Automatizza l'estrazione di testo da email, PDF e fogli di calcolo.
Risparmia centinaia di ore di lavoro manuale.
Adotta l'automazione del lavoro con l'IA.

Parseur rated 5/5 on Capterra
Parseur.com has the highest adoption on G2
Parseur.com has the happiest users badge on Crozdesk
Parseur rated 5/5 on GetApp
Parseur rated 4.5/5 on Trustpilot