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

# https://arxiv.org/pdf/1706.03762 をサンプルとしました。
DoclingはVLMを利用するため処理としてはPyMuPDF4LLMよりも重く、GPUの利用がよさそうです。ちなみにibm-granite/granite-docling-258Mは更新が続けられています。IBM頑張れ!
docling-project/docling | DeepWiki で調べると、日本語はOCR済みのPDFを利用すれば、中途半端にOCRを実施しないようです。フリーのOCRモデルは日本語の読み取り精度が低いケースも多いので回避できるかは気になるポイントです。本格的に利用してみたいと感じました。引き続き利用を拡大したいなと思いました。