Docling - RAG 用ドキュメント解析 チートシート
Docling はオープンソースのドキュメント解析ツールキット(LF AI & Data プロジェクト)— PDF、DOCX、PPTX、XLSX、HTML、イメージなどを構造化表現に変換 — レイアウト、テーブル、見出し、読み順を保持するクリーンな Markdown または JSON。階層認識チャンキングを含み、チャンク構造メタデータで充実化、LangChain および LlamaIndex と直接統合 — RAG パイプラインの取り込み段階の最強のオープンソース選択肢の一つ。
インストール
| 方法 | コマンド |
|---|
| pip | pip install docling |
| uv | uv add docling |
| OCR エクストラ付き | pip install "docling[ocr]" |
| 確認 | docling --version |
CLI の使用方法
| コマンド | 説明 |
|---|
docling document.pdf | ファイルを Markdown に変換(デフォルト) |
docling --to json document.pdf | 構造化 JSON を出力 |
docling --to md --output out/ report.docx | ディレクトリに変換 |
docling https://example.com/page.html | URL から変換 |
docling --ocr scanned.pdf | スキャン済みドキュメントに OCR を強制 |
docling --help | 完全なオプションリスト |
Python:基本的な変換
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("report.pdf")
doc = result.document
print(doc.export_to_markdown()) # クリーン Markdown
print(doc.export_to_dict()) # 構造化 JSON 可能な dict
| メソッド | 戻り値 |
|---|
export_to_markdown() | 見出し/テーブル保持の Markdown |
export_to_dict() | 構造化ドキュメントモデル(JSON 可能) |
export_to_doctags() | DocTags 表現 |
result.document | パース済み DoclingDocument |
サポートされている入力
| フォーマット | 注釈 |
|---|
| PDF | レイアウト、テーブル、読み順;スキャン用 OCR |
| DOCX / PPTX / XLSX | Office フォーマット |
| HTML | ウェブページとエクスポート |
| イメージ | OCR 経由 PNG/JPG/TIFF |
| Markdown / AsciiDoc | ドキュメントモデルに再構造化 |
階層認識チャンキング
Docling のチャンカーはパース済みドキュメントを埋め込み用に分割しながら、各チャンクのメタデータに構造コンテキスト(セクション見出し、テーブル境界)を保持。
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
doc = DocumentConverter().convert("report.pdf").document
chunker = HybridChunker(tokenizer="sentence-transformers/all-MiniLM-L6-v2")
for chunk in chunker.chunk(doc):
print(chunk.text)
print(chunk.meta) # 見出し、ページ、由来
| チャンカー | 動作 |
|---|
HierarchicalChunker | ドキュメント構造で分割(セクション、アイテム) |
HybridChunker | 構造認識 + トークナイザー認識サイジング/マージ |
chunk.meta | 見出し/由来を持つコンテキスト拡張用に実施 |
RAG フレームワーク統合
| フレームワーク | 方法 |
|---|
| LangChain | DoclingLoader はドキュメント/チャンクを返す |
| LlamaIndex | Docling リーダー/ノードパーサー |
| カスタム | export_to_markdown() またはチャンカー出力を直接使用 |
# LangChain の例
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()
パフォーマンス & オプション
| オプション | 目的 |
|---|
| OCR エンジン | OCR を選択/無効化(EasyOCR、Tesseract など) |
| テーブルモード | 正確対高速テーブル構造復旧 |
| デバイス | CPU または GPU 上でモデルを実行 |
| ページ範囲 | 変換を特定のページに限定 |
| パイプラインオプション | フォーマットあたりの変換パイプラインをチューン |
一般的なワークフロー
# PDF フォルダーを取り込み用 Markdown に変換
for f in docs/*.pdf; do docling --to md --output corpus/ "$f"; done
# パース → チャンク → 埋め込み、RAG 取り込みコア
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
doc = DocumentConverter().convert("manual.pdf").document
chunks = list(HybridChunker().chunk(doc))
# モデルで各 chunk.text を埋め込み、chunk.meta と共に保存
Docling vs その他のパーサー
| 側面 | Docling | Unstructured | Marker |
|---|
| 出力 | Markdown + 構造化モデル | 型要素 | Markdown |
| チャンキング | 組み込み、階層認識 | 要素ベース | 外部 |
| スピード | 良好(CPU) | 良好 | GPU 付き最速 |
| 最適用途 | セルフホスト RAG 取り込み | 型要素パイプライン | GPU バルク Markdown |
リソース