どのライブラリを選ぶか
| ライブラリ | ライセンス | 必要なもの | 向いている用途 |
|---|---|---|---|
| PyMuPDF4LLM | AGPL 3.0、または有料の商用ライセンス | pip だけ | 速く正確なテキスト PDF、見出しと表 |
| MarkItDown | MIT | pip だけ | 1 回の呼び出しで多くの形式 |
| Docling | MIT | PyTorch、モデルのダウンロード | 複雑なレイアウト、表、構造化された出力 |
| Marker | コードは Apache 2.0、モデルの重みは改変版 OpenRAIL-M ライセンス | PyTorch と、OCR 用の推論サーバー | 数式の多い論文やスキャン、できれば GPU で |
以下のバージョンは、このページ冒頭の日付時点のものです。PDF が数個だけなら、どれも必要ありません。トップページの変換ツールがブラウザの中で同じことをします。
PyMuPDF4LLM
PyMuPDF の Markdown 書き出し機能です。PyMuPDF 2.0 からは pymupdf パッケージに含まれています。import 名は pymupdf4llm のままです。
pip install pymupdf
import pymupdf4llm
md = pymupdf4llm.to_markdown("report.pdf")
open("report.md", "w", encoding="utf-8").write(md)
便利なオプション:
# 一部のページだけ(0 始まり)を、ページごとにメタデータ付きの dict で
pages = pymupdf4llm.to_markdown("report.pdf", pages=[0, 1, 2], page_chunks=True)
for p in pages:
print(p["metadata"]["page_number"], len(p["text"]))
スキャンしたページには OCR エンジンも入れます。pip install rapidocr onnxruntime を実行すると、PyMuPDF はテキスト層のないページも読みます。
ライセンス: PyMuPDF は GNU AGPL 3.0 と Artifex の商用ライセンスのデュアルライセンスです。AGPL では、ソフトウェアを配布したりネットワークサービスとして提供したりする場合、自分のソースコードも公開する必要があります。クローズドな製品で使う前に確認してください。
私たちのベンチマークでは、PyMuPDF4LLM 2.1 は本文の平均 99% を残し、評価した 3 つの変換ツールの中で読む順序が最も正確でした。
MarkItDown
PDF、Word、PowerPoint、Excel、HTML、EPUB など、多くの形式に対応した Microsoft の変換ツールです。
pip install 'markitdown[pdf]'
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("report.pdf")
open("report.md", "w", encoding="utf-8").write(result.markdown)
コマンドラインでは markitdown report.pdf -o report.md です。
ライセンス: MIT。
知っておきたいこと: PDF では pdfminer.six と pdfplumber で文字を取り出します。出力には見出しがなく、PDF の改行と行末のハイフンが残り、標準のインストールには OCR がありません。さまざまなオフィスファイルの中に PDF が少し混ざっている程度なら、ちょうどよい選択です。詳しくは MarkItDown のページをご覧ください。
Docling
IBM Research Zurich で始まり、現在は LF AI & Data Foundation がホストしている文書変換ツールキットです。レイアウト、表、OCR のモデルを動かすので、PyTorch をインストールし、初回にモデルをダウンロードします。PDF のほかに Word、PowerPoint、Excel、HTML、画像なども読めます。
pip install docling
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("report.pdf")
md = result.document.export_to_markdown()
open("report.md", "w", encoding="utf-8").write(md)
コマンドラインでは docling report.pdf で、現在のフォルダに .md ファイルが書き出されます。
ライセンス: MIT。Markdown のほか、HTML や、レイアウト情報を後の処理のために保つロスレスな JSON 形式にも書き出せます。
Marker
独自の視覚モデルを中心に作られた Datalab の変換ツールです。数式とスキャンに強い反面、動かすのは重めです。
pip install marker-pdf
Marker には PyTorch が必要で、OCR のために初回に推論サーバーを起動します。NVIDIA の GPU では vLLM、CPU や Apple Silicon では llama.cpp の llama-server バイナリを使います。
from marker.converters.pdf import PdfConverter
from marker.models import create_model_dict
from marker.output import text_from_rendered
converter = PdfConverter(artifact_dict=create_model_dict())
rendered = converter("report.pdf")
text, _, images = text_from_rendered(rendered)
open("report.md", "w", encoding="utf-8").write(text)
コマンドラインでは marker_single report.pdf です。
ライセンス: コードは Apache 2.0 です。モデルの重みは改変版 AI Pubs OpenRAIL-M ライセンスで、研究、個人利用、資金調達額または売上が 500 万ドル未満のスタートアップは無料です。それより大きな商用利用には Datalab のライセンスが必要です。
フォルダ内の PDF をまとめて変換する
同じループはどのライブラリでも使えます。ここでは PyMuPDF4LLM の例です。
from pathlib import Path
import pymupdf4llm
src, out = Path("pdfs"), Path("markdown")
out.mkdir(exist_ok=True)
for pdf in sorted(src.glob("*.pdf")):
try:
md = pymupdf4llm.to_markdown(str(pdf))
except Exception as e: # 壊れたファイルや暗号化されたファイルで全体を止めない
print(f"skipped {pdf.name}: {e}")
continue
(out / f"{pdf.stem}.md").write_text(md, encoding="utf-8")
スクリプトが向かない場面
- 数ファイルを一度だけ: 環境を用意するより変換ツールにドロップするほうが早く、各ページを Markdown と見比べられます。
- 共有のマシンで機密文書を扱う: ブラウザの変換ツールはインストール不要で、ファイルはタブの中にとどまります。
- トークン数と RAG チャンクを自分で書かずに使いたい: LLM 向け PDF から Markdown へをご覧ください。
よくある質問
いちばん速いライブラリは?
テキスト PDF なら、MarkItDown と PyMuPDF4LLM はノートパソコンで 1 文書あたり 1 秒未満から数秒です。Docling と Marker はニューラルモデルを動かすので、GPU がないとかなり遅くなります。
表にいちばん強いのは?
私たちが測った 2 つのうち、PyMuPDF4LLM はきちんとした Markdown の表を出力し、MarkItDown はほとんど出力しませんでした。Docling と Marker はどちらも表のモデルを使い、複雑な表によく勧められます。自分の文書で試してみてください。
商用製品で使えますか?
MarkItDown と Docling は MIT なので使えます。PyMuPDF は AGPL に従うか商用ライセンスが必要です。Marker のコードは Apache 2.0 ですが、モデルの重みには商用利用での売上の上限があります。
JavaScript の選択肢はありますか?
pdftomd 自体が、ブラウザの中で JavaScript と WebAssembly で動いています。テキストのエンジンはオープンソースの @firecrawl/pdf-inspector-wasm パッケージ、OCR は ONNX Runtime Web で動く PaddleOCR です。各コンポーネントはライセンスのページをご覧ください。