0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RAGシステム構築の強い味方 - Doclingによるドキュメント変換入門

Last updated at Posted at 2025-02-23

以前参加したイベントで様々なファイルのフォーマットを使用するための変換ツールを紹介していただきました。それが今回紹介するDoclingです。

Doclingとは?

Doclingは、簡単にいうならば様々なドキュメントに対応したHTMLMarkdownJSONへのコンバートツールになります。

【Doclingの特徴】

  • 一般的な文書フォーマット(PDFDOCXPPTXXLSX画像HTMLAsciiDocMarkdown)を読み取り、HTMLMarkdownJSON(埋め込み画像や参照画像付き)にコンバート可能
  • ページレイアウト、読み取り順序、表構造を含む高度なPDF文書理解の能力もつ
  • DoclingDocumentを使用することで、統一性と表現性を実現
  • LangChainLlamaIndexCrew AIHaystackなど、エージェントAI向け統合機能
  • スキャンしたPDFOCRサポート
  • シンプルで便利なコマンドラインツール

インストール方法

インストールは以下のように行います。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 - - ヘルプメッセージを表示
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?