>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
JavaScript

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.

Dołącz do nas na Discordzie

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:

  1. Odczytuje różne formaty: PDF, DOCX, HTML, TXT, PNG i JPG.
  2. Przyjmuje Twój schemat pól i zwraca przewidywalny JSON wypełniony danymi z dokumentu.
  3. Współpracuje zarówno z chmurowym API OpenAI, jak i modelami lokalnymi przez Llava lub Llama 3.2 Vision.
  4. 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