mcpField
D
docling

docling

github.com/existential-birdsドキュメント85431 回インストール11 週間前に更新
リポジトリ

docling について

Docling は、PDF、Office ファイル、画像などを構造化データに変換するドキュメント解析ライブラリです。Markdown、HTML、JSON などの出力に加え、レイアウト解析、OCR、表抽出、バッチ処理を備え、後続の文書処理にも利用できます。

主な機能

  1. 01複数の文書・メディア形式を解析
  2. 02Markdown、HTML、JSON などへ出力
  3. 03OCR と表構造抽出の設定
  4. 04バッチ変換と結果ステータス確認
  5. 05チャンク分割とローカル実行

活用シーン

  1. 01PDF を Markdown テキストに変換
  2. 02Office 文書や画像を一括解析
  3. 03RAG ワークフロー向けの文書データ準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/existential-birds/beagle --skill docling

インストール後、Claude Code で/doclingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
parsing.md
batch.md
chunking.md
output.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:解析済みの DoclingDocument
  • status:ConversionStatus.SUCCESS、PARTIAL_SUCCESS、または FAILURE
  • errors:変換中に発生したエラーのリスト
  • 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、評価、保存)に渡したりする前に、以下を確認してください。

  1. convert() から result を取得するか、references/batch.md に記載されたバッチの順序に従います。
  2. 合格: result.status が ConversionStatus.SUCCESS であること。または PARTIAL_SUCCESS であり、result.errors を確認したうえで、タスクに対する部分的な出力を明示的に受け入れること。または FAILURE を適切に処理すること(意図した場合を除き、失敗時にエクスポートやチャンク分割を行わないでください)。
  3. その後でのみ、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、FAILURE
  • PdfPipelineOptions: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 を使用するには設定が必要です

コメント