Documind Zet Rommelige PDF's en Scans Om in Schone JSON
Iedereen die ooit een parser voor bankafschriften of facturen heeft geschreven, kent deze pijn. Je neemt pdf-parse of klassieke OCR, draait het op een echt document, en krijgt een chaotische puinhoop van regels waar tabelkolommen niet uitlijnen, datums door elkaar raken met contractnummers, en totalen loskomen van regelitemnamen.
Met de opkomst van multimodale taalmodellen is documentparsing een stuk eenvoudiger geworden. Maar het aan elkaar knopen van pagina-naar-afbeelding conversie, modelindiening, structuurvalidatie en uiteindelijke JSON-assemblage vereist doorgaans honderden regels aan boilerplate-code.
Ik ben onlangs Documind tegengekomen op GitHub, een project van het DocumindHQ-team. Het is een kleine Node.js-bibliotheek die al het vuile werk doet van het extraheren van gestructureerde data uit ongestructureerde documenten.
Wat de bibliotheek kan doen
Onder de motorkap combineert Documind systeempagina-rendering utilities en vision-modellen. Het project groeide uit de populaire Zerox-tool, maar evolueerde naar een standalone platform voor het werken met dataschema's.
De bibliotheek lost vier specifieke taken op:
- Leest verschillende formaten: PDF, DOCX, HTML, TXT, PNG en JPG.
- Accepteert je veldschema en retourneert voorspelbare JSON gevuld met data uit het document.
- Werkt met zowel de OpenAI cloud API als lokale modellen via Llava of Llama 3.2 Vision.
- Converteert complexe multi-page documenten naar schone Markdown, met behoud van tabel- en lijststructuren.
Als je geen tijd hebt om handmatig een veldschema te definiëren, kan Documind er automatisch een genereren op basis van de inhoud van het eerste document.
Snelle start en systeemafhankelijkheden
De bibliotheek is geschreven in JavaScript voor Node.js versie 18 en hoger. Omdat het renderen van PDF-pagina's naar afbeeldingen low-level tools vereist, moet je Ghostscript en GraphicsMagick op je systeem installeren voordat je het npm-pakket installeert.
Op macOS gaat dit via Homebrew:
brew install ghostscript graphicsmagick
Op Ubuntu of Debian:
sudo apt-get update
sudo apt-get install -y ghostscript graphicsmagick
Daarna installeer je het pakket zelf:
npm install documind
Om met OpenAI te werken, maak je een .env bestand in de project root en geef je de key door:
OPENAI_API_KEY=your_openai_api_key
Hoe een dataschema definiëren
Het centrale idee achter Documind is dat je de vorm van het output object definieert door middel van een veldenarray. Elk veld heeft een naam, type (string, number, array, object, boolean, enum), en een tekstbeschrijving die dient als hint voor het neurale netwerk.
Hier is een voorbeeldschema voor het parsen van een bankafschrift met een geneste transactietabel:
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."
}
];
Geef nu het schema en de bestands-URL door aan de extract functie:
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();
Het resultaat is een kant-en-klaar object zonder de noodzaak om ruwe tekst met regex te parsen:
{
"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"
}
Kant-en-klare templates
Voor typische documenten zoals kassabonnen, facturen of standaardafschriften hoef je geen schema vanaf nul te schrijven. De bibliotheek bevat ingebouwde templates.
Je kunt de lijst met beschikbare presets als volgt bekijken:
import { templates } from 'documind';
console.log(templates.list());
En het aanroepen van parsing via template is nog eenvoudiger:
import { extract } from 'documind';
const result = await extract({
file: 'https://example.com/bank_statement.pdf',
template: 'bank_statement'
});
Lokale modellen en databeveiliging
Documenten bevatten vaak persoonlijke data, medische dossiers of vertrouwelijke financiële informatie die niet naar externe cloud API's kunnen worden gestuurd.
De ontwikkelaars van Documind hebben ondersteuning ingebouwd voor lokale vision-modellen. Je kunt Llama 3.2 Vision of Llava op je eigen GPU-server deployen en requests daar naartoe sturen. Het parsing-proces blijft hetzelfde, maar de data verlaat nooit je privénetwerk.
Waar op te letten
Voordat je het project in productie deployt, zijn er een paar nuances om te overwegen:
- AGPL v3.0 licentie. Als je van plan bent Documind direct in te bedden in een gesloten commerciële backend, kunnen de strikte AGPL-vereisten een juridisch probleem worden. In dat geval heeft het meer zin om documentverwerking te isoleren in een aparte microservice.
- Systeembinaries. Ghostscript en GraphicsMagick compliceren deployment in serverless omgevingen zoals AWS Lambda of Vercel Functions als je geen custom Docker-image bouwt.
Wie heeft er profijt van
Documind is perfect voor teams die inkomende documentverwerkingspijplijnen bouwen, fintech-diensten automatiseren, of ongestructureerde documentdatabases voorbereiden voor upload naar vector stores (RAG).
Het gereedschap elimineert de noodzaak om fragiele regex-gebaseerde parsers te schrijven en levert een getypt resultaat in slechts een paar regels code. Als je handmatige documentinvoer snel wilt automatiseren, is deze repository zeker het bekijken waard.
Gerelateerde projecten