Documind zamienia chaotyczne pliki PDF i skany w czysty JSON
Każdy, kto kiedykolwiek pisał parser do wyciągów bankowych lub faktur, zna ten ból. Używasz OCR lub klasycznego skanowania dokumentu i otrzymujesz chaotyczną masę linii, w której kolumny tabel są przesunięte, daty mieszają się z numerami kontraktów, a sumy odłączają się od nazw pozycji.
Dzięki pojawieniu się wielomodalnych modeli językowych, parsowanie dokumentów stało się zauważalnie łatwiejsze. Ale łączenie konwersji stron na obrazy, wysyłania do modelu, walidacji struktury i finalnego składania JSON-a zazwyczaj wymaga setek linii kodu szablonowego.
Ostatnio natknąłem się na Documind na GitHubie, projekt zespołu DocumindHQ. To niewielka biblioteka Node.js, która zajmuje się całą brudną robotą związaną z wyodrębnianiem ustrukturyzowanych danych z nieustrukturyzowanych dokumentów.
Co potrafi ta biblioteka
Pod maską Documind łączy narzędzia do renderowania stron systemowych i modele wizyjne. Projekt wywodzi się z popularnego narzędzia Zerox, ale ewoluował w samodzielną platformę do pracy ze schematami danych.
Biblioteka rozwiązuje cztery konkretne zadania:
- Odczytuje różne formaty: PDF, DOCX, HTML, TXT, PNG i JPG.
- Przyjmuje Twój schemat pól i zwraca przewidywalny JSON wypełniony danymi z dokumentu.
- Współpracuje zarówno z chmurowym API OpenAI, jak i modelami lokalnymi przez Llava lub Llama 3.2 Vision.
- Konwertuje złożone dokumenty wielostronicowe na czysty Markdown, zachowując strukturę tabel i list.
Jeśli nie masz czasu na ręczne definiowanie schematu pól, Documind może wygenerować go automatycznie na podstawie zawartości pierwszego dokumentu.
Szybki start i zależności systemowe
Biblioteka jest napisana w JavaScript dla Node.js w wersji 18 i nowszych. Ponieważ renderowanie stron PDF na obrazy wymaga niskopoziomowych narzędzi, musisz zainstalować Ghostscript i GraphicsMagick w swoim systemie przed instalacją pakietu npm.
Na macOS odbywa się to przez Homebrew:
brew install ghostscript graphicsmagick
Na Ubuntu lub Debian:
sudo apt-get update
sudo apt-get install -y ghostscript graphicsmagick
Po tym zainstaluj sam pakiet:
npm install documind
Aby pracować z OpenAI, utwórz plik .env w korzeniu projektu i przekaż klucz:
OPENAI_API_KEY=your_openai_api_key
Jak zdefiniować schemat danych
Centralną ideą Documind jest to, że definiujesz kształt obiektu wyjściowego przez tablicę pól. Każde pole ma nazwę, typ (string, number, array, object, boolean, enum) i opis tekstowy, który służy jako wskazówka dla sieci neuronowej.
Oto przykładowy schemat do parsowania wyciągu bankowego z zagnieżdżoną tabelą transakcji:
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."
}
];
Teraz przekaż schemat i URL pliku do funkcji 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();
Rezultatem jest gotowy do użycia obiekt bez konieczności parsowania surowego tekstu wyrażeniami regularnymi:
{
"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"
}
Gotowe szablony
Dla typowych dokumentów, takich jak paragony, faktury czy standardowe wyciągi, nie musisz pisać schematu od zera. Biblioteka zawiera wbudowane szablony.
Listę dostępnych presetów możesz sprawdzić w ten sposób:
import { templates } from 'documind';
console.log(templates.list());
A wywołanie parsowania przez szablon jest jeszcze prostsze:
import { extract } from 'documind';
const result = await extract({
file: 'https://example.com/bank_statement.pdf',
template: 'bank_statement'
});
Modele lokalne i bezpieczeństwo danych
Dokumenty często zawierają dane osobowe, dokumentację medyczną lub poufne informacje finansowe, których nie można wysyłać do zewnętrznych API chmurowych.
Twórcy Documind wbudowali obsługę lokalnych modeli wizyjnych. Możesz wdrożyć Llama 3.2 Vision lub Llava na własnym serwerze GPU i kierować tam żądania. Proces parsowania pozostaje taki sam, ale dane nigdy nie opuszczają Twojej prywatnej sieci.
Na co zwrócić uwagę
Przed wdrożeniem projektu do produkcji należy wziąć pod uwagę kilka niuansów:
- Licencja AGPL v3.0. Jeśli planujesz osadzić Documind bezpośrednio w zamkniętym komercyjnym backendzie, rygorystyczne wymagania AGPL mogą stanowić problem prawny. W takim przypadku bardziej sensowne jest izolowanie przetwarzania dokumentów w osobny mikroserwis.
- Pliki binarne systemowe. Ghostscript i GraphicsMagick komplikują wdrożenie w środowiskach serverless, takich jak AWS Lambda czy Vercel Functions, jeśli nie budujesz niestandardowego obrazu Docker.
Kto znajdzie to przydatne
Documind świetnie sprawdza się dla zespołów budujących potoki przetwarzania przychodzących dokumentów, automatyzujących usługi fintech lub przygotowujących nieustrukturyzowane bazy dokumentów do wgrania do wektorowych magazynów (RAG).
Narzędzie eliminuje konieczność pisania nietrwałych parserów opartych na wyrażeniach regularnych i daje Ci typowany wynik w zaledwie kilku liniach kodu. Jeśli musisz szybko zautomatyzować ręczne wprowadzanie dokumentów, to repozytorium zdecydowanie warto sprawdzić.
Powiązane projekty