Documind verwandelt chaotische PDFs und Scans in sauberes JSON
Jeder, der schon einmal einen Parser für Kontoauszüge oder Rechnungen geschrieben hat, kennt diesen Schmerz. Man nimmt pdf-parse oder klassisches OCR, wendet es auf ein echtes Dokument an und erhält ein chaotisches Durcheinander von Zeilen, bei dem Tabellenspalten falsch ausgerichtet sind, Daten sich mit Vertragsnummern vermischen und Summen von den Positionen getrennt werden.
Mit dem Aufkommen multimodaler Sprachmodelle ist die Dokumentenverarbeitung deutlich einfacher geworden. Aber das Zusammenfügen von Seiten-zu-Bild-Konvertierung, Modelleinreichung, Strukturvalidierung und finaler JSON-Zusammenstellung erfordert typischerweise Hunderte von Zeilen an Boilerplate-Code.
Ich bin kürzlich auf Documind auf GitHub gestoßen, ein Projekt des DocumindHQ-Teams. Es ist eine kleine Node.js-Bibliothek, die die gesamte mühsame Arbeit der strukturierten Datenextrahierung aus unstrukturierten Dokumenten übernimmt.
Was die Bibliothek leisten kann
Im Hintergrund kombiniert Documind Systemseiten-Rendering-Tools und Vision-Modelle. Das Projekt ist aus dem beliebten Zerox-Tool hervorgegangen, hat sich aber zu einer eigenständigen Plattform für die Arbeit mit Datenschemas weiterentwickelt.
Die Bibliothek löst vier spezifische Aufgaben:
- Liest verschiedene Formate: PDF, DOCX, HTML, TXT, PNG und JPG.
- Nimmt Ihr Feldschema entgegen und gibt vorhersagbares JSON zurück, das mit Daten aus dem Dokument gefüllt ist.
- Funktioniert sowohl mit der OpenAI-Cloud-API als auch mit lokalen Modellen über Llava oder Llama 3.2 Vision.
- Konvertiert komplexe mehrseitige Dokumente in sauberes Markdown, wobei Tabellen- und Listenstrukturen erhalten bleiben.
Wenn Sie keine Zeit haben, ein Feldschema manuell zu definieren, kann Documind eines automatisch basierend auf dem Inhalt des ersten Dokuments generieren.
Schnellstart und Systemabhängigkeiten
Die Bibliothek ist in JavaScript für Node.js Version 18 und höher geschrieben. Da das Rendern von PDF-Seiten in Bilder low-level Tools erfordert, müssen Sie Ghostscript und GraphicsMagick in Ihrem System installieren, bevor Sie das npm-Paket installieren.
Unter macOS geschieht dies über Homebrew:
brew install ghostscript graphicsmagick
Unter Ubuntu oder Debian:
sudo apt-get update
sudo apt-get install -y ghostscript graphicsmagick
Danach installieren Sie das Paket selbst:
npm install documind
Um mit OpenAI zu arbeiten, erstellen Sie eine .env-Datei im Projektstammverzeichnis und übergeben den Schlüssel:
OPENAI_API_KEY=your_openai_api_key
So definieren Sie ein Datenschema
Die zentrale Idee hinter Documind ist, dass Sie die Form des Ausgabeobjekts durch ein Feldarray definieren. Jedes Feld hat einen Namen, einen Typ (string, number, array, object, boolean, enum) und eine Textbeschreibung, die als Hinweis für das neuronale Netzwerk dient.
Hier ist ein Beispielschema zum Parsen eines Kontoauszugs mit einer verschachtelten Transaktionstabelle:
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."
}
];
Übergeben Sie nun das Schema und die Datei-URL an die extract-Funktion:
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();
Das Ergebnis ist ein sofort verwendbares Objekt, ohne dass roher Text mit Regex geparst werden muss:
{
"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"
}
Fertige Vorlagen
Für typische Dokumente wie Quittungen, Rechnungen oder Standard-Kontoauszüge müssen Sie kein Schema von Grund auf schreiben. Die Bibliothek enthält integrierte Vorlagen.
Sie können die Liste der verfügbaren Presets wie folgt abrufen:
import { templates } from 'documind';
console.log(templates.list());
Und das Aufrufen des Parsings nach Vorlage ist sogar noch einfacher:
import { extract } from 'documind';
const result = await extract({
file: 'https://example.com/bank_statement.pdf',
template: 'bank_statement'
});
Lokale Modelle und Datensicherheit
Dokumente enthalten oft persönliche Daten, medizinische Aufzeichnungen oder vertrauliche Finanzinformationen, die nicht an externe Cloud-APIs gesendet werden können.
Die Entwickler von Documind haben die Unterstützung für lokale Vision-Modelle eingebaut. Sie können Llama 3.2 Vision oder Llava auf Ihrem eigenen GPU-Server bereitstellen und Anfragen dorthin leiten. Der Parsing-Prozess bleibt derselbe, aber die Daten verlassen niemals Ihr privates Netzwerk.
Worauf Sie achten sollten
Bevor Sie das Projekt in der Produktion einsetzen, gibt es einige Nuancen zu beachten:
- AGPL v3.0-Lizenz. Wenn Sie planen, Documind direkt in ein geschlossenes kommerzielles Backend einzubetten, können die strengen AGPL-Anforderungen zum rechtlichen Problem werden. In diesem Fall macht es mehr Sinn, die Dokumentenverarbeitung in einen separaten Microservice auszulagern.
- System-Binaries. Ghostscript und GraphicsMagick erschweren die Bereitstellung in serverlosen Umgebungen wie AWS Lambda oder Vercel Functions, wenn Sie kein benutzerdefiniertes Docker-Image erstellen.
Für wen es nützlich ist
Documind ist ideal für Teams, die eingehende Dokumentenverarbeitungs-Pipelines aufbauen, Fintech-Dienste automatisieren oder unstrukturierte Dokumentdatenbanken für den Upload in Vektorspeicher (RAG) vorbereiten.
Das Tool macht das Schreiben von fragilem regex-basiertem Parser-Code überflüssig und liefert Ihnen in nur wenigen Zeilen Code ein typisiertes Ergebnis. Wenn Sie die manuelle Dateneingabe schnell automatisieren müssen, lohnt es sich definitiv, dieses Repository anzusehen.
Ähnliche Projekte