Extraire des données de factures avec Python

Points clés :

  • Python peut vous aider à automatiser l'extraction de données à partir de factures, mais il n'existe pas de solution miracle.
  • Parseur exploite Python pour extraire les données de vos factures automatiquement.
  • Le format PDF n’est pas un format de données, mais une représentation typographique d’un document papier.

Le format PDF

Le format PDF est polyvalent, permettant une représentation fidèle des documents papier, tels que les factures, sans limiter leur conception. Il provient de l’univers de l’impression et a été conçu pour être une représentation numérique d’une page imprimée. Cette flexibilité offre une grande liberté, permettant aux créateurs de PDF de s’exprimer et de se conformer à diverses réglementations et normes.

Cependant, le défi apparaît lorsque les données sont verrouillées au sein d’un PDF. La nature libre et parfois complexe du format s’accorde mal avec l’approche structurée et cohérente nécessaire au traitement des grandes quantités de données dans une entreprise.

Capture d'écran des couches de format de fichier PDF
Couches de format de fichier PDF

Quelles sont les étapes pour extraire des données d'une facture ?

Une facture est un document qui se présente généralement au format PDF. Elle formalise une transaction entre un fournisseur et un client, où un produit ou un service est échangé contre un montant d’argent précis. Voici les étapes nécessaires pour extraire les données de ce document :

  1. Définir un schéma de données pour les champs à extraire de vos factures
  2. Convertir votre facture de l’image au texte
  3. Extraire le texte de votre facture selon votre schéma de données
  4. Collecter les données extraites

Capture d'écran du processus d'extraction des données de la facture
Processus d'extraction des données de la facture

Définir un schéma pour vos données de facture

Les factures proviennent de différents fournisseurs qui personnalisent généralement la présentation de leurs documents. Malgré cette diversité des formes, le fond des factures reste le même : il vous faut un fournisseur, un client, une référence de facture, une date et une liste d’articles avec quantité, description et coût. Un bon point de départ pour définir votre schéma de facture est votre logiciel de comptabilité, car c’est certainement là que vous stockerez ces données extraites.

Si vous recherchez un format couvrant tous les cas possibles, le site schema.org propose justement des standards pour de nombreux domaines, dont celui des factures. Parseur propose un schéma de données par défaut pour vos factures, mais vous pouvez l’adapter à votre cas d’usage en renommant les champs de votre boîte de réception, comme expliqué ici.

Une fois votre format de données défini, vous pouvez passer à la conversion de votre facture de l’image au texte.

Par exemple, vous pouvez définir les champs suivants pour votre facture, à l’aide du format JSON Swagger :

{
    "InvoiceNumber": {
        "type": "string",
        "description": "Le numéro de la facture"
    },
    "InvoiceIssueDate": {
        "type": "string",
        "description": "La date de la facture"
    },
    "Items": {
        "type": "array",
        "description": "La liste des articles de la facture",
        "items": {
            "type": "object",
            "properties": {
                "quantity": {
                    "type": "number",
                    "description": "La quantité de l'article"
                },
                "description": {
                    "type": "string",
                    "description": "La description de l'article"
                },
                "unit_price": {
                    "type": "number",
                    "description": "Le prix unitaire de l'article"
                },
                "price": {
                    "type": "number",
                    "description": "Le prix total de l'article"
                }
            }
        }
    }
}

Convertir votre facture de l'image au texte

Photo d'une facture prise avec un smartphone
Photo d'une facture prise avec un smartphone

Un fichier PDF peut contenir une image. Par exemple, votre employé peut prendre rapidement une photo d'une facture avec son téléphone. Il la sauvegarde ensuite sous forme de PDF et l’envoie à votre service comptable. L’équipe comptable est chargée d’extraire les données de cette facture afin de les saisir dans le logiciel comptable sans erreur.

L’étape suivante consiste à convertir cette image en texte, à l’aide d’un système de reconnaissance optique de caractères, aussi appelé OCR. L’un des moteurs OCR les plus populaires est Tesseract, écrit en C et C++. Pour utiliser Tesseract depuis Python, il faut utiliser une interface comme PyTesseract. Une interface (binding) permet d’utiliser une bibliothèque logicielle écrite dans un langage (ici, Tesseract en C/C++) depuis un autre langage (ici, Python).

Il existe de nombreux systèmes d’OCR et leurs résultats varient fortement selon la technologie utilisée et la qualité du scan du document. Parseur détecte automatiquement si votre document est une image et le convertit en texte en interne. Une fois le document sous forme textuelle, il peut être exploité pour l’extraction.

Extraire le texte de votre facture selon votre schéma de données

Après conversion de votre facture PDF en format texte (ou PDF texte interrogeable), vous pouvez utiliser la librairie Python pdftotext pour obtenir le texte du PDF.

