Documind transforma PDFs bagunçados e digitalizações em JSON limpo
Qualquer pessoa que já escreveu um parser para extratos bancários ou faturas conhece essa dor. Você pega pdf-parse ou OCR clássico, roda em um documento real e obtém uma bagunça caótica de linhas onde colunas de tabelas ficam desalinhadas, datas se misturam com números de contratos e totais se desconectam dos nomes dos itens.
Com o advento dos modelos de linguagem multimodais, o parsing de documentos ficou notavelmente mais fácil. Mas combinar conversão página-a-imagem, submissão ao modelo, validação de estrutura e montagem do JSON final tipicamente requer centenas de linhas de código boilerplate.
Recentemente encontrei o Documind no GitHub, um projeto da equipe DocumindHQ. É uma pequena biblioteca Node.js que cuida de todo o trabalho pesado de extrair dados estruturados de documentos não estruturados.
O que a biblioteca pode fazer
Por baixo do capô, o Documind combina utilitários de renderização de páginas do sistema e modelos de visão. O projeto surgiu da ferramenta popular Zerox, mas evoluiu para uma plataforma independente para trabalhar com schemas de dados.
A biblioteca resolve quatro tarefas específicas:
- Lê vários formatos: PDF, DOCX, HTML, TXT, PNG e JPG.
- Aceita seu schema de campos e retorna JSON previsível preenchido com dados do documento.
- Funciona tanto com a API em nuvem da OpenAI quanto com modelos locais via Llava ou Llama 3.2 Vision.
- Converte documentos complexos de múltiplas páginas em Markdown limpo, preservando estruturas de tabelas e listas.
Se você não tem tempo para definir manualmente um schema de campos, o Documind pode gerar um automaticamente com base no conteúdo do primeiro documento.
Início rápido e dependências do sistema
A biblioteca é escrita em JavaScript para Node.js versão 18 e superior. Como a renderização de páginas PDF em imagens requer ferramentas de baixo nível, você precisa instalar o Ghostscript e o GraphicsMagick no seu sistema antes de instalar o pacote npm.
No macOS, isso é feito via Homebrew:
brew install ghostscript graphicsmagick
No Ubuntu ou Debian:
sudo apt-get update
sudo apt-get install -y ghostscript graphicsmagick
Depois disso, instale o pacote em si:
npm install documind
Para trabalhar com a OpenAI, crie um arquivo .env na raiz do projeto e passe a chave:
OPENAI_API_KEY=your_openai_api_key
Como definir um schema de dados
A ideia central por trás do Documind é que você define o formato do objeto de saída através de um array de campos. Cada campo tem um nome, tipo (string, number, array, object, boolean, enum) e uma descrição em texto que serve como dica para a rede neural.
Aqui está um exemplo de schema para fazer parsing de um extrato bancário com uma tabela de transações aninhada:
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."
}
];
Agora passe o schema e a URL do arquivo para a função 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();
O resultado é um objeto pronto para uso sem a necessidade de parsear texto bruto com 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"
}
Templates prontos
Para documentos típicos como recibos, faturas ou extratos padrão, você não precisa escrever um schema do zero. A biblioteca inclui templates embutidos.
Você pode verificar a lista de presets disponíveis assim:
import { templates } from 'documind';
console.log(templates.list());
E invocar o parsing por template é ainda mais simples:
import { extract } from 'documind';
const result = await extract({
file: 'https://example.com/bank_statement.pdf',
template: 'bank_statement'
});
Modelos locais e segurança de dados
Documentos frequentemente contêm dados pessoais, registros médicos ou informações financeiras confidenciais que não podem ser enviadas para APIs em nuvem externas.
Os desenvolvedores do Documind construíram suporte para modelos de visão locais. Você pode fazer deploy do Llama 3.2 Vision ou Llava no seu próprio servidor GPU e direcionar as requisições para lá. O processo de parsing permanece o mesmo, mas os dados nunca saem da sua rede privada.
O que ter em mente
Antes de fazer deploy do projeto em produção, há algumas nuances a considerar:
- Licença AGPL v3.0. Se você planeja embedar o Documind diretamente em um backend comercial fechado, os requisitos rígidos da AGPL podem se tornar um problema legal. Nesse caso, faz mais sentido isolar o processamento de documentos em um microsserviço separado.
- Binários do sistema. O Ghostscript e o GraphicsMagick complicam o deploy em ambientes serverless como AWS Lambda ou Vercel Functions se você não estiver construindo uma imagem Docker customizada.
Para quem é útil
O Documind é uma ótima escolha para equipes que constroem pipelines de processamento de documentos de entrada, automatizam serviços fintech ou preparam bancos de dados de documentos não estruturados para upload em vector stores (RAG).
A ferramenta elimina a necessidade de escrever parsers frágeis baseados em regex e te dá um resultado tipado em apenas algumas linhas de código. Se você precisa automatizar rapidamente a entrada manual de documentos, este repositório definitivamente vale a pena conferir.
Projetos relacionados