Microsoftが公開した、多種多様なファイルをMarkdownに変換するツール「MarkItDown」。
RAG(検索拡張生成)のデータ前処理や、既存資料のドキュメント化に非常に強力なツールです。
本記事では、技術者向けにMarkItDownのインストールから高度な設定、Python APIでの利用方法までをステップ・バイ・ステップで解説します。
1. MarkItDownとは?
MarkItDownは、Microsoftが提供するオープンソースのPythonライブラリです。PDF、Word、Excel、PowerPoint、さらには画像や音声(EXIF/メタデータ)など、様々な形式のファイルを一貫したMarkdown形式に変換できます。
主な特徴:
- 多形式対応: Office系、PDF、HTML、画像、ZIPなど。
- LLM連携: 画像解析(GPT-4o等)を組み合わせて、画像内のチャートや図を説明文としてMarkdown化可能。
- シンプル: CLI(コマンドライン)とPythonライブラリの両方で動作。
2. インストール
まずは環境構築です。Python 3.10以降が推奨されます。
pipによるインストール
pip install markitdown
※ 特定のプラグイン(LLM連携など)を使用する場合は、依存ライブラリも自動的にインストールされます。
3. CLIでの基本的な使い方
インストール後、すぐにコマンドラインから利用可能です。
基本的な変換
最もシンプルな使い方は、入力ファイルと出力先を指定する方法です。
# 実行例
markitdown input.pdf > output.md
対応フォーマット
以下のファイル形式を標準でサポートしています。
- Microsoft Office:
.docx,.pptx,.xlsx - PDF:
.pdf - 画像:
.jpg,.png(メタデータ抽出) - 音声:
.mp3,.wav(録音データ、メタデータ) - HTML: Webサイトのコンテンツ
4. Python APIでの活用
エンジニアリング用途では、プログラム内に組み込むケースが多いでしょう。
基本的なスクリプト
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("example.docx")
print(result.text_content)
画像のキャプション生成(LLM連携)
MarkItDownの真骨頂は、画像や複雑な図表をLLMを使って説明させる機能にあります。例えば、OpenAIのAPIを利用して画像入りのドキュメントを処理する場合、以下のように記述します。
from markitdown import MarkItDown
from openai import OpenAI
client = OpenAI()
md = MarkItDown(llm_client=client, llm_model="gpt-4o")
# 画像を含むファイルや、画像そのものを変換
result = md.convert("chart.png")
print(result.text_content)
これにより、通常はテキスト化できないグラフの内容なども、Markdownテキストとして記述・保存が可能になります。
5. 高度な設定と注意点
構造の維持
MarkItDownは、以下の順序でドキュメントを処理します。
- プラグインの選択: 拡張子に基づき、適切なパーサー(例: PDFなら
pdfminer等)を選択。 - テキスト抽出: 構造(見出し、リスト、テーブル)を保持したまま抽出。
- Markdown変換: プレーンテキストに整形。
RAGパイプラインへの統合
技術者がこのツールを採用する最大のメリットは、LLMへの入力データの標準化です。PDFやWordが混在する社内ストレージをMarkItDownで一括処理し、ベクトルデータベースに格納するフローが一般的です。
# フォルダ内の全ファイルを一括変換する例
import os
from markitdown import MarkItDown
md = MarkItDown()
source_dir = "./docs"
for filename in os.listdir(source_dir):
if filename.endswith((".pdf", ".docx", ".pptx")):
path = os.path.join(source_dir, filename)
result = md.convert(path)
with open(f"{path}.md", "w", encoding="utf-8") as f:
f.write(result.text_content)
6. まとめ
MarkItDownは、これまで「Pandoc」や「PyMuPDF」などを組み合わせて自前で構築していた変換処理を、Microsoftクオリティで一つにまとめた決定版と言えます。
- 手軽に試すなら: CLI
- 業務に組み込むなら: Python API + LLM連携
特にRAGの実装において、データの前処理に悩んでいるエンジニアの方は、ぜひ一度試してみてください。
リソース
- GitHub:microsoft/markitdown
- ライセンス: MIT License


コメント