Voici un extrait de code pour extraire le texte d'un fichier PDF :

import pdftotext

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

# Parcourir toutes les pages et afficher le texte
for page in pdf:
    print(page)

Nommez ce script convert_pdf_to_text.py et lancez-le : vous obtiendrez la facture au format texte dans la sortie standard. Pour rediriger la sortie vers un fichier texte :

$ python convert_pdf_to_text.py > invoice.txt

Maintenant que vous avez la facture en texte, vous pouvez extraire les données souhaitées avec une combinaison des techniques suivantes :

  • Utilisez une expression régulière pour extraire les données voulues. Les expressions régulières sont puissantes mais fragiles : si le format change, il faut les adapter. De plus, elles sont peu adaptées pour extraire les données tabulaires.
  • Utilisez un système de modèles visuels, idéalement en combinant OCR Dynamique et OCR Zonal. Cette approche, plus avancée que les expressions régulières, est également plus complexe à mettre en place.
  • Enfin, vous pouvez opter pour un système à base d’intelligence artificielle (machine learning). C’est très puissant mais le plus complexe à implémenter. Il nécessite d’entraîner le système avec une grande quantité de données et un contrôle qualité humain.

Exemple pour extraire le numéro de facture avec les expressions régulières Python via le module re :

import re

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

# Extraire le numéro de facture
invoice_number = re.search(r"Invoice number: (\w+)", invoice).group(1)
print(invoice_number)

Nommez ce fichier extract.py puis lancez-le. Vous obtiendrez le numéro de facture en sortie :

$ python extract.py

Ce qui donnera par exemple :

INV-1234

Notez que cela ne fonctionne que pour les factures qui ont bien une ligne du type Invoice number: INV-1234. Si le format change, il faudra adapter votre expression régulière. Cela peut vite devenir chronophage si vous recevez de nombreux modèles de facture.

Parseur peut vous aider à gérer cela.

Créer mon compte gratuit
Traitez vos documents automatiquement avec Parseur. Simple, puissant, gratuit.

Si vous choisissez d’utiliser le parsing par expressions régulières, notre moteur de modèles vous aidera à les gérer et nous vous donnons également accès à une bibliothèque de modèles affinés au fil des années. Vous pouvez sélectionner la meilleure méthode d’extraction pour votre cas : vous pouvez utiliser les expressions régulières, mais aussi la création et la reconnaissance de modèles visuels (parseur OCR), ou encore l’intelligence artificielle (parseur IA). Vous pouvez même combiner ces méthodes pour optimiser vos résultats.

Parseur vous permet également de contrôler et corriger les extractions, une étape essentielle pour améliorer la précision dans le temps.

Collecter les données extraites

Avec Python, vous pouvez parcourir tous les fichiers de factures d’un dossier donné et extraire les données de chacun. Supposons que nous extrayons le numéro de facture et le montant total, puis stockons le résultat au format CSV :

import os
import re

import pdftotext

# Parcourir tous les fichiers PDF du dossier
for filename in os.listdir("invoices/"):
    if not filename.endswith(".pdf"):
        continue

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

    # Afficher l'en-tête de colonnes CSV
    print("InvoiceNumber,TotalAmount")

    # Parcourir toutes les pages du PDF
    for page in pdf:
        # Extraire le numéro de facture
        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=",")

Nommez ce script extract_to_csv.py puis lancez-le : vous obtiendrez le numéro de facture et le montant total en sortie, à rediriger ensuite dans un fichier CSV à ouvrir avec votre tableur préféré (Excel, etc.) :

$ python extract_to_csv.py > invoices.csv

Dans Parseur, une fois les données extraites de vos factures, vous pouvez tout télécharger sous forme de tableur, ou les exporter directement vers votre logiciel comptable à l’aide des intégrations webhook directes, Make, Zapier ou Microsoft Power Automate. Vous pouvez également utiliser notre API pour récupérer les données au format JSON.

Conclusion

J’espère que cet article vous a été utile. En résumé, l’extraction de données de factures avec Python est un processus complexe, mais faisable dès lors que les formats sont constants et que vous pouvez y consacrer du temps.

Si vous disposez de peu de temps, vous pouvez tirer parti de l’expérience accumulée et des connaissances intégrées dans Parseur pour atteindre votre objectif plus rapidement : extraire des données de toutes vos factures avec souplesse et précision.


Dernière mise à jour le

Logiciel d'extraction de données basée sur l'IA.
Commencez à utiliser Parseur dès aujourd’hui.

Automatisez l'extraction de texte de vos e-mails, PDFs et tableurs.
Économisez des centaines d'heures de travail manuel.
Adoptez l'automatisation du travail avec 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