MarkItDownで文書をLLM向けMarkdownへ変換する
PythonでファイルやOffice文書をMarkdownに変換します。
ひと目でわかる
- これは何?
- microsoft/markitdownは、PDF、Office文書、画像、音声、HTML、CSVなどを構造を保ったMarkdownへ変換するPythonユーティリティです。
- 誰に向いている?
- MarkItDownは、文書を人間向けに完全再現するより、LLMやテキスト解析パイプラインが扱いやすいMarkdownへ変換したいチームに向きます。PDF、PowerPoint、Word、Excel、画像、音声、HTML、CSV、JSON、XMLなど範囲は広い一方、README自身が人間向けの高忠実度変換を主目的にしていないと説明しています。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 1 日前です。
- 何の言語で書かれている?
- 主に Python です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
解析パイプライン向けに構造を残す変換器
MarkItDownは、さまざまなファイルをMarkdownへ変換する軽量なPythonユーティリティです。READMEは、見出し、リスト、表、リンクなど重要な文書構造を残すことを重視し、LLMやテキスト解析の入力に使う道具として位置付けています。人間が読むための見た目を完全に再現する高忠実度変換が主目的ではない点も明記されています。
対応形式にはPDF、PowerPoint、Word、Excel、画像のEXIFとOCR、音声のEXIFと音声文字起こし、HTML、CSV、JSON、XML、ZIP、YouTube URL、EPUBなどがあります。メタデータではPython、MITライセンス、mainブランチ、176,821スター、12,993フォーク、903件のオープンイシュー、v0.1.7が記録されています。注目度は品質の代替ではありません。
Markdownを中間表現にする理由
READMEは、Markdownがプレーンテキストに近く、最小限の記法で見出しや表などの構造を表せることを理由に挙げています。主要なLLMがMarkdownを理解しやすく、トークン効率の面でも扱いやすいという説明です。ここでの価値は、元ファイルの見た目をそのまま配ることではなく、解析に必要な意味をテキストの形で残すことにあります。
この目的なら、ページ配置やフォントの完全再現より、段落、表、リンク、見出しの順序が保たれているかを先に評価します。契約書や帳票など、配置自体が意味を持つ文書ではMarkdown化で失われる情報を列挙し、原本を別に保存します。READMEの説明を、利用する文書の種類ごとの受け入れ条件へ変換することが大切です。
Python環境と形式別依存関係
MarkItDownはPython 3.10以上を必要とし、依存関係の衝突を避けるため仮想環境を推奨しています。標準のvenv、uv、Anacondaを使う入口がREADMEにあり、インストールはpip install 'markitdown[all]'、ソースからならpackages/markitdown[all]をeditableで入れる方法が示されています。
すべての形式を一括で入れず、pdf、docx、pptx、xlsx、xls、outlook、Azure Document Intelligence、Azure Content Understanding、音声、YouTube文字起こしのオプション依存を個別に選ぶこともできます。採用時は必要形式だけを一覧化し、依存の版、外部サービス、実行権限を固定します。allを入れたからすべての入力が同じ品質になるわけではありません。
CLIとPythonから同じ資料を検証する
CLIではmarkitdown path-to-file.pdf > document.md、または-oで出力先を指定し、標準入力から内容をパイプする使い方が示されています。ファイルをどこへ書くかを明示できるため、入力と出力の保存場所を分けた処理に向きます。PythonではMarkItDownをインスタンス化し、convertの結果にあるtext_contentを扱います。
初回検証では、同じPDFやOffice文書をCLIとPythonから変換し、見出し、表、リンク、画像由来の文字、改行、文字コードを比較します。READMEは変換可能な形式を列挙しますが、各形式のすべての機能を保証する互換表ではありません。スキャンPDF、複雑な表、埋め込み画像、音声は、代表サンプルを固定して結果を保存する必要があります。
プラグインとOCRの扱い
3rd-partyプラグインは初期状態で無効です。--list-pluginsでインストール済みを確認し、--use-pluginsで有効化します。markitdown-ocrはPDF、DOCX、PPTX、XLSX内の画像からOCRを行い、LLM Vision用のllm_clientとllm_modelを使うとREADMEにあります。クライアントを渡さなければプラグインは読み込まれてもOCRを静かに省略し、組み込み変換器へ戻ります。
プラグインを使うときは、どの外部モデルへ画像や文書が送られるか、失敗時に何が出力されるか、プラグインの版と権限を確認します。プラグインを有効にした状態と無効の状態を同じ入力で比較し、想定しないネットワークアクセスや出力変化がないかを記録するべきです。
Azure連携と構造化フィールド
Azure Content Understanding向けのオプション依存も用意されています。READMEは、ドキュメント、画像、音声、動画のマルチモーダル処理、より高品質な変換、YAML front matterとしての構造化フィールド抽出を特徴として挙げています。請求額、領収日、契約条項などのドメイン項目をアナライザーで抽出する用途が想定されています。
組み込み変換器やDocument Intelligence統合ではフィールドを公開しないという説明もあります。したがって、単純なMarkdown本文が必要なのか、構造化データが必要なのかで経路を分けます。クラウド処理を選ぶ場合は、文書の送信先、保持、認証、費用、地域、結果の再現性をMarkItDown本体とは別に確認します。
入力権限を狭くしMITライセンスを確認する
READMEの重要事項は、MarkItDownが現在のプロセスの権限でI/Oを行うという警告です。open()やrequests.get()と同じく、プロセスからアクセスできる資源へ到達できます。信頼できない環境では入力をサニタイズし、用途に必要な最も狭いconvert_localやconvert_streamなどの関数を使うよう案内されています。
この警告から、変換サービスを共有ホストで動かす場合は、入力ディレクトリ、ネットワーク、出力先、プラグイン、外部URLへのアクセスを分離する必要があります。ライセンスはMITですが、ライセンスは安全審査や変換品質の保証ではありません。v0.1.7を基準に、信頼できる文書と信頼できない文書を分けた検証を行い、生成Markdownと原本を追跡できる形で運用へ入れるのが適切です。
文書変換の評価では、変換前のファイルをハッシュなどで識別し、使ったオプション依存とプラグインを処理記録へ添えます。表の行列、ページの順序、脚注、画像内文字、音声の区切りは、本文が読めるかだけでは判断できません。人が確認する必要がある箇所を結果に残し、原本を捨てずに再処理できる状態を保つことが、解析パイプラインの信頼性を支えます。
編集部の結論
MarkItDownは、文書を人間向けに完全再現するより、LLMやテキスト解析パイプラインが扱いやすいMarkdownへ変換したいチームに向きます。PDF、PowerPoint、Word、Excel、画像、音声、HTML、CSV、JSON、XMLなど範囲は広い一方、README自身が人間向けの高忠実度変換を主目的にしていないと説明しています。入力は現在プロセスの権限で読まれるため、採用前に信頼できない入力の隔離、必要最小限のconvert関数、出力品質を形式別に確認してください。
コミュニティノート