Documindで乱雑なPDFやスキャンをクリーンなJSONに変換
銀行取引明細や請求書の解析 프로그램을書いたことがある人なら、この的痛苦を経験したことがあるはずです。Tesseractや古典的なOCRで実際のドキュメントを処理すると、テーブルの列がずれていたり、日付が契約番号と混同されていたり、合計額が明細項目名から切り離されていたりと、 Chaosな行の塊になってしまいます。
マルチモーダル言語モデルの登場により、ドキュメント解析は大幅に容易になりました。しかし、ページを画像に変換し、モデルに送信し、構造を検証し、最終的なJSONに組み上げるには、通常は何百行ものボイラープレートコードが必要です。
GitHubでDocumindを見つけました。DocumindHQチームが開発したプロジェクトで、非構造化ドキュメントから構造化データを抽出する面倒な作業をすべて処理する、小さなNode.jsライブラリです。
このライブラリできること
Documindは、内部でシステムページレンダリングユーティリティとビジョンモデルを組み合わせています。このプロジェクトは人気のZeroxツールから生まれ、データスキーマを操作するためのスタンドアロンプラットフォームに進化しました。
このライブラリは4つの特定のタスクを解決します:
- さまざまなフォーマットを読み込み:PDF、DOCX、HTML、TXT、PNG、JPG。
- フィールドスキーマを受け取り、ドキュメントから抽出したデータで満たされた予測可能なJSONを返します。
- OpenAIクラウドAPIと、LlavaやLlama 3.2 Visionを介したローカルモデルの両方で動作します。
- 複雑なマルチページドキュメントをクリーンなMarkdownに変換し、テーブルやリスト構造を保持します。
フィールドスキーマを手動で定義する時間がない場合、Documindは最初のドキュメントの内容に基づいてスキーマを自動生成できます。
クイックスタートとシステム依存関係
このライブラリはNode.jsバージョン18以上で動作するJavaScriptで書かれています。PDFページを画像にレンダリングするには低レベルツールが必要なため、npmパッケージをインストールする前にシステムにGhostscriptとGraphicsMagickをインストールする必要があります。
macOSでは、Homebrewでインストールします:
brew install ghostscript graphicsmagick
UbuntuまたはDebianの場合:
sudo apt-get update
sudo apt-get install -y ghostscript graphicsmagick
その後、パッケージ自体をインストールします:
npm install documind
OpenAIで動作させるには、プロジェクトルートに.envファイルを作成し、鍵を渡します:
OPENAI_API_KEY=your_openai_api_key
データスキーマの定義方法
Documindの中核的なアイデアは、フィールド配列を通じて出力オブジェクトの形状を定義することです。各フィールドには名前、タイプ(string、number、boolean、array、object、date)、ニューラルネットワークへのヒントとして機能するテキスト説明があります。
ネストされたトランザクションテーブルを含む銀行取引明細を解析するためのスキーマの例:
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."
}
];
次に、スキーマとファイルURLをparse関数に渡します:
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();
結果は、生のテキストを正規表現で解析する必要なく、すぐに使用できるオブジェクトです:
{
"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"
}
готовые шаблоны
領収書、請求書、标准的な明細書などの一般的なドキュメントには、ゼロからスキーマを作成する必要はありません。ライブラリには組み込みテンプレートが含まれています。
利用可能なプリセットのリストは次のように確認できます:
import { templates } from 'documind';
console.log(templates.list());
テンプレートによる解析の呼び出しはさらに簡単です:
import { extract } from 'documind';
const result = await extract({
file: 'https://example.com/bank_statement.pdf',
template: 'bank_statement'
});
ローカルモデルとデータセキュリティ
ドキュメントには、個人データ、医療記録、外部クラウドAPIに送信できない機密性の高い財務情報が含まれていることがよくあります。
Documindの開発者はローカルビジョンモデルのサポートを組み込んでいます。Llama 3.2 VisionまたはLlavaを独自のGPUサーバーにデプロイし、要求をそこに направлятьことができます。解析プロセスは同じままですが、データがプライベートネットワークから出ることはありません。
注意すべき点
プロジェクトを本番環境にデプロイする前に、いくつかのニュアンスを考慮する必要があります:
- AGPL v3.0ライセンス。Documindを閉じた商用バックエンドに直接埋め込む予定の場合、厳格なAGPL要件が法的問題になる可能性があります。その場合は、ドキュメント処理を個別のマイクロサービスとして分離する方が賢明です。
- システムバイナリ。GhostscriptとGraphicsMagickは、カスタムDockerイメージを構築していない場合、AWS LambdaやVercel Functionsなどのサーバーレス環境でのデプロイを複雑にします。
誰が役立つのか
Documindは、着信ドキュメント処理パイプラインの構築、fintechサービスの自動化、またはベクトルストア(RAG)にアップロードするための非構造化ドキュメントデータベースの準備を行うチームに最適です。
このツールは、壊れやすい正規表現ベースの解析 프로그램을書く必要性を排除し、数行のコードで型付けされた結果をすぐに得られます。手動のドキュメント入力を迅速に自動化する必要がある場合は、このリポジトリは必ずチェックする価値があります。
関連プロジェクト