docling について
Docling は、PDF、Office ファイル、画像などを構造化データに変換するドキュメント解析ライブラリです。Markdown、HTML、JSON などの出力に加え、レイアウト解析、OCR、表抽出、バッチ処理を備え、後続の文書処理にも利用できます。
主な機能
- 01複数の文書・メディア形式を解析
- 02Markdown、HTML、JSON などへ出力
- 03OCR と表構造抽出の設定
- 04バッチ変換と結果ステータス確認
- 05チャンク分割とローカル実行
活用シーン
- 01PDF を Markdown テキストに変換
- 02Office 文書や画像を一括解析
- 03RAG ワークフロー向けの文書データ準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill doclingインストール後、Claude Code で/doclingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/parsing.mdbatch.mdchunking.mdoutput.md詳細
Docling ドキュメントパーサー
Docling は、PDF、Word ドキュメント、PowerPoint、画像、その他の形式を、高度なレイアウト理解によって構造化データに変換するドキュメント解析ライブラリです。
クイックスタート
基本的なドキュメント変換:
from docling.document_converter import DocumentConverter
source = "https://arxiv.org/pdf/2408.09869" # URL, Path, or BytesIO
converter = DocumentConverter()
result = converter.convert(source)
print(result.document.export_to_markdown())
主な概念
DocumentConverter
ドキュメント変換の主要なエントリーポイントです。さまざまな入力形式と変換オプションに対応しています。
from docling.document_converter import DocumentConverter
from docling.datamodel.base_models import InputFormat
from docling.document_converter import PdfFormatOption
from docling.datamodel.pipeline_options import PdfPipelineOptions
# Basic converter (all formats enabled)
converter = DocumentConverter()
# Restricted formats
converter = DocumentConverter(
allowed_formats=[InputFormat.PDF, InputFormat.DOCX]
)
# Custom pipeline options
pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.do_table_structure = True
converter = DocumentConverter(
format_options={
InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)
}
)
ConversionResult
すべての変換処理は、以下を含む ConversionResult を返します。
document:解析済みのDoclingDocumentstatus:ConversionStatus.SUCCESS、PARTIAL_SUCCESS、またはFAILUREerrors:変換中に発生したエラーのリストinput:ソースドキュメントに関する情報
from docling.datamodel.base_models import ConversionStatus
result = converter.convert("document.pdf")
if result.status == ConversionStatus.SUCCESS:
markdown = result.document.export_to_markdown()
html = result.document.export_to_html()
data = result.document.export_to_dict()
対応形式
入力形式
- ドキュメント:PDF、DOCX、PPTX、XLSX
- マークアップ:HTML、Markdown、AsciiDoc
- データ:CSV、JSON(Docling 形式)
- 画像:PNG、JPEG、TIFF、BMP、WEBP
- 音声:WAV、MP3
- 動画テキスト:WebVTT
- スキーマ固有:USPTO XML、JATS XML、METS-GBS
出力形式
- Markdown:
export_to_markdown()またはsave_as_markdown() - HTML:
export_to_html()またはsave_as_html() - JSON:
export_to_dict()またはsave_as_json()(注:export_to_json()メソッドはありません) - テキスト:
export_to_text()、export_to_markdown(strict_text=True)、またはsave_as_markdown(strict_text=True) - DocTags:
export_to_doctags()またはsave_as_doctags()
一般的なパターン
単一ファイルの変換
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("document.pdf")
# Export to different formats
markdown = result.document.export_to_markdown()
html = result.document.export_to_html()
json_data = result.document.export_to_dict()
# Or save directly to file
result.document.save_as_markdown("output.md")
result.document.save_as_html("output.html")
result.document.save_as_json("output.json")
バッチ処理
convert_all() の詳細については、references/batch.md を参照してください。
URL 変換
converter = DocumentConverter()
result = converter.convert("https://example.com/document.pdf")
バイナリストリームの変換
from io import BytesIO
from docling.datamodel.base_models import DocumentStream
with open("document.pdf", "rb") as f:
buf = BytesIO(f.read())
source = DocumentStream(name="document.pdf", stream=buf)
result = converter.convert(source)
形式固有のオプション
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import PdfPipelineOptions
from docling.document_converter import DocumentConverter, PdfFormatOption
# Configure PDF-specific options
pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.ocr_options.lang = ["en", "es"]
pipeline_options.do_table_structure = True
pipeline_options.generate_page_images = True
converter = DocumentConverter(
format_options={
InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)
}
)
リソース制限
converter = DocumentConverter()
# Limit file size (bytes) and page count
result = converter.convert(
"large_document.pdf",
max_file_size=20_971_520, # 20 MB
max_num_pages=100
)
ドキュメントのチャンク分割
RAG との統合については、references/chunking.md を参照してください。
DoclingDocument の構造
DoclingDocument は、解析済みのコンテンツを表す Pydantic モデルです。
# Access document structure
doc = result.document
# Content items (lists)
doc.texts # TextItem instances (paragraphs, headings, etc.)
doc.tables # TableItem instances
doc.pictures # PictureItem instances
doc.key_value_items # Key-value pairs
# Structure (tree nodes)
doc.body # Main content hierarchy
doc.furniture # Headers, footers, page numbers
doc.groups # Lists, chapters, sections
# Iterate all elements in reading order
for item, level in doc.iterate_items():
print(f"{' ' * level}{item.label}: {item.text[:50]}")
高度な機能
OCR の設定
from docling.datamodel.pipeline_options import (
PdfPipelineOptions,
EasyOcrOptions,
TesseractOcrOptions,
TesseractCliOcrOptions,
OcrMacOptions,
RapidOcrOptions
)
# EasyOCR (default)
pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.ocr_options = EasyOcrOptions(lang=["en", "de"])
# Tesseract
pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.ocr_options = TesseractOcrOptions(lang=["eng", "deu"])
# RapidOCR
pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.ocr_options = RapidOcrOptions()
テーブル抽出オプション
from docling.datamodel.pipeline_options import (
PdfPipelineOptions,
TableFormerMode
)
pipeline_options = PdfPipelineOptions()
pipeline_options.do_table_structure = True
# Use cell matching (map to PDF cells)
pipeline_options.table_structure_options.do_cell_matching = True
# Or use predicted cells
pipeline_options.table_structure_options.do_cell_matching = False
# Choose accuracy mode
pipeline_options.table_structure_options.mode = TableFormerMode.ACCURATE
ページ画像
pipeline_options = PdfPipelineOptions()
pipeline_options.generate_page_images = True # Needed for HTML export with images
# Export with embedded images
result.document.save_as_html(
"output.html",
image_mode=ImageRefMode.EMBEDDED
)
エラー処理
from docling.datamodel.base_models import ConversionStatus
result = converter.convert("document.pdf")
if result.status == ConversionStatus.SUCCESS:
print("Conversion successful")
elif result.status == ConversionStatus.PARTIAL_SUCCESS:
print("Partial conversion:")
for error in result.errors:
print(f" {error.error_message}")
else: # FAILURE
print("Conversion failed:")
for error in result.errors:
print(f" {error.error_message}")
エラー処理を伴うバッチ処理:
# Continue processing on errors
results = converter.convert_all(
["doc1.pdf", "doc2.pdf", "doc3.pdf"],
raises_on_error=False
)
for result in results:
if result.status == ConversionStatus.SUCCESS:
result.document.save_as_markdown(f"{result.input.file.stem}.md")
else:
print(f"Failed: {result.input.file}")
判定基準
出力を完成済みとして扱ったり、後続の処理(RAG、評価、保存)に渡したりする前に、以下を確認してください。
convert()からresultを取得するか、references/batch.md に記載されたバッチの順序に従います。- 合格:
result.statusがConversionStatus.SUCCESSであること。またはPARTIAL_SUCCESSであり、result.errorsを確認したうえで、タスクに対する部分的な出力を明示的に受け入れること。またはFAILUREを適切に処理すること(意図した場合を除き、失敗時にエクスポートやチャンク分割を行わないでください)。 - その後でのみ、references/chunking.md に記載された
export_to_*、save_as_*、またはチャンク分割ツールを呼び出します。
convert_all の場合:各入力に結果が対応付けられ、出力を書き込む前に各 result.status が分類されていれば合格です(references/batch.md を参照)。
CLI の使用方法
# Basic conversion
docling document.pdf
# Convert to specific output
docling --to markdown document.pdf
# With custom model path
docling --artifacts-path /path/to/models document.pdf
# Using VLM pipeline
docling --pipeline vlm --vlm-model granite_docling document.pdf
リファレンスドキュメント
- 解析オプション - DocumentConverter の初期化、形式固有のオプション、OCR の設定
- バッチ処理 - convert_all()、エラー処理、並行処理のパターン
- チャンク分割 - HierarchicalChunker、HybridChunker、RAG との統合
- 出力形式 - export_to_markdown()、export_to_html()、export_to_dict()、ドキュメント構造
主な型
DocumentConverter:主要な変換クラスConversionResult:ドキュメントとステータスを含む変換結果DoclingDocument:統一されたドキュメント表現(Pydantic モデル)InputFormat:対応する入力形式の列挙型ConversionStatus:SUCCESS、PARTIAL_SUCCESS、FAILUREPdfPipelineOptions:PDF パイプラインの設定ImageRefMode:EMBEDDED、REFERENCED、PLACEHOLDER
統合例
LangChain
from docling.document_converter import DocumentConverter
from langchain_text_splitters import MarkdownTextSplitter
converter = DocumentConverter()
result = converter.convert("document.pdf")
markdown = result.document.export_to_markdown()
splitter = MarkdownTextSplitter(chunk_size=1000)
chunks = splitter.split_text(markdown)
LlamaIndex
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker
from llama_index.core import Document
converter = DocumentConverter()
result = converter.convert("document.pdf")
chunker = HybridChunker()
chunks = list(chunker.chunk(result.document))
documents = [
Document(text=chunk.text, metadata=chunk.meta.export_json_dict())
for chunk in chunks
]
メモ
- Docling は同期 API を使用します(ネイティブな非同期処理には対応していません)
- モデルは初回使用時に自動でダウンロードされます(事前に取得することもできます)
- インターネットから隔離された環境でのローカル実行に対応しています
- OCR とテーブル検出の GPU アクセラレーションに対応しています
- デフォルトのモデルは CPU で実行されます。GPU を使用するには設定が必要です
コメント
Markdown 対応