mcpField
D
Docpick

Docpick

ローカル
github.com/QuartzUnit生産性128 週間前に更新

Docpick について

Docpickは、文書から構造化JSONを得たい開発者やデータチーム向けのローカル文書抽出パイプラインです。OCRとLLM抽出をカスタムスキーマと組み合わせ、フィールド間や文書間の検証にも対応します。

主な機能

  1. 01ローカルOCRとLLMによる文書抽出
  2. 02PydanticとJSON Schemaに対応
  3. 038種類の組み込み文書スキーマ
  4. 04フィールド規則と文書間検証
  5. 05ディレクトリの並列バッチ処理

活用シーン

  1. 01請求書やレシートから構造化データを抽出
  2. 02金額、日付、識別番号の抽出結果を検証
  3. 03貿易書類や税務書類を一括処理

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"arknill-docpick": {
"command": "uvx",
"args": [
"docpick"
]
}
}
}
起動コマンドuvx docpick

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypidocpick0.1.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Docpick

PyPI Python License Tests

한국어 문서 · llms.txt

ドキュメントを入力し、構造化 JSON を出力。ローカルで。独自のスキーマを使用できます。

docpick は、ローカル OCR エンジンとローカル LLM を組み合わせ、請求書、領収書、船荷証券、税務フォームなど、あらゆるドキュメントから構造化 JSON を抽出する、軽量でスキーマ駆動型のドキュメント抽出パイプラインです。

  • クラウド依存ゼロ — マシン上で完全に動作します(CPU または GPU)
  • カスタムスキーマ — 独自の Pydantic モデルを定義するか、組み込みの 8 種類のドキュメントスキーマを使用できます
  • 検証機能を内蔵 — チェックディジットの検証、フィールド間ルール、ドキュメント間の整合性
  • Apache 2.0 — GPL/AGPL 依存関係なし

インストール

pip install docpick            # core (LLM extraction only)
pip install docpick[paddle]    # + PaddleOCR (recommended)
pip install docpick[easyocr]   # + EasyOCR (Korean-optimized)
pip install docpick[got]       # + GOT-OCR2.0 (GPU, vision-language)
pip install docpick[all]       # all OCR backends

要件: Python 3.11 以降/LLM エンドポイント(vLLM、Ollama、または OpenAI 互換)

クイックスタート

Python API
from docpick import DocpickPipeline
from docpick.schemas import InvoiceSchema

pipeline = DocpickPipeline()
result = pipeline.extract("invoice.pdf", schema=InvoiceSchema)

print(result.data)           # Structured dict matching schema
print(result.validation)     # Validation errors/warnings
print(result.confidence)     # Per-field confidence scores
CLI
# Extract structured data
docpick extract invoice.pdf --schema invoice --output result.json

# OCR only (no LLM)
docpick ocr document.png --lang ko,en

# Validate extracted JSON
docpick validate result.json --schema invoice

# Batch process a directory
docpick batch ./documents/ --schema invoice --output ./results/ --concurrency 4

# List available schemas
docpick schemas list

# Show schema details
docpick schemas show invoice

組み込みスキーマ

スキーマドキュメントの種類主な検証
invoice商業請求書明細の合計、税 ID のチェックディジット、日付の順序
receipt小売店/レストランの領収書合計 = 小計 + 税額 + チップ
bill_of_lading海上/航空 B/Lコンテナ重量の合計、ISO 6346、HS コード形式
purchase_order発注書PO 合計 = 明細、納入日の順序
kr_tax_invoice韓国の電子税務請求書(세금계산서)事業者番号のチェックディジット(x2)、供給額/税額/合計額
bank_statement銀行取引明細書IBAN mod97、期間の日付順
id_documentパスポート/ID(ICAO 9303)MRZ、ISO 3166 国コード、日付範囲
certificate_of_origin原産地証明書ISO 3166 alpha-2 国コード

カスタムスキーマ

Pydantic で独自のスキーマを定義できます。

from pydantic import BaseModel
from docpick import DocpickPipeline
from docpick.validation.rules import SumEqualsRule, RequiredFieldRule

class MyDocument(BaseModel):
    """Custom document schema."""
    company_name: str | None = None
    total_amount: float | None = None
    tax_amount: float | None = None
    net_amount: float | None = None
    items: list[dict] | None = None

    class ValidationRules:
        rules = [
            RequiredFieldRule("company_name"),
            SumEqualsRule(["net_amount", "tax_amount"], "total_amount"),
        ]

pipeline = DocpickPipeline()
result = pipeline.extract("my_document.pdf", schema=MyDocument)

