Estrarre dati dalle fatture con Python

Portrait of Sylvain Josserand
di Sylvain Josserand
5 minuti di lettura
Ultimo aggiornamento il

Punti chiave:

  • Python può automatizzare l'estrazione dei dati dalle fatture, ma non è una soluzione universale.
  • Parseur utilizza Python per estrarre i dati dalle tue fatture.
  • Il PDF non è un formato dati, ma una rappresentazione tipografica di un documento cartaceo.

Il formato PDF

Il formato PDF è versatile e permette di rappresentare fedelmente documenti cartacei, come le fatture, senza vincoli di design. Originariamente pensato per la stampa, è progettato come rappresentazione digitale di una pagina stampata. Questa flessibilità offre grande libertà, consentendo ai creatori di PDF di esprimere la propria creatività e di aderire a diversi standard e normative.

Tuttavia, estrarre i dati da un PDF può essere complesso. La sua natura articolata e libera può contrastare con l'approccio strutturato e coerente necessario per gestire l'enorme quantità di dati che un'azienda elabora quotidianamente.

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

Come estrarre i dati da una fattura?

Una fattura, generalmente in formato PDF, formalizza una transazione tra fornitore e cliente, in cui un prodotto o servizio viene scambiato con un importo di denaro. Ecco i passaggi per estrarre i dati da questo documento:

  1. Definire uno schema per i dati da estrarre.
  2. Convertire la fattura da immagine a testo.
  3. Estrarre il testo in base allo 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

Ogni fornitore personalizza l'aspetto delle proprie fatture. Nonostante ciò, le informazioni fondamentali sono le stesse: fornitore, cliente, numero fattura, data e elenco articoli con quantità, descrizione e costo. Per definire il formato, un buon punto di partenza è il tuo software di contabilità, dove probabilmente archivierai i dati estratti. Per uno schema dati completo, schema.org definisce standard di settore per vari documenti, incluse le fatture. Parseur offre uno schema predefinito modificabile tramite la personalizzazione dei campi.

Un esempio di schema in 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 PDF può contenere un'immagine, ad esempio la foto di una fattura scattata con uno smartphone. Il tuo team contabile deve estrarre i dati e inserirli nel sistema contabile. Per convertire l'immagine in testo, si utilizza un sistema di riconoscimento ottico dei caratteri (OCR), come Tesseract. Per usare Tesseract da Python, è necessario un binding come PyTesseract. Esistono molti sistemi OCR con risultati variabili. Parseur rileva e converte automaticamente le immagini in testo.

Estrarre il testo dalla fattura in base allo schema dati

Con il PDF in formato testo, la libreria Python pdftotext permette di estrarre i dati.

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)

Eseguendo lo script convert_pdf_to_text.py si ottiene il testo della fattura. Reindirizzando l'output: $ python convert_pdf_to_text.py > invoice.txt

Per estrarre i dati desiderati, si possono usare diverse tecniche:

Esempio con espressioni regolari (modulo re):

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)

Eseguendo extract.py, si ottiene (es. INV-1234), ma solo se la fattura contiene "Invoice number: INV-1234". Gestire molti formati diventa complesso. Parseur semplifica questo processo.

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

Parseur gestisce le espressioni regolari, offre una libreria di modelli e permette di scegliere tra espressioni regolari, modelli visivi (OCR) e apprendimento automatico (IA), combinandoli per la massima efficacia. Consente anche la revisione e la correzione dei risultati.

Raccogliere i dati estratti

Con Python, si possono estrarre dati da più fatture in una cartella. Esempio per estrarre numero fattura e importo totale in CSV:

import os
import re

import pdftotext

# Itera sui 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 CSV
    print("InvoiceNumber,TotalAmount")

    # Itera sulle 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=",")

Eseguendo extract_to_csv.py e reindirizzando l'output ($ python extract_to_csv.py > invoices.csv), si ottiene un file CSV apribile con Excel.

Parseur permette di scaricare i dati come foglio di calcolo o esportarli direttamente nel software contabile tramite webhook, Make, Zapier o Microsoft Power Automate, oppure tramite API in formato JSON.

Conclusione

Estrarre dati dalle fatture con Python è fattibile, ma complesso e dispendioso in termini di tempo, soprattutto se le fatture hanno formati diversi. Parseur offre un'alternativa efficiente e precisa, sfruttando anni di esperienza e tecnologie avanzate.

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.

Registrati gratuitamente
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