Cook Code Change

Cuisine et Code : Extraire les Secrets des Factures avec IA

March 19, 2025

 

Extraction et Analyse de Données de Factures PDF avec invoice2data et IA

 

Avoir une base de données à jour et facilement consultable des produits achetés est le souhait de tout chef, pouvoir comparer rapidement les prix, voir leurs variations et comment ils affectent le changement du coût des repas, réaliser un coût de repas réel. Jusqu'à présent, tout cela était réservé aux structures disposant d'un département administratif particulièrement développé : grandes chaînes, structures hôtelières importantes, entreprises de restauration collective. Pour un restaurant de taille moyenne ou petite, consacrer du temps à la compilation d'une base de données représente évidemment un engagement considérable. Ce qui se passe habituellement, c'est que les factures, après un contrôle visuel, sont transmises au comptable qui en fait un usage purement comptable. Aujourd'hui, il existe heureusement des outils de gestion de plus en plus avancés, qui nécessitent cependant du temps pour être maîtrisés et finissent souvent par être utilisés par des spécialistes externes à l'entreprise. En pensant à cela, j'ai commencé à réfléchir à des outils simples pour accélérer certaines opérations comme la création d'une base de données.

C'est la raison pour la quelle j'ai cherché une solution pour extraire automatiquement des données structurées à partir de factures PDF. Après avoir exploré différentes options, j'ai choisi invoice2data, une bibliothèque Python spécialisée dans l'extraction de données de factures. Cependant, les résultats étaient parfois incomplets ou imprécis. Pour améliorer la précision, j'ai intégré un modèle d'intelligence artificielle pour affiner et valider les données extraites.

Cet article présente le processus mis en place, les difficultés rencontrées et une analyse comparative des solutions d'IA disponibles sur le marché.


1. Processus d'Extraction des Données

L'objectif du script est de :

  • Extraire les données des factures PDF avec invoice2data
  • Compléter et corriger ces données avec un modèle d'IA
  • Sauvegarder les résultats dans des fichiers CSV (un pour les factures et un pour les articles)

Le processus suit ces étapes :

  1. Lecture du fichier PDF
  2. Extraction initiale avec invoice2data
  3. Extraction du texte complet avec pdfplumber (pour fournir plus d'informations à l'IA)
  4. Analyse et validation des données avec le modèle d'IA
  5. Structuration et normalisation des informations extraites
  6. Sauvegarde des données au format CSV

Ce système combine la fiabilité d'invoice2data avec la puissance de l'intelligence artificielle pour obtenir des résultats plus précis et complets.


2. Implémentation Technique

Extraction avec invoice2data

from invoice2data import extract_data
from invoice2data.extract.loader import read_templates

def traiter_facture_avec_invoice2data(chemin_pdf):
    templates = read_templates()
    try:
        result = extract_data(chemin_pdf, templates=templates)
        return result
    except Exception as e:
        print(f"Erreur lors de l'extraction avec invoice2data : {e}")
        return {}

Extraction du texte avec pdfplumber

import pdfplumber

def extraire_texte_du_pdf(chemin_pdf):
    try:
        with pdfplumber.open(chemin_pdf) as pdf:
            texte = "".join([page.extract_text() or "" for page in pdf.pages])
        return texte
    except Exception as e:
        print(f"Erreur lors de l'extraction du texte du PDF {chemin_pdf} : {e}")
        return ""

Traitement avec IA (Claude)

from anthropic import Anthropic

anthropic_client = Anthropic(api_key="VOTRE_CLE_API")