または、JSON Schema ファイルを使用できます。

docpick extract document.pdf --schema my_schema.json

検証

チェックディジットアルゴリズム
アルゴリズム用途
kr_business_number韓国の事業者登録番号(10 桁)
luhnクレジットカード番号
iso_6346輸送コンテナ番号
iban_mod97国際銀行口座番号
awb_mod7航空貨物運送状番号
mrz機械読取領域(パスポート/ID)
フィールド間ルール
ルール説明
SumEqualsRuleフィールドの合計が目標値と等しい(許容誤差あり)
DateBeforeRule日付 A は日付 B より前である必要があります
RequiredFieldRuleフィールドは null 以外かつ空でない必要があります
FieldEqualsRule2 つのフィールドは等しい必要があります
RangeRule数値フィールドが最小値/最大値の範囲内にあること
RegexRuleフィールドが正規表現パターンに一致すること
ドキュメント間の検証

関連するドキュメント(例:請求書 + B/L + 梱包明細書)間の整合性を検証します。

from docpick.validation.cross_document import create_trade_document_validator

validator = create_trade_document_validator()
result = validator.validate({
    "invoice": invoice_data,
    "bl": bl_data,
    "packing_list": packing_list_data,
    "certificate": certificate_data,
})
print(result.is_valid)

OCR エンジン

エンジン種類GPU言語最適な用途
PaddleOCR従来型 OCR任意111一般的なドキュメント(デフォルト)
EasyOCR従来型 OCR任意80+韓国語テキスト
GOT-OCR2.0視覚言語必須複数複雑なレイアウト
VLM視覚言語必須複数画像から直接 JSON を生成
2 階層の自動エンジン

デフォルトの auto エンジンは、信頼度に基づいてフォールバックします。

  1. Tier 1(CPU): PaddleOCR → EasyOCR
  2. Tier 2(GPU): GOT-OCR2.0 → VLM

Tier 1 の平均信頼度がしきい値(デフォルト 0.7)を下回ると、自動的に Tier 2 にエスカレーションします。

LLM プロバイダー

プロバイダーエンドポイントデフォルトモデル
vLLMhttp://localhost:8000/v1Qwen/Qwen3.5-32B-AWQ
Ollamahttp://localhost:11434qwen3.5:7b

CLI または YAML で設定できます。

docpick config set llm.provider ollama
docpick config set llm.base_url http://localhost:11434
docpick config set llm.model qwen3.5:7b

エラー処理

このパイプラインは、障害に強い設計になっています。

  • OCR の失敗 → 次に利用可能なエンジンへ自動的にフォールバックします
  • LLM の JSON 解析の失敗 → 修正プロンプトで自動的に再試行します(再試行は最大 1 回)
  • 部分的な結果 → 抽出できたデータを返し、エラーは result.errors に記録します
  • ドキュメントの読み込みの失敗 → エラーメッセージとともに空の結果を返します
result = pipeline.extract("damaged.pdf", schema=InvoiceSchema)
if result.errors:
    print("Pipeline warnings:", result.errors)
if result.data:
    print("Partial extraction:", result.data)

バッチ処理

並列ワーカーを使ってディレクトリ全体を処理します。

from docpick.batch import BatchProcessor
from docpick.schemas import InvoiceSchema

processor = BatchProcessor(concurrency=4)
result = processor.process_directory(
    "./invoices/",
    schema=InvoiceSchema,
    recursive=True,
)

print(f"Processed {result.succeeded}/{result.total} files")
for path, extraction in result.results.items():
    print(f"{path}: {extraction.data.get('total_amount')}")

アーキテクチャ

flowchart TD
    A["📄 Document\n(PDF / Image)"] --> B["DocumentLoader\n(pypdfium2)"]
    B --> C["Tier 1: OCR\n(PaddleOCR / EasyOCR)\nCPU"]
    C --> D{"Confidence\n≥ threshold?"}
    D -->|"yes"| F["LLM Extractor\n(vLLM / Ollama)\nSchema prompt"]
    D -->|"no"| E["Tier 2: VLM\n(GOT / VLM)\nGPU"]
    E --> F
    F --> G["Pydantic Validation"]
    G --> H["✅ ExtractionResult"]

ライセンス

Apache 2.0 — すべての依存関係は Apache 2.0 または MIT ライセンスです。


QuartzUnit エコシステムの一部です。データ収集、抽出、検索、AI エージェントの安全性を実現する、組み合わせ可能な Python ライブラリを提供しています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。