Aller au contenu principal

Extraction JSON

Lit le document soumis et en extrait les données dans un JSON au format que vous définissez : numéro et date d'une facture, coordonnées d'un fournisseur, lignes d'un tableau, etc. Relié à la Sortie JSON, il fait du pipeline un portfolio d'extraction, qui renvoie ce JSON au lieu d'un document annoté.

Un portfolio d'extraction minimal se câble ainsi :

Document à annoter → Extraction JSON → Sortie JSON

Un Filtre de pages peut se placer avant le nœud, par exemple pour ne lire que la première page. Un Switch permet d'envoyer chaque type de document (facture, bon de commande…) vers un nœud d'extraction qui a son propre format.

Ports​

  • Entrée (gauche, type contenu) : le document. Une seule arête entrante.
  • Sortie (droite, type JSON) : se relie uniquement à la Sortie JSON.

Configuration​

  • Modèle IA : le modèle qui lit le document. Les modèles qui offrent une sortie structurée (OpenAI, Anthropic, Gemini, Ollama récent, la plupart des serveurs compatibles OpenAI comme LM Studio) donnent les résultats les plus fiables. En lecture par images, choisissez un modèle qui lit les images (voir plus bas).
  • Lecture du document :
    • Texte extrait : le texte produit par l'analyseur de documents. Fonctionne avec tous les modèles, c'est le moins cher.
    • Images des pages : chaque page est envoyée en image à un modèle vision. Meilleur sur les tableaux complexes, les mises en page à colonnes, les scans et les photos (formats acceptés : PDF et images JPG, PNG, TIFF, BMP).
    • Texte + images : le texte et l'image de chaque page. L'image fait foi pour la structure (tableaux, colonnes), le texte pour l'orthographe exacte des identifiants et des montants.
  • Indications : ce qu'il faut identifier et extraire, et comment. Par exemple le type de document attendu, les cas particuliers (« ignorer les lignes de sous-total ») ou la valeur à retenir quand il y en a plusieurs (« la date à retenir est la date d'échéance »).
  • Format JSON : les champs à remplir, édités dans le constructeur (bouton Éditer le format JSON).

Le constructeur de format JSON​

Chaque champ a :

  • un nom, qui devient la clé JSON (lettres, chiffres et _, sans chiffre en tête) ;
  • un type : Texte, Nombre, Entier, Oui / non, Date, Choix (liste de valeurs autorisées), Groupe (des champs regroupés) ou Liste (un élément par occurrence) ;
  • une description, obligatoire. C'est elle qui dit au modèle quoi chercher, où et sous quelle forme, par exemple « Numéro de la facture, en haut à droite (ex. F-2024-001) » ;
  • une case Obligatoire : si le champ n'est pas trouvé, le résultat est signalé non conforme.

Le bouton Tableau de lignes crée directement une liste dont chaque élément est un groupe de champs, par exemple une ligne de facture avec sa désignation, sa quantité et son montant.

L'aperçu à droite montre un exemple de sortie et le JSON Schema correspondant. Le format s'exporte en JSON Schema, et un JSON Schema existant s'importe (objets, tableaux, types simples, dates, énumérations, descriptions, champs obligatoires, références $defs). Ce qui n'est pas repris est signalé après l'import.

Réglages avancés​

  • Découpage en pages :
    • Automatique (par défaut) : le document part en un seul appel s'il tient dans la fenêtre de contexte du modèle, sinon il est traité par fenêtres de pages successives ;
    • Document entier en un appel ;
    • Toujours par fenêtres de pages.
  • Pages par fenêtre : plafond du nombre de pages envoyées ensemble. Vide, la taille de fenêtre est calculée d'après la fenêtre de contexte du modèle (Admin → Modèles IA). En lecture par images, 8 pages au plus par appel.
  • Passes de correction (défaut 2) : nombre de fois où un JSON non conforme est renvoyé au modèle avec la liste des écarts. 0 désactive la correction. Chaque passe est facturée.
  • Nombres et dates : lève les ambiguïtés de la normalisation. « 1,234 » vaut 1,234 en français et 1234 en anglais ; « 03/04/2024 » est le 3 avril en français et le 4 mars en anglais.
  • Taille des images (lecture par images) : plus grand côté des pages envoyées, 1568 px par défaut.

Comment le JSON est garanti​

  1. Sortie structurée du fournisseur. Le format est transmis au modèle comme schéma imposé : décodage contraint chez Ollama, mode strict chez OpenAI et les serveurs compatibles, appel d'outil chez Anthropic. Si le fournisseur refuse ce mode, le nœud bascule sur une consigne textuelle et extrait le premier objet JSON de la réponse.
  2. Normalisation. « 1 234,56 € » devient 1234.56, « 14/03/2024 » devient 2024-03-14, « Oui » devient true, une valeur de choix est ramenée à sa casse exacte. Les clés inconnues sont retirées et les clés manquantes ajoutées (null, liste vide).
  3. Contrôle et correction. Le résultat est validé contre le format. En cas d'écart (type incorrect, champ obligatoire vide, date illisible…), les écarts sont renvoyés au modèle, qui corrige, dans la limite des passes de correction.
  4. Verdict. Ce qui reste non conforme est rendu tel quel avec valid: false et la liste des écarts, plutôt qu'en échec silencieux.

Documents de plusieurs pages​

Quand le document ne tient pas en un appel, il est lu par fenêtres de pages consécutives. Chaque fenêtre reçoit en mémoire ce qui a déjà été extrait : les valeurs déjà trouvées, et pour chaque liste le nombre d'éléments et le dernier élément. Un tableau coupé par un saut de page se poursuit donc sans doublon. Les résultats sont ensuite fusionnés :

  • un champ simple garde la première valeur trouvée. Une valeur différente trouvée plus loin est signalée comme conflit ;
  • les listes sont mises bout à bout dans l'ordre des pages. Seule une ligne répétée à la jonction de deux fenêtres est retirée ;
  • les champs obligatoires sont contrôlés sur le résultat fusionné.

Si la réponse du modèle est trop longue et se trouve tronquée, la fenêtre est coupée en deux et relue.

Intercepteurs et lecture par images​

Les intercepteurs ne filtrent que du texte : impossible de masquer une donnée sur l'image d'une page. En lecture Images des pages ou Texte + images :

  • les intercepteurs sont passés sur la couche texte de chaque page ; une page sans texte (scan, photo) est lue par OCR uniquement pour ce contrôle ;
  • si un intercepteur de masquage se déclenche, le job est bloqué et aucune image n'est envoyée. Un intercepteur de blocage bloque comme d'habitude ;
  • si une page ne peut pas être lue pour ce contrôle, le job est bloqué lui aussi.

En lecture Texte extrait, les intercepteurs masquent le texte comme pour un agent.

Limites​

  • La lecture par images concerne les PDF et les images. Un document Word, PowerPoint, Excel ou OpenDocument est lu par son texte extrait, avec un avertissement dans les journaux.
  • En lecture par images, le Filtre de pages compte les pages physiques, pages blanches comprises.
  • Un Switch classe le document d'après son texte : sur un scan ou une photo sans texte, il prend la route par défaut.