def ameliorer_avec_claude(donnees_facture, texte_pdf):
    prompt = f"""
    Voici les données extraites d'une facture : {donnees_facture}
    Voici le texte brut de la facture : {texte_pdf[:4000]}
    Extrais et corrige les informations au format JSON, incluant:
    - Numéro de facture
    - Date
    - Montant total
    - TVA (indique les différents taux si plusieurs sont présents)
    - Fournisseur
    - Articles/services avec quantité, prix unitaire, montant et taux de TVA
    """
    response = anthropic_client.messages.create(
        model="claude-3-7-sonnet-20250219",
        max_tokens=1000,
        system="Tu es un assistant spécialisé dans l'extraction de données de factures.",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content

Sauvegarde des données en CSV

import csv

def sauvegarder_factures_en_csv(liste_donnees):
    entetes = set()
    for donnees in liste_donnees:
        entetes.update(donnees.keys())
    
    with open("factures_extraites.csv", 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=sorted(list(entetes)))
        writer.writeheader()
        for donnees in liste_donnees:
            writer.writerow(donnees)

3. Limitations des OCR et Apport de l'IA

Les outils OCR traditionnels rencontrent plusieurs difficultés :

  • Problèmes de reconnaissance : Les polices inhabituelles ou manuscrites réduisent la précision
  • Mises en page complexes : Les tableaux, colonnes et formats non standard perturbent l'extraction
  • Informations manquantes : Certains champs peuvent être ignorés par l'OCR
  • Structures variables : Chaque fournisseur utilise son propre format de facture
  • Qualité d'image : Les numérisations de basse résolution compromettent l'extraction

L'intelligence artificielle permet de :

  • Contextualiser et interpréter les données mal extraites
  • Corriger et normaliser les valeurs (dates, numéros de facture, devises)
  • Compléter les données en inférant des informations manquantes
  • S'adapter à différents formats sans nécessiter de modèles prédéfinis
  • Extraire des données structurées même à partir de mises en page complexes ou variables

L'intégration d'un modèle d'IA permet donc d'obtenir un taux de précision significativement plus élevé par rapport aux seuls outils OCR.


4. Comparaison des API d'IA : Coûts et Efficacité

APIModèlesCoût (Inférence)PerformanceCaractéristiques distinctives
Claude (Anthropic)Claude 3.7 Sonnet5$ / M tokens (entrée)<br>15$ / M tokens (sortie)★★★★☆Excellent raisonnement<br>Forte capacité analytique
 Claude 3.5 Haiku0,25$ / M tokens (entrée)<br>1,25$ / M tokens (sortie)★★★☆☆Rapide et économique
OpenAIGPT-4o5$ / M tokens (entrée)<br>15$ / M tokens (sortie)★★★★★Performance supérieure<br>Multimodal
 GPT-3.5 Turbo0,5$ / M tokens (entrée)<br>1,5$ / M tokens (sortie)★★★☆☆Économique pour tâches simples
GoogleGemini 1.5 Pro7$ / M tokens (entrée)<br>21$ / M tokens (sortie)★★★★☆Contexte ultra-long (1M tokens)
Azure OCR + IAServices cognitifsVariable selon volume★★★★☆Optimisé pour documents d'entreprise
DeepSeekDeepSeek-V21,2$ / M tokens (entrée)<br>6$ / M tokens (sortie)★★★★☆Excellent rapport qualité/prix
Tesseract OCR-Gratuit★★★☆☆Efficace mais limité

Pour mon implémentation, j'ai choisi Claude AI (Anthropic) qui offre un excellent équilibre entre qualité et coût, avec une excellente compréhension contextuelle. Le meilleur choix dépend du budget disponible et du niveau de précision requis.


5. Considérations Pratiques

Aspects à évaluer dans le choix de l'API

  • Volume d'utilisation : Les grands volumes peuvent bénéficier de remises significatives
  • Contexte requis : Pour les factures complexes, les modèles avec un contexte plus long (Gemini, Claude) fonctionnent mieux
  • Budget : DeepSeek et Claude Haiku offrent d'excellentes performances à coût réduit
  • Exigences de précision : Pour les applications critiques, GPT-4o ou Claude 3.7 Sonnet sont préférables
  • Vitesse de traitement : Pour les grands volumes, des modèles plus rapides comme Claude Haiku sont optimaux

Optimisations pour Réduire les Coûts

  1. Prétraitement des PDF : Améliorer la qualité de l'image avant l'extraction
  2. Optimisation des prompts : Des instructions précises réduisent la taille de la sortie
  3. Mise en cache des résultats : Éviter de traiter à nouveau des factures identiques
  4. Traitement par lots : Traiter les factures en lot pendant les heures creuses
  5. Utilisation sélective de l'IA : Utiliser l'IA uniquement pour les factures complexes ou mal interprétées par l'OCR

Conclusion

La combinaison d'invoice2data avec un modèle d'intelligence artificielle fournit une solution robuste et efficace pour l'extraction de données des factures. Cette approche hybride surmonte les limitations des outils OCR traditionnels et permet de construire rapidement une base de données complète et précise des produits achetés.

Le système développé permet également aux restaurants de petite et moyenne taille d'accéder à des fonctionnalités d'analyse des coûts auparavant réservées aux grandes structures, améliorant la gestion des achats et optimisant le coût des plats.

Avec l'évolution continue des modèles d'intelligence artificielle et la réduction des coûts d'inférence, ces solutions deviendront de plus en plus accessibles, ouvrant de nouvelles possibilités pour l'automatisation de la gestion administrative dans le secteur de la restauration. 🚀
Vous voulez essayer ? Le script est disponible https://github.com/MicheleValsania/projet_factures.git– testez-le avec vos factures et partagez vos idées pour l’améliorer !
Un grand merci à l’équipe d’Invoice-X pour leur bibliothèque invoice2data, qui m’a servi de fondation pour extraire les données des factures avant de les enrichir avec une IA."