以前参加したイベントで様々なファイルのフォーマットを使用するための変換ツールを紹介していただきました。それが今回紹介するDocling
です。
Doclingとは?
Docling
は、簡単にいうならば様々なドキュメントに対応したHTML
、Markdown
、JSON
へのコンバートツールになります。
【Doclingの特徴】
- 一般的な文書フォーマット(
PDF
、DOCX
、PPTX
、XLSX
、画像
、HTML
、AsciiDoc
、Markdown
)を読み取り、HTML
、Markdown
、JSON(埋め込み画像や参照画像付き)
にコンバート可能 - ページレイアウト、読み取り順序、表構造を含む高度なPDF文書理解の能力もつ
-
DoclingDocument
を使用することで、統一性と表現性を実現 -
LangChain
、LlamaIndex
、Crew AI
、Haystack
など、エージェントAI向け統合機能 - スキャンした
PDF
のOCRサポート
- シンプルで便利なコマンドラインツール
インストール方法
インストールは以下のように行います。pipコマンドもインストールしてくれますが、Ubuntu24.04などではPEP668エラー
が発生する可能性があります。また、このインストールはかなりのファイルサイズのものをダウンロードしますので、ご注意ください。
# pipでのインストール(GPU関連のライブラリもインストールされます)
$ pip install docling
# pipでのインストール(CPUバージョンのみ)
$ pip install docling --extra-index-url https://download.pytorch.org/whl/cpu
# PEP668エラーが発生した場合
$ pip install --break-system-packages --user docling --extra-index-url https://download.pytorch.org/whl/cpu
【参考】PEP668エラー
コマンドラインからの実行
以下のように実行することでネット上のpdfファイルをmarkdownファイルにトランスポートすることができます。pdf内の画像に関してはbase64でエンコードして埋め込まれるようです。
Web上にあるpdfをURL指定してトランスポート
$ docling https://arxiv.org/pdf/2206.01062
pdf
論文データを使用していますが、それなりに認識されているようです。
ローカルにあるDOCXファイルのトランスポート
$ docling 0022006-083_11.docx
DOCX
については行政のデータを使用していますが、こちらも問題なさそうですね。
Pythonのコード内から変換を行う
Pythonのコード内から同様にトランスポートを行ってみます。
from docling.document_converter import DocumentConverter
source = "https://arxiv.org/pdf/2408.09869" # PDF path or URL
converter = DocumentConverter()
result = converter.convert(source)
print(result.document.export_to_markdown()) # output: "### Docling Technical Report[...]"
Google Colabでの実行例
LangChainでMarkdownLoaderと連携する場合
先ほどは文字列の出力の例でしたが、変数に格納し、LangChain
のドキュメントローダーに入力することでRAG
用のデータとして使用することが容易になります。
from docling.document_converter import DocumentConverter
from langchain.document_loaders import UnstructuredMarkdownLoader #要インストール $ pip install unstructured
source = "https://arxiv.org/pdf/2408.09869" # PDF path or URL
converter = DocumentConverter()
result = converter.convert(source)
# Markdownの文字列データを格納
markdown_text = result.document.export_to_markdown() # output: "### Docling Technical Report[...]"
# UnstructuredMarkdownLoaderを使用
loader = UnstructuredMarkdownLoader.from_string(markdown_text)
documents = loader.load()
おわりに
Docling
は様々なドキュメントフォーマットを統一的に扱うための強力なコンバートツールです。単なる変換という意味にも取られそうですが、RAG
の情報元として様々なフォーマットを持つ場合、その情報元をLLM
で扱いやすい形式に変換できる点は、より実践的な開発において大きな価値になりそうです💪
他にも様々なツールがあるので、それらに関しても調べてみようと思います👀
【参考】DoclineのCLIオプション引数まとめ
引数
引数 | 説明 |
---|---|
source | 変換するローカルのファイル/ディレクトリパスまたはURLを指定可能(必須) |
オプション
オプション | 値 | デフォルト値 | 説明 |
---|---|---|---|
--from | docx, pptx, html, xml_pubmed, image, pdf, asciidoc, md, xlsx, xml_uspto | なし | 入力フォーマットの指定。指定しない場合は全フォーマット対応 |
--to | md, json, html, text, doctags | なし | 出力フォーマットの指定。デフォルトはMarkdown |
--headers | TEXT | なし | URL入力ソースを取得する際のHTTPリクエストヘッダーをJSON形式で指定 |
--image-export-mode | placeholder, embedded, referenced | embedded | 文書内の画像出力モード(JSON、Markdown、HTMLの場合のみ)。placeholderは画像位置のみマーク、embeddedはbase64エンコード文字列として埋め込み、referencedはPNG形式で出力して参照 |
--ocr / --no-ocr | - | ocr | ビットマップコンテンツにOCRを適用するかどうか |
--force-ocr / --no-force-ocr | - | no-force-ocr | 既存のテキストをOCR生成テキストで置き換えるかどうか |
--ocr-engine | easyocr, tesseract_cli, tesseract, ocrmac, rapidocr | easyocr | 使用するOCRエンジン |
--ocr-lang | TEXT | なし | OCRエンジンで使用する言語をカンマ区切りで指定。エンジンによって指定可能な言語名が異なる |
--pdf-backend | pypdfium2, dlparse_v1, dlparse_v2 | dlparse_v2 | 使用するPDFバックエンド |
--table-mode | fast, accurate | fast | テーブル構造モデルのモード |
--artifacts-path | PATH | なし | モデルアーティファクトの保存場所 |
--abort-on-error / --no-abort-on-error | - | no-abort-on-error | エラー発生時に処理を中断するかどうか |
--output | PATH | . | 結果を保存する出力ディレクトリ |
--verbose, -v | INTEGER | 0 | 詳細度レベル。-vは情報ログ、-vvはデバッグログ |
--debug-visualize-cells | - | no-debug-visualize-cells | PDFセルの視覚化デバッグ出力を有効化 |
--debug-visualize-ocr | - | no-debug-visualize-ocr | OCRセルの視覚化デバッグ出力を有効化 |
--debug-visualize-layout | - | no-debug-visualize-layout | レイアウトクラスタの視覚化デバッグ出力を有効化 |
--debug-visualize-tables | - | no-debug-visualize-tables | テーブルセルの視覚化デバッグ出力を有効化 |
--version | - | - | バージョン情報を表示 |
--document-timeout | FLOAT | なし | 各ドキュメントの処理タイムアウト(秒) |
--num-threads | INTEGER | 4 | スレッド数 |
--device | auto, cpu, cuda, mps | auto | アクセラレータデバイス |
--help | - | - | ヘルプメッセージを表示 |