>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
JavaScript

Documind transforme les PDF désordonnés et les scans en JSON propre

Quiconque a déjà écrit un analyseur pour des relevés bancaires ou des factures connaît cette galère. Vous utilisez pdf-parse ou l'OCR classique, vous l'appliquez sur un vrai document, et vous obtenez un chaos de lignes où les colonnes des tableaux sont mal alignées, les dates se mélangent aux numéros de contrat, et les totaux se détachent des noms des postes.

Avec l'avènement des modèles de langage multimodaux, l'analyse de documents est devenue nettement plus simple. Mais assembler la conversion page-vers-image, la soumission au modèle, la validation de structure et l'assemblage final du JSON nécessite généralement des centaines de lignes de code répétitif.

Je suis récemment tombé sur Documind sur GitHub, un projet de l'équipe DocumindHQ. C'est une petite bibliothèque Node.js qui gère tout le travail fastidieux d'extraction de données structurées à partir de documents non structurés.

Join us on Discord

Ce que la bibliothèque peut faire

En coulisses, Documind combine les utilitaires de rendu de pages système et les modèles de vision. Le projet est né de l'outil populaire Zerox mais a évolué vers une plateforme autonome pour travailler avec des schémas de données.

La bibliothèque résout quatre tâches spécifiques :

  1. Lit différents formats : PDF, DOCX, HTML, TXT, PNG et JPG.
  2. Accepte votre schéma de champs et retourne du JSON prévisible peuplé de données provenant du document.
  3. Fonctionne avec l'API cloud OpenAI et les modèles locaux via Llava ou Llama 3.2 Vision.
  4. Convertit les documents multi-pages complexes en Markdown propre, en préservant les structures de tableaux et de listes.

Si vous n'avez pas le temps de définir manuellement un schéma de champs, Documind peut en générer un automatiquement en fonction du contenu du premier document.

Démarrage rapide et dépendances système

La bibliothèque est écrite en JavaScript pour Node.js version 18 et supérieure. Comme le rendu des pages PDF en images nécessite des outils de bas niveau, vous devez installer Ghostscript et GraphicsMagick dans votre système avant d'installer le package npm.

Sur macOS, cela se fait via Homebrew :

brew install ghostscript graphicsmagick

Sur Ubuntu ou Debian :

sudo apt-get update
sudo apt-get install -y ghostscript graphicsmagick

Après cela, installez le package lui-même :

npm install documind

Pour travailler avec OpenAI, créez un fichier .env à la racine du projet et transmettez la clé :

OPENAI_API_KEY=your_openai_api_key

Comment définir un schéma de données

L'idée centrale derrière Documind est que vous définissez la forme de l'objet de sortie via un tableau de champs. Chaque champ a un nom, un type (string, number, array, object, boolean, enum), et une description textuelle qui sert d'indice pour le réseau neuronal.

Voici un exemple de schéma pour analyser un relevé bancaire avec un tableau de transactions imbriqué :

const schema = [
  {
    name: "accountNumber",
    type: "string",
    description: "The account number of the bank statement."
  },
  {
    name: "openingBalance",
    type: "number",
    description: "The opening balance of the account."
  },
  {
    name: "transactions",
    type: "array",
    description: "List of transactions in the account.",
    children: [
      {
        name: "date",
        type: "string",
        description: "Transaction date."
      },
      {
        name: "creditAmount",
        type: "number",
        description: "Credit Amount of the transaction."
      },
      {
        name: "debitAmount",
        type: "number",
        description: "Debit Amount of the transaction."
      },
      {
        name: "description",
        type: "string",
        description: "Transaction description."
      }
    ]
  },
  {
    name: "closingBalance",
    type: "number",
    description: "The closing balance of the account."
  }
];

Maintenant, transmettez le schéma et l'URL du fichier à la fonction extract :

import { extract } from 'documind';

async function main() {
  const result = await extract({
    file: 'https://example.com/bank_statement.pdf',
    schema
  });

  console.log(JSON.stringify(result, null, 2));
}

main();

Le résultat est un objet prêt à l'emploi sans avoir besoin d'analyser le texte brut avec des regex :

{
  "success": true,
  "pages": 1,
  "data": {
    "accountNumber": "100002345",
    "openingBalance": 3200,
    "transactions": [
      {
        "date": "2021-05-12",
        "creditAmount": null,
        "debitAmount": 100,
        "description": "transfer to Tom"
      },
      {
        "date": "2021-05-12",
        "creditAmount": 50,
        "debitAmount": null,
        "description": "For lunch the other day"
      }
    ],
    "closingBalance": 2420
  },
  "fileName": "bank_statement.pdf"
}

Modèles prêts à l'emploi

Pour les documents typiques comme les reçus, les factures ou les relevés standard, vous n'avez pas besoin d'écrire un schéma from scratch. La bibliothèque inclut des modèles intégrés.

Vous pouvez vérifier la liste des préréglages disponibles comme ceci :

import { templates } from 'documind';

console.log(templates.list());

Et invoquer l'analyse par modèle est encore plus simple :

import { extract } from 'documind';

const result = await extract({
  file: 'https://example.com/bank_statement.pdf',
  template: 'bank_statement'
});

Modèles locaux et sécurité des données

Les documents contiennent souvent des données personnelles, des dossiers médicaux ou des informations financières confidentielles qui ne peuvent pas être envoyées aux API cloud externes.

Les développeurs de Documind ont intégré le support des modèles de vision locaux. Vous pouvez déployer Llama 3.2 Vision ou Llava sur votre propre serveur GPU et y diriger les requêtes. Le processus d'analyse reste le même, mais les données ne quittent jamais votre réseau privé.

Ce qu'il faut garder à l'esprit

Avant de déployer le projet en production, il y a quelques nuances à considérer :

  • Licence AGPL v3.0. Si vous prévoyez d'intégrer Documind directement dans un backend commercial fermé, les exigences strictes de l'AGPL peuvent devenir un problème juridique. Dans ce cas, il est plus judicieux d'isoler le traitement des documents dans un microservice séparé.
  • Binaires système. Ghostscript et GraphicsMagick compliquent le déploiement dans les environnements serverless comme AWS Lambda ou Vercel Functions si vous ne construisez pas une image Docker personnalisée.

Qui trouvera cela utile

Documind est idéal pour les équipes qui construisent des pipelines de traitement de documents entrants, automatisent des services fintech, ou préparent des bases de données de documents non structurés pour l'upload vers des vector stores (RAG).

L'outil élimine le besoin d'écrire des analyseurs fragiles basés sur des regex et vous donne un résultat typé en quelques lignes de code. Si vous avez besoin d'automatiser rapidement la saisie manuelle de documents, ce dépôt mérite définitivement d'être consulté.

Projets similaires