地平線まで行ってくる。

記録あるいは忘備録。時には検討事項。

Doclingを利用してpdfからmarkdownへの変換を見直してみる。

LLMでの文書ファイルを活用するためには、まだまだmarkdownをうまく活用する場面が多くあります。Pythonでコーディングする場合には、改めて調べるとPyMuPDF4LLMかDoclingあたりが候補になりそうでした。PyMuPDF4LLMも軽量で良好でしたが、今回はDoclingを手を動かして試してみます。

 

github.com

 

markdownに図データを切り出し、参照埋め込み型Markdownへと変換を実施します。

 

Doclingのパイプラインでオプションを設定。

# PDFパイプラインオプションのインスタンス
pipeline_options = PdfPipelineOptions()
# 画像スケールを設定(レンダリング解像度の制御)
pipeline_options.images_scale = IMAGE_RESOLUTION_SCALE
# ページ全体の画像抽出を有効化 (Markdownにはページ画像を含まないが、構成要素の画像を抽出するために必要)
pipeline_options.generate_page_images = True
# 図(Picture)の画像抽出を有効化
pipeline_options.generate_picture_images = True
# 表(Table)の画像抽出を有効化
pipeline_options.generate_table_images = True 

# PdfFormatOptionにパイプラインオプションを適用
pdf_format_option = PdfFormatOption(pipeline_options=pipeline_options)

# DocumentConverterの初期化
doc_converter = DocumentConverter(
    format_options={InputFormat.PDF: pdf_format_option}
)

 

後は、Converterを設定したパイプラインで行うように初期化するだけです。詳細はColabノートを参照してください。

 

以下のように参照埋め込みが出来ています。

Figure 2: (left) Scaled Dot-Product Attention. (right) Multi-Head Attention consists of several attention layers running in parallel.

![Image](output/sample_arxiv-referenced_artifacts/image_000002_35b5fe76ef3c23cddd7788e62be4d03daa9e37cdae00a416b15cbfce314a544d.png)

# https://arxiv.org/pdf/1706.03762 をサンプルとしました。

 

DoclingはVLMを利用するため処理としてはPyMuPDF4LLMよりも重く、GPUの利用がよさそうです。ちなみにibm-granite/granite-docling-258Mは更新が続けられています。IBM頑張れ!

docling-project/docling | DeepWiki で調べると、日本語はOCR済みのPDFを利用すれば、中途半端にOCRを実施しないようです。フリーのOCRモデルは日本語の読み取り精度が低いケースも多いので回避できるかは気になるポイントです。本格的に利用してみたいと感じました。引き続き利用を拡大したいなと思いました。

 

gist.github.com