2026 年版オープンソース PDF から JSON への変換モデルガイド
MarkTechPost は、エンタープライズデータ構造化の標準であるオープンソース PDF 抽出モデル「lift」と「NuExtract 3」を比較し、ローカル実行によるコスト削減とプライバシー保護の実現可能性を詳述している。
キーポイント
PDF 抽出の二大カテゴリ定義
事前に定義されたフィールド値を取得する「スキーマ駆動型」と、ドキュメント全体のレイアウトや構造を再構築する「ドキュメント解析」の明確な区別と用途説明。
Datalab lift モデルの詳細
Qwen 3.5 ベースの 9B ビジョンモデルで、スキーマ制約デコーディングにより JSON の整合性を保証し、225 ドキュメントベンチマークで 90.2% のフィールド精度を達成。
ローカル実行によるコスト・プライバシーメリット
API 利用時の高額費用やデータ外部送信のリスクを回避するため、オンプレミスでのオープンウェイトモデル利用が推奨される背景と利点を解説。
NuExtract 3 の統合機能と学習手法
構造化抽出とコンテンツ抽出を1つのモデルで統合し、リインフォースメントラーニングによる抽出固有の推論機能をオンオフ切り替え可能にしています。
IBM Docling の多様な形式対応とライセンス
PDF や Office 文書など多様なフォーマットを解析し、レイアウトや数式を保持したまま Markdown や JSON で出力する MIT ライセンスのオープンソースプロジェクトです。
MinerU のライセンス変更と商用利用
AGPL から Apache 2.0 ベースのカスタムライセンスへ変更され、複雑なレイアウトへの対応に加え、商用展開における摩擦が低減されています。
olmOCR 2 の強化とコスト効率
Ai2 が公開した 7B モデルは検証可能な報酬による強化学習で訓練され、複雑なレイアウトでも高い精度(82.4)を達成しています。
影響分析・編集コメントを表示
影響分析
この記事は、LLM エージェントや RAG システムの実装において、非構造化データの前処理というボトルネックを解消するための具体的な技術的解決策(ローカル実行可能なオープンソースモデル)を提供しています。特に、API 依存によるコスト増とセキュリティリスクを回避する「オンプレミス化」の潮流を後押しし、開発者が自社のインフラで高品質なデータ抽出を実現できる道筋を示すことで、業界の実装標準に大きな影響を与える可能性があります。
編集コメント
API 依存から脱却し、データプライバシーを確保しながら高精度な抽出を実現するローカルモデルの登場は、実務レベルでの AI 導入における重要な転換点です。特にライセンス条件の明記がある点は、企業の採用判断において極めて重要です。
エンタープライズデータの多くはまだ PDF、スキャン画像、スライド資料の中に眠っています。大規模言語モデルやエージェントは、データが構造化された JSON 形式に変換されるまでそれらを利用できません。オープンソースの文書抽出技術は、自社のハードウェア上でこの変換を行うための標準的な方法となっています。
「PDF から JSON へ」という言葉の下には、2 つの異なる問題が隠されています。1 つ目はスキーマ駆動型抽出です。これは特定のフィールドを定義し、モデルにその値を入力させるアプローチです。2 つ目は文書パース(解析)です。これはページを構造化された JSON や Markdown として再構築するものです。多くのチームはどちらか一方、あるいは両方が必要となります。間違ったカテゴリを選択すると、実質的な時間の損失につながります。
ここでオープンウェイトモデルが重要になります。コストとプライバシーの観点からです。プロプライエタリな API は、100 万ページあたり数千ドルのコストがかかることがあり、かつ文書をオンプレミス環境外へ送信する必要があります。ローカルモデルはこれらの制約をすべて解消します。以下に、実際の機能別にグループ化された、評価する価値のあるモデルとツールキットを紹介します。
2 つのカテゴリ、1 つの言葉
スキーマ駆動型抽出は、文書と JSON スキーマを受け取り、指定したフィールドに対する値を返します。事前にフィールドが明確な請求書、フォーム、契約書、領収書などに使用してください。
文書パース(解析)は、文書そのものを再構築します。レイアウト、読み順、テーブル、数式、コードを検出し、JSON または Markdown としてエクスポートします。検索拡張生成 (RAG) やエージェント用にクリーンなコーパスを準備する際に使用してください。
カテゴリ 1: スキーマ駆動型構造化抽出
Datalab lift
lift は、Marker や Surya の開発チームである Datalab が提供する 9B ビジョンモデルです。JSON スキーマを指定すると、そのスキーマに一致する JSON を返します。スキーマ制約付きデコーディングにより、出力が有効な JSON であることが保証されます。このモデルは Qwen 3.5 を基盤としており、Hugging Face を介してローカルで実行するか、vLLM サーバーを介してリモートで実行できます。
複数ページのドキュメントを単一のパスで処理でき、ページにまたがる値の抽出も可能です。CLI、Python API、スキーマの構築とテスト用の Streamlit『Schema Studio』が同梱されています。
pip install lift-pdf
vLLM サーバーを開始し、指定されたスキーマへ抽出を実行
lift_vllm
lift_extract input.pdf ./output --schema schema.json
from lift import extract
result = extract("document.pdf", "schema.json")
if result.extraction is not None:
data = result.extraction # スキーマに一致する辞書
Datalab の 225 ドキュメントからなるベンチマークにおいて、lift は中央値レイテンシ 9.5 秒でフィールド精度 90.2% を達成しました。これは NuExtract3 (81.5%) や Qwen3.5-9B (76.3%) をフィールド精度で上回っています。ただし、Gemini Flash 3.5 (91.3%) やホストされた Datalab API (95.9%) には及びません。なお、すべてのローカルモデルにおいて完全ドキュメント精度は低く、lift は 20.9% です。一つのドキュメント内で全てのフィールドを正しく抽出することは依然として困難です。
コードは Apache-2.0 です。重み付けデータには、研究・個人利用、および資金調達額または収益が 500 万ドル未満のスタートアップ企業に対して無償で利用できる、改変された OpenRAIL-M ライセンスが適用されています。商用での自己ホスティングにはライセンスが必要であり、Datalab API と競合する目的での重み付けデータの使用は禁止されています。
NuMind NuExtract 3
NuExtract 3 は、NuMind が開発した 4B パラメータのビジョン・ランゲージモデルです。このモデルは、構造化抽出(ドキュメントから JSON への変換)とコンテンツ抽出(OCR から Markdown への変換)という 2 つのタスクを単一のモデルで統合しています。ユーザーは入力データと、必要なフィールドを記述した JSON テンプレートを提供します。このモデルは、抽出に特化した推論能力を強化するために強化学習を用いて訓練されており、リクエストごとにその機能をオンオフ切り替えることが可能です。
NuExtract 3 はマルチモーダルかつ多言語に対応しており、Qwen ベースのバックボーンを採用しています。vLLM を介して OpenAI 互換 API で提供され、Python SDK は pip install numind コマンドで入手できます。NuMind は、このサイズにおける構造化抽出とコンテンツ抽出のためのリファレンスオープンモデルとして位置付けています。商用利用前に必ずモデルカードを確認し、正確なライセンス条件を確認してください。
カテゴリ 2: ドキュメント解析から構造化 JSON および Markdown への変換
IBM Docling
Docling は IBM リサーチで開発が始まり、現在は LF AI & Data Foundation でホストされています。PDF、DOCX、PPTX、XLSX、HTML、画像など多様な形式を解析します。出力フォーマットには Markdown、HTML、ロスレス JSON、および DocTags が含まれます。その中核となるのは DoclingDocument 表現であり、レイアウト、読み順、表数式を LaTeX として保持する機能を提供します。
Docling は、エアギャップ環境向けにローカルで実行されます。LangChain、LlamaIndex、Crew AI、Haystack と統合され、MCP サーバーと Docling Serve モードを同梱しています。このプロジェクトは、寛容な MIT ライセンスの下で提供されています。IBM はまた、watsonx を通じて管理バージョンも提供しています。
IBM Granite-Docling-258M
Granite-Docling-258M は、IBM が開発したコンパクトな 258M パラメータのビジョンランゲージモデルです。Docling パイプライン内でワンショット文書変換を実行します。そのサイズにもかかわらず、OCR(光学文字認識)、レイアウト解析、テーブル、コード、数式の処理に対応し、DocTags を出力します。A100 GPU 上では、1 ページあたり平均約 0.35 秒で処理されます。
このモデルは Idefics3 アーキテクチャを基盤とし、SigLIP2 エンコーダーと Granite 165M の言語バックボーンを採用しています。Apache 2.0 ライセンスの下で公開されています。IBM は、これは一般的な画像理解ではなく文書変換のために構築されたものであると述べています。
OpenDataLab MinerU
OpenDataLab と上海人工知能研究所が共同開発した MinerU は、PDF、画像、DOCX、PPTX、XLSX 形式の入力を Markdown および JSON に変換します。これは処理パイプラインとビジョンランゲージモデルを組み合わせたものです。現在のバージョンである MinerU2.5-Pro は、ページを跨ぐテーブルやチャートを含む複雑なレイアウトの高解像度解析を対象としています。
MinerU は最近ライセンスを変更しました。AGPL-3.0 から、Apache 2.0 を基盤とし追加条件を付した独自ライセンスである「MinerU Open Source License」へ移行しました。この変更により、商用展開における摩擦が低減されています。
Datalab Marker
Marker は、文書を Markdown、JSON、チャンク、HTML に変換するための Datalab のパイプラインです。PDF、画像、PPTX、DOCX、XLSX、HTML、EPUB に対応しています。表、フォーム、数式、インライン数式、リンク、コードのフォーマットもサポートします。オプションの --use_llm フラグを使用すると、言語モデルが追加され、表やフォームの精度が向上します。
サードパーティ製の olmOCR-Bench スイートにおいて、Marker のスコアは約 76.1 です。そのコードは GPL-3.0 ライセンスで、モデル重み(weights)には修正された AI Pubs OpenRAIL-M ライセンスが適用されています。この重みライセンスは、研究、個人利用、および資金調達額または収益が 200 ドル未満のスタートアップ企業に対して無料で利用可能です。Datalab のマネージドプラットフォームでは、現在より新しい OCR モデルである Chandra が稼働しており、これは Apache-2.0 ライセンスで、HTML、Markdown、JSON を出力します。
Ai2 olmOCR 2
olmOCR 2 は、Allen Institute for AI (Ai2) が開発した 7B の OCR 特化型ビジョン言語モデルです。PDF から読み取り順序を保持しながら、クリーンなテキストと Markdown を生成します。複雑な多段レイアウトにおける表、数式、手書き文字の処理も可能です。このモデルは、検証可能な報酬からの強化学習(reinforcement learning)を用いてトレーニングされており、合成ユニットテストが報酬シグナルとして使用されています。
olmOCR 2 は、独自の olmOCR-Bench でスコア 82.4 を記録しており、同スイートにおける公開結果の中でも上位に位置します。Ai2 によると、自社の GPU を使用した場合のコストは、100 万ページあたり約 178 ドルと推定されています。ツールキットおよび allenai/olmOCR-2-7B-1025 のモデル重みは Apache-2.0 ライセンスです。現在のモデルは英語に焦点を当てたものです。
DeepSeek DeepSeek-OCR
DeepSeek-OCR は、2025 年 10 月にリリースされた DeepSeek 製のオープン OCR モデルです。このモデルは「文脈光学圧縮(contexts optical compression)」という技術を導入しており、テキストが豊富なページをコンパクトなビジョントークンとして表現し、その後これをテキストへと復号化します。これにより、一般的なビジョン・ランゲージモデルに比べてはるかに少ないトークン数で長文ドキュメントの処理が可能になります。
DeepEncoder と 3B の Mixture-of-Experts(専門家混合)デコーダーを使用しており、トークンあたり約 570M パラメータが活性化されます。プロンプトの内容に応じて、プレーンテキスト、Markdown、HTML テーブル、または構造化 JSON を出力でき、100 以上の言語に対応しています。コードは MIT ライセンスの下で公開されています。後継となる DeepSeek-OCR2 は 2026 年 1 月に登場しました。
汎用オプション:Qwen3-VL
アリババ製の Qwen3-VL はドキュメント特化型モデルではなく、多くの抽出モデルがベースとして利用する汎用的なマルチモーダルシリーズです。ページから Markdown、JSON、またはコードを返すようプロンプトで指示することができます。ほとんどのサイズは Apache 2.0 ライセンスの下で提供されています。専門的なモデルが要件に合わない場合の柔軟なフォールバックとして機能しますが、より高度なプロンプトエンジニアリングが必要であり、出力に関する保証は限定的です。
各オプションの比較
モデル名 | Org | サイズ | 機能 | 主要出力 | ライセンス
liftDatalab9B | Schema-driven extraction(スキーマ駆動型抽出) | JSON to your schema(あなたのスキーマへの JSON) | Apache-2.0 code / OpenRAIL-M weights
NuExtract 3 | NuMind | 4B | Schema extraction + OCR(スキーマ抽出+OCR) | JSON + Markdown | Open weights (see card)(オープンウェイト、カード参照)
Docling | IBM / LF AI & Data | Pipeline Layout parsing(パイプラインレイアウト解析) | Markdown, JSON, DocTags | MIT
Granite-Docling | IBM | 258M | One-shot conversion(ワンショット変換) | DocTags, Markdown | Apache-2.0
MinerUOpenDataLab~1.2B VLMLayout パースMarkdown, JSONMinerU オープンソースライセンス
MarkerDatalabPipelineLayout パースMarkdown, JSON, HTMLGPL-3.0 コード / OpenRAIL-M 重み
olmOCR 2Ai27BOCR からテキストへプレーンテキスト,MarkdownApache-2.0
DeepSeek-OCRDeepSeek3B MoE(約570M アクティブ)トークン圧縮を伴う OCR テキスト,Markdown, JSONMIT(コード)
Qwen3-VLAlibaba2B–235B 汎用 VLMMarkdown, JSON, コードApache-2.0(ほとんどのサイズ)
ベンチマークに関する注記:これらの数値は異なるスイートから得られたものであり、直接比較することはできません。lift の 90.2% は Datalab のスキーマ抽出ベンチマークにおけるフィールド精度です。olmOCR-Bench のスコア(olmOCR 2 が 82.4、Marker が 76.1)は、ユニットテストスコアリングによるコンテンツ抽出を測定しています。決定を下す前に、各候補に自社のドキュメントを実行して検証してください。
:root{
--bg:#0b0b0b; --card:#121212; --card2:#161616; --border:#232323;
--green:#76B900; --teal:#2bb673; --gray:#7a7a7a;
--text:#eaeaea; --muted:#9a9a9a; --dim:#6f6f6f;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
#mtp-app{
background:var(--bg); color:var(--text);
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
padding:26px 22px 18px; border:1px solid var(--border); border-radius:14px;
max-width:960px; margin:0 auto; line-height:1.5;
}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.head-kicker{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--green);font-weight:700;margin:0 0 6px}
h1{font-size:23px;line-height:1.25;margin:0 0 8px;font-weight:750}
.sub{color:var(--muted);font-size:14.5px;margin:0 0 18px;max-width:720px}
.legend{display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;font-size:12.5px;color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:7px}
.dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.dot.schema{background:var(--green)} .dot.parse{background:var(--teal)} .dot.general{background:var(--gray)}
.controls{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end;margin:0 0 18px}
.ctrl-group{display:flex;flex-direction:column;gap:7px}
.ctrl-label{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);font-weight:700}
.btns{display:flex;flex-wrap:wrap;gap:8px}
.btn{
background:var(--card2); color:var(--muted); border:1px solid var(--border);
padding:7px 13px; border-radius:999px; font-size:13px; cursor:pointer;
transition:all .15s ease; white-space:nowrap;
}
.btn:hover{color:var(--text);border-color:#3a3a3a}
.btn.active{background:var(--green);color:#0b0b0b;border-color:var(--green);font-weight:700}
.count{font-size:12.5px;color:var(--dim);margin:0 0 14px}
.count b{color:var(--green)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:14px}
a.card{
display:block;text-decoration:none;color:inherit;background:var(--card);
border:1px solid var(--border);border-left:3px solid var(--gray);border-radius:11px;
padding:15px 16px 14px;transition:transform .15s ease,border-color .15s ease,background .15s ease;
}
a.card:hover{transform:translateY(-3px);background:var(--card2);border-top-color:#2f2f2f;border-right-color:#2f2f2f;border-bottom-color:#2f2f2f}
a.card.schema{border-left-color:var(--green)}
a.card.parse{border-left-color:var(--teal)}
a.card.general{border-left-color:var(--gray)}
.card-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:2px}
.card-name{font-size:16px;font-weight:750}
.card-size{font-size:11.5px;color:var(--muted)}
.card-org{font-size:12.5px;color:var(--dim);margin-bottom:11px}
.card-stat{font-size:13px;color:var(--text);margin-bottom:11px;min-height:34px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.chip{font-size:11px;padding:3px 8px;border-radius:6px;background:#1c1c1c;color:var(--muted);border:1px solid #262626}
.chip.out{color:#cfe8a6}
.card-foot{display:flex;justify-content:space-between;align-items:center;font-size:12px;gap:8px}
.lic{color:var(--dim)}
.repo{color:var(--green);font-weight:600;white-space:nowrap}
.note{
margin:20px 0 6px;background:#101510;border:1px solid #223018;border-radius:10px;
padding:13px 15px;font-size:12.8px;color:#b9c9a6;
}
.note b{color:var(--green)}
footer{
margin-top:20px;padding-top:15px;border-top:1px solid var(--border);
display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;
font-size:12px;color:var(--dim);
}
footer .brand{color:var(--green);font-weight:750;letter-spacing:.02em}
footer .brand span{color:var(--muted);font-weight:400}
.verified{color:var(--dim)}
@media (max-width:640px){
#mtp-app{padding:20px 15px 14px;border-radius:11px}
h1{font-size:20px}
.grid{grid-template-columns:1fr}
.controls{gap:14px}
footer{flex-direction:column;align-items:flex-start;gap:6px}
}
Marktechpost エクスプレイナー
構造化 PDF から JSON への変換のためのオープンソース文書抽出モデル
「PDF to JSON」という言葉は、2 つの異なる作業を隠しています。スキーマ駆動型抽出では、あなたが定義したフィールドにデータを埋め込みます。一方、文書解析ではページ全体を再構築して JSON または Markdown 形式に変換します。タスクとライセンスで絞り込み、任意のリポジトリを開いて確認してください。
スキーマ駆動型抽出
文書解析
汎用 VLM(視覚言語モデル)
タスク
すべて
スキーマ駆動型
文書解析
一般用途
ライセンス
任意
寛容ライセンス(MIT / Apache)
コピーレフト / カスタム
ベンチマークは直接比較できません。lift の 90.2% は Datalab のスキーマベンチマークにおけるフィールド精度です。olmOCR-Bench のスコア(olmOCR 2 が 82.4、Marker が 76.1)は、ユニットテストを用いたコンテンツ抽出の性能を測定したものです。選択する前に、ご自身のドキュメントで実行することをお勧めします。
Marktechpost · AI Media Inc.
一次情報源から検証済み · 2026 年 7 月
var MODELS = [
{name:'lift', org:'Datalab', cat:'schema', size:'9B', out:'JSON to your schema', lic:'Apache-2.0 code / OpenRAIL-M weights', licType:'other', stat:'Schema-constrained decoding. 90.2% field accuracy on Datalab benchmark.', url:'https://github.com/datalab-to/lift'},
{name:'NuExtract 3', org:'NuMind', cat:'schema', size:'4B', out:'JSON + Markdown', lic:'Open weights (see model card)', licType:'other', stat:'Unifies schema extraction and OCR. Toggleable reasoning.', url:'https://github.com/numindai/nuextract'},
{name:'Docling', org:'IBM / LF AI & Data', cat:'parse', size:'Pipeline', out:'Markdown, JSON, DocTags', licType:'permissive', lic:'MIT', stat:'Parses PDF, DOCX, PPTX, XLSX, HTML and more. RAG-ready.', url:'https://github.com/docling-project/docling'},
{name:'Granite-Docling-258M', org:'IBM', cat:'parse', size:'258M', out:'DocTags, Markdown', licType:'permissive', lic:'Apache-2.0', stat:'One-shot conversion at ~0.35s per page on A100.', url:'https://huggingface.co/ibm-granite/granite-docling-258M'},
{name:'MinerU', org:'OpenDataLab', cat:'parse', size:'~1.2B VLM', out:'Markdown, JSON', licType:'other', lic:'MinerU Open Source License', stat:'MinerU2.5-Pro. High-res layouts, cross-page tables.', url:'https://github.com/opendatalab/MinerU'},
{name:'Marker', org:'Datalab', cat:'parse', size:'Pipeline', out:'Markdown, JSON, HTML', licType:'other', lic:'GPL-3.0 code / OpenRAIL-M weights', stat:'Fast pipeline. ~76.1 on olmOCR-Bench.', url:'https://github.com/datalab-to/marker'},
{name:'olmOCR 2', org:'Ai2', cat:'parse', size:'7B', out:'Text, Markdown', licType:'permissive', lic:'Apache-2.0', stat:'82.4 on olmOCR-Bench. ~$178 per million pages.', url:'https://github.com/allenai/olmocr'},
{name:'DeepSeek-OCR', org:'DeepSeek', cat:'parse', size:'3B MoE', out:'Text, Markdown, JSON', licType:'permissive', lic:'MIT (code)', stat:'Contexts optical compression. 100+ languages.', url:'https://github.com/deepseek-ai/DeepSeek-OCR'},
{name:'Qwen3-VL', org:'Alibaba', cat:'general', size:'2B-235B', out:'Markdown, JSON, code', licType:'permissive', lic:'Apache-2.0 (most sizes)', stat:'General VLM. Prompt it for JSON when no specialist fits.', url:'https://github.com/QwenLM/Qwen3-VL'}
];
var state = {cat:'all', lic:'any'};
var catLabel = {schema:'Schema-driven', parse:'Document parsing', general:'General'};
function render(){
var list = MODELS.filter(function(m){
var okCat = state.cat === 'all' || m.cat === state.cat;
var okLic = state.lic === 'any' || m.licType === state.lic;
return okCat && okLic;
});
var html = list.map(function(m){
return '' +
'' + m.name + '' +
'' + m.size + '
' +
'' + m.org + '
' +
'' + m.stat + '
' +
'' + catLabel[m.cat] + '' +
'' + m.out + '
' +
'' + m.lic + '' +
'Repo →
' +
'';
}).join('');
document.getElementById('grid').innerHTML = html || 'No models match these filters.
';
document.getElementById('count').innerHTML = 'Showing ' + list.length + ' of ' + MODELS.length + ' models';
postHeight();
}
function wire(groupId, key, attr){
var wrap = document.getElementById(groupId);
wrap.addEventListener('click', function(e){
var b = e.target.closest('.btn');
if(!b) return;
state[key] = b.getAttribute('data-' + attr);
Array.prototype.forEach.call(wrap.querySelectorAll('.btn'), function(x){ x.classList.remove('active'); });
b.classList.add('active');
render();
});
}
function postHeight(){
setTimeout(function(){
var app = document.getElementById('mtp-app');
var h = (app ? app.offsetHeight : document.body.offsetHeight) + 40;
if (window.parent) window.parent.postMessage({type:'mtp-docextract-resize', height:h}, '*');
}, 60);
}
wire('cat-btns', 'cat', 'cat');
wire('lic-btns', 'lic', 'lic');
render();
window.addEventListener('load', postHeight);
window.addEventListener('resize', postHeight);
キーポイント
スキーマ駆動型抽出(フィールドから値へ)とドキュメント解析(レイアウトから JSON へ)は、異なる作業です。
lift と NuExtract 3 はスキーマ駆動型の JSON を対象としていますが、それ以外のツールはドキュメント解析を対象としています。
Docling, MinerU, Marker, olmOCR 2, および DeepSeek-OCR は、ドキュメントを構造化された Markdown または JSON に変換します。
ライセンスは大きく異なります。MinerU は 2026 年に AGPL-3.0 から移行し、lift と Marker はコードとモデル重みのライセンスを分割しました。
公開されているベンチマークは異なるスイートから得られているため、モデル間のスコア比較は参考値として扱い、厳密な比較対象とは見なさないでください。
本記事「Structured PDF-to-JSON: A Guide to Open-Source Extraction Models in 2026」は、MarkTechPost で最初に公開されました。
原文を表示
Most enterprise data still sits inside PDFs, scans, and slide decks. Large language models and agents cannot use that data until it becomes structured JSON. Open-source document extraction has become the standard way to do that conversion on your own hardware.
Two different problems hide under the phrase ‘PDF to JSON.’ The first is schema-driven extraction: you define fields, and a model fills them with values. The second is document parsing: a model reconstructs the page into structured JSON or Markdown. Most teams need one, sometimes both. Choosing the wrong category costs real time.
Open weights matter here for cost and privacy. Proprietary APIs can cost thousands of dollars per million pages, and they require sending documents off-premise. Local models remove both constraints. Below are the models and toolkits worth evaluating, grouped by what they actually do.
Two categories, one phrase
Schema-driven extraction takes a document and a JSON schema, then returns values for your fields. Use it for invoices, forms, contracts, and receipts, where you know the fields in advance.
Document parsing reconstructs the document itself. It detects layout, reading order, tables, formulas, and code, then exports JSON or Markdown. Use it to prepare clean corpora for retrieval-augmented generation (RAG) and agents.
Category 1: Schema-driven structured extraction
Datalab lift
lift is a 9B vision model from Datalab, the team behind Marker and Surya. You pass a JSON schema, and lift returns JSON that matches it. Schema-constrained decoding guarantees the output is valid JSON. The model is built on Qwen 3.5 and runs locally through Hugging Face or remotely through a vLLM server.
It handles multi-page documents in a single pass, including values that span pages. It ships a CLI, a Python API, and a Streamlit ‘Schema Studio’ for building and testing schemas.
Copy CodeCopiedUse a different Browser
pip install lift-pdf
Start the vLLM server, then extract to your schema
lift_vllm
lift_extract input.pdf ./output --schema schema.json
Copy CodeCopiedUse a different Browser
from lift import extract
result = extract("document.pdf", "schema.json")
if result.extraction is not None:
data = result.extraction # dict matching your schema
On Datalab’s 225-document benchmark, lift reaches 90.2% field accuracy at 9.5s median latency. It leads NuExtract3 (81.5%) and Qwen3.5-9B (76.3%) on field accuracy. It trails Gemini Flash 3.5 (91.3%) and the hosted Datalab API (95.9%). Note that full-document accuracy stays low for all local models, with lift at 20.9%. Getting every field right in one document remains hard.
The code is Apache-2.0. The weights use a modified OpenRAIL-M license, free for research, personal use, and startups under $5M in funding or revenue. Commercial self-hosting needs a license, and the weights cannot be used competitively with the Datalab API.
NuMind NuExtract 3
NuExtract 3 is a 4B vision-language model from NuMind. It unifies two tasks in one model: structured extraction (document to JSON) and content extraction (OCR to Markdown). You provide an input and a JSON template describing the fields you need. The model is trained with reinforcement learning to add extraction-specific reasoning, which you can switch on or off per request.
NuExtract 3 is multimodal, multilingual, and based on a Qwen backbone. It serves through vLLM with an OpenAI-compatible API, and a Python SDK is available via pip install numind. NuMind positions it as a reference open model for both structured and content extraction at its size. Check the model card for exact license terms before commercial use.
Category 2: Document parsing to structured JSON and Markdown
IBM Docling
Docling started at IBM Research and is now hosted by the LF AI & Data Foundation. It parses PDF, DOCX, PPTX, XLSX, HTML, images, and more. Output formats include Markdown, HTML, lossless JSON, and DocTags. Its core is the DoclingDocument representation, which preserves layout, reading order, tables, and formulas as LaTeX.
Docling runs locally for air-gapped environments. It integrates with LangChain, LlamaIndex, Crew AI, and Haystack, and ships an MCP server and a Docling Serve mode. The project carries a permissive MIT license. IBM also offers a managed version through watsonx.
IBM Granite-Docling-258M
Granite-Docling-258M is a compact 258M vision-language model from IBM. It performs one-shot document conversion inside Docling pipelines. Despite its size, it handles OCR, layout, tables, code, and equations, and outputs DocTags. On an A100 GPU, it averages roughly 0.35 seconds per page.
The model builds on the Idefics3 architecture, with a SigLIP2 encoder and a Granite 165M language backbone. It is released under Apache 2.0. IBM states it is built for document conversion, not general image understanding.
OpenDataLab MinerU
MinerU, from OpenDataLab and Shanghai AI Laboratory, converts PDF, image, DOCX, PPTX, and XLSX inputs into Markdown and JSON. It pairs a processing pipeline with a vision-language model. The current model, MinerU2.5-Pro, targets high-resolution parsing of complex layouts, including cross-page tables and charts.
MinerU recently changed its license. It moved from AGPL-3.0 to the “MinerU Open Source License,” a custom license based on Apache 2.0 with additional conditions. That change lowers friction for commercial deployment.
Datalab Marker
Marker is Datalab’s pipeline for converting documents into Markdown, JSON, chunks, and HTML. It supports PDF, image, PPTX, DOCX, XLSX, HTML, and EPUB. It formats tables, forms, equations, inline math, links, and code. An optional --use_llm flag adds a language model to improve tables and forms.
On the third-party olmOCR-Bench suite, Marker scores around 76.1. Its code is GPL-3.0, and its model weights use a modified AI Pubs OpenRAIL-M license. That weight license is free for research, personal use, and startups under $2M in funding or revenue. Datalab’s managed platform now runs a newer OCR model, Chandra, which is Apache-2.0 and outputs HTML, Markdown, and JSON.
Ai2 olmOCR 2
olmOCR 2 is a 7B OCR-specialized vision-language model from the Allen Institute for AI (Ai2). It converts PDFs into clean text and Markdown while preserving reading order. It handles tables, equations, and handwriting across complex multi-column layouts. The model is trained with reinforcement learning from verifiable rewards, using synthetic unit tests as the reward signal.
olmOCR 2 scores 82.4 on its own olmOCR-Bench, among the higher published results on that suite. Ai2 estimates a cost of roughly $178 per million pages on your own GPUs. The toolkit and the allenai/olmOCR-2-7B-1025 weights are Apache-2.0. The current model is English-focused.
DeepSeek DeepSeek-OCR
DeepSeek-OCR is an open OCR model from DeepSeek, released in October 2025. It introduces “contexts optical compression,” which represents text-rich pages as compact vision tokens, then decodes them back to text. This lets it process long documents with far fewer tokens than typical vision-language models.
It uses a DeepEncoder plus a 3B Mixture-of-Experts decoder that activates about 570M parameters per token. Depending on the prompt, it outputs plain text, Markdown, HTML tables, or structured JSON, and it supports 100+ languages. The code is released under the MIT license. A follow-up, DeepSeek-OCR2, arrived in January 2026.
The general-purpose option: Qwen3-VL
Qwen3-VL from Alibaba is not a document-specific model. It is a general multimodal series that many extraction models use as a base. You can prompt it to return Markdown, JSON, or code from a page. Most sizes ship under Apache 2.0. It is a flexible fallback when a specialized model does not fit, though it needs more prompt engineering and offers fewer output guarantees.
How the options compare
ModelOrgSizeWhat it doesPrimary outputLicense
liftDatalab9BSchema-driven extractionJSON to your schemaApache-2.0 code / OpenRAIL-M weights
NuExtract 3NuMind4BSchema extraction + OCRJSON + MarkdownOpen weights (see card)
DoclingIBM / LF AI & DataPipelineLayout parsingMarkdown, JSON, DocTagsMIT
Granite-DoclingIBM258MOne-shot conversionDocTags, MarkdownApache-2.0
MinerUOpenDataLab~1.2B VLMLayout parsingMarkdown, JSONMinerU Open Source License
MarkerDatalabPipelineLayout parsingMarkdown, JSON, HTMLGPL-3.0 code / OpenRAIL-M weights
olmOCR 2Ai27BOCR to textPlain text, MarkdownApache-2.0
DeepSeek-OCRDeepSeek3B MoE (~570M active)OCR with token compressionText, Markdown, JSONMIT (code)
Qwen3-VLAlibaba2B–235BGeneral VLMMarkdown, JSON, codeApache-2.0 (most sizes)
A note on benchmarks: these numbers come from different suites and are not directly comparable. lift’s 90.2% is field accuracy on Datalab’s schema-extraction benchmark. The olmOCR-Bench scores for olmOCR 2 (82.4) and Marker (76.1) measure content extraction with unit-test scoring. Run your own documents through each candidate before deciding.
:root{
--bg:#0b0b0b; --card:#121212; --card2:#161616; --border:#232323;
--green:#76B900; --teal:#2bb673; --gray:#7a7a7a;
--text:#eaeaea; --muted:#9a9a9a; --dim:#6f6f6f;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
#mtp-app{
background:var(--bg); color:var(--text);
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
padding:26px 22px 18px; border:1px solid var(--border); border-radius:14px;
max-width:960px; margin:0 auto; line-height:1.5;
}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.head-kicker{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--green);font-weight:700;margin:0 0 6px}
h1{font-size:23px;line-height:1.25;margin:0 0 8px;font-weight:750}
.sub{color:var(--muted);font-size:14.5px;margin:0 0 18px;max-width:720px}
.legend{display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;font-size:12.5px;color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:7px}
.dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.dot.schema{background:var(--green)} .dot.parse{background:var(--teal)} .dot.general{background:var(--gray)}
.controls{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end;margin:0 0 18px}
.ctrl-group{display:flex;flex-direction:column;gap:7px}
.ctrl-label{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);font-weight:700}
.btns{display:flex;flex-wrap:wrap;gap:8px}
.btn{
background:var(--card2); color:var(--muted); border:1px solid var(--border);
padding:7px 13px; border-radius:999px; font-size:13px; cursor:pointer;
transition:all .15s ease; white-space:nowrap;
}
.btn:hover{color:var(--text);border-color:#3a3a3a}
.btn.active{background:var(--green);color:#0b0b0b;border-color:var(--green);font-weight:700}
.count{font-size:12.5px;color:var(--dim);margin:0 0 14px}
.count b{color:var(--green)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:14px}
a.card{
display:block;text-decoration:none;color:inherit;background:var(--card);
border:1px solid var(--border);border-left:3px solid var(--gray);border-radius:11px;
padding:15px 16px 14px;transition:transform .15s ease,border-color .15s ease,background .15s ease;
}
a.card:hover{transform:translateY(-3px);background:var(--card2);border-top-color:#2f2f2f;border-right-color:#2f2f2f;border-bottom-color:#2f2f2f}
a.card.schema{border-left-color:var(--green)}
a.card.parse{border-left-color:var(--teal)}
a.card.general{border-left-color:var(--gray)}
.card-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:2px}
.card-name{font-size:16px;font-weight:750}
.card-size{font-size:11.5px;color:var(--muted)}
.card-org{font-size:12.5px;color:var(--dim);margin-bottom:11px}
.card-stat{font-size:13px;color:var(--text);margin-bottom:11px;min-height:34px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.chip{font-size:11px;padding:3px 8px;border-radius:6px;background:#1c1c1c;color:var(--muted);border:1px solid #262626}
.chip.out{color:#cfe8a6}
.card-foot{display:flex;justify-content:space-between;align-items:center;font-size:12px;gap:8px}
.lic{color:var(--dim)}
.repo{color:var(--green);font-weight:600;white-space:nowrap}
.note{
margin:20px 0 6px;background:#101510;border:1px solid #223018;border-radius:10px;
padding:13px 15px;font-size:12.8px;color:#b9c9a6;
}
.note b{color:var(--green)}
footer{
margin-top:20px;padding-top:15px;border-top:1px solid var(--border);
display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;
font-size:12px;color:var(--dim);
}
footer .brand{color:var(--green);font-weight:750;letter-spacing:.02em}
footer .brand span{color:var(--muted);font-weight:400}
.verified{color:var(--dim)}
@media (max-width:640px){
#mtp-app{padding:20px 15px 14px;border-radius:11px}
h1{font-size:20px}
.grid{grid-template-columns:1fr}
.controls{gap:14px}
footer{flex-direction:column;align-items:flex-start;gap:6px}
}
Marktechpost Explainer
Open-Source Document Extraction Models for Structured PDF-to-JSON
“PDF to JSON” hides two different jobs. Schema-driven extraction fills fields you define. Document parsing rebuilds the page into JSON or Markdown. Filter by task and license, then open any repo.
Schema-driven extraction
Document parsing
General-purpose VLM
Task
All
Schema-driven
Document parsing
General
License
Any
Permissive (MIT / Apache)
Copyleft / Custom
Benchmarks are not directly comparable. lift’s 90.2% is field accuracy on Datalab’s schema benchmark. The olmOCR-Bench scores for olmOCR 2 (82.4) and Marker (76.1) measure content extraction with unit tests. Run your own documents before choosing.
Marktechpost · AI Media Inc.
Verified from primary sources · July 2026
var MODELS = [
{name:'lift', org:'Datalab', cat:'schema', size:'9B', out:'JSON to your schema', lic:'Apache-2.0 code / OpenRAIL-M weights', licType:'other', stat:'Schema-constrained decoding. 90.2% field accuracy on Datalab benchmark.', url:'https://github.com/datalab-to/lift'},
{name:'NuExtract 3', org:'NuMind', cat:'schema', size:'4B', out:'JSON + Markdown', lic:'Open weights (see model card)', licType:'other', stat:'Unifies schema extraction and OCR. Toggleable reasoning.', url:'https://github.com/numindai/nuextract'},
{name:'Docling', org:'IBM / LF AI & Data', cat:'parse', size:'Pipeline', out:'Markdown, JSON, DocTags', licType:'permissive', lic:'MIT', stat:'Parses PDF, DOCX, PPTX, XLSX, HTML and more. RAG-ready.', url:'https://github.com/docling-project/docling'},
{name:'Granite-Docling-258M', org:'IBM', cat:'parse', size:'258M', out:'DocTags, Markdown', licType:'permissive', lic:'Apache-2.0', stat:'One-shot conversion at ~0.35s per page on A100.', url:'https://huggingface.co/ibm-granite/granite-docling-258M'},
{name:'MinerU', org:'OpenDataLab', cat:'parse', size:'~1.2B VLM', out:'Markdown, JSON', licType:'other', lic:'MinerU Open Source License', stat:'MinerU2.5-Pro. High-res layouts, cross-page tables.', url:'https://github.com/opendatalab/MinerU'},
{name:'Marker', org:'Datalab', cat:'parse', size:'Pipeline', out:'Markdown, JSON, HTML', licType:'other', lic:'GPL-3.0 code / OpenRAIL-M weights', stat:'Fast pipeline. ~76.1 on olmOCR-Bench.', url:'https://github.com/datalab-to/marker'},
{name:'olmOCR 2', org:'Ai2', cat:'parse', size:'7B', out:'Text, Markdown', licType:'permissive', lic:'Apache-2.0', stat:'82.4 on olmOCR-Bench. ~$178 per million pages.', url:'https://github.com/allenai/olmocr'},
{name:'DeepSeek-OCR', org:'DeepSeek', cat:'parse', size:'3B MoE', out:'Text, Markdown, JSON', licType:'permissive', lic:'MIT (code)', stat:'Contexts optical compression. 100+ languages.', url:'https://github.com/deepseek-ai/DeepSeek-OCR'},
{name:'Qwen3-VL', org:'Alibaba', cat:'general', size:'2B-235B', out:'Markdown, JSON, code', licType:'permissive', lic:'Apache-2.0 (most sizes)', stat:'General VLM. Prompt it for JSON when no specialist fits.', url:'https://github.com/QwenLM/Qwen3-VL'}
];
var state = {cat:'all', lic:'any'};
var catLabel = {schema:'Schema-driven', parse:'Document parsing', general:'General'};
function render(){
var list = MODELS.filter(function(m){
var okCat = state.cat === 'all' || m.cat === state.cat;
var okLic = state.lic === 'any' || m.licType === state.lic;
return okCat && okLic;
});
var html = list.map(function(m){
return '' +
'' + m.name + '' +
'' + m.size + '
' +
'' + m.org + '
' +
'' + m.stat + '
' +
'' + catLabel[m.cat] + '' +
'' + m.out + '
' +
'' + m.lic + '' +
'Repo \u2192
' +
'';
}).join('');
document.getElementById('grid').innerHTML = html || 'No models match these filters.
';
document.getElementById('count').innerHTML = 'Showing ' + list.length + ' of ' + MODELS.length + ' models';
postHeight();
}
function wire(groupId, key, attr){
var wrap = document.getElementById(groupId);
wrap.addEventListener('click', function(e){
var b = e.target.closest('.btn');
if(!b) return;
state[key] = b.getAttribute('data-' + attr);
Array.prototype.forEach.call(wrap.querySelectorAll('.btn'), function(x){ x.classList.remove('active'); });
b.classList.add('active');
render();
});
}
function postHeight(){
setTimeout(function(){
var app = document.getElementById('mtp-app');
var h = (app ? app.offsetHeight : document.body.offsetHeight) + 40;
if (window.parent) window.parent.postMessage({type:'mtp-docextract-resize', height:h}, '*');
}, 60);
}
wire('cat-btns', 'cat', 'cat');
wire('lic-btns', 'lic', 'lic');
render();
window.addEventListener('load', postHeight);
window.addEventListener('resize', postHeight);
Key Takeaways
Schema-driven extraction (fields to values) and document parsing (layout to JSON) are different jobs.
lift and NuExtract 3 target schema-driven JSON; the rest target document parsing.
Docling, MinerU, Marker, olmOCR 2, and DeepSeek-OCR parse documents into structured Markdown or JSON.
Licenses vary widely; MinerU moved off AGPL-3.0 in 2026, and lift and Marker split code and model-weight licenses.
Published benchmarks come from different suites, so treat cross-model scores as indicative, not comparable.
The post Structured PDF-to-JSON: A Guide to Open-Source Extraction Models in 2026 appeared first on MarkTechPost.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み