前回はDocling
というドキュメントコンバートツールを紹介しました。その後、他の変換ツールを探していた所、MicrosoftさんのGitHubにMarkItDown
というツールがある事がわかりました。用途はDocling
と大きく変わりませんが、対応フォーマットが特殊ものもあり、こちらも見逃せないなということでメモを取っています。
MarkItDown
は、様々なファイルをMarkdown
に変換するユーティリティで、インデックス作成、テキスト分析などにも対応しているようです。
インデックス作成機能により、RAGでの検索への活用も期待できます。また、対応するファイルフォーマットも以下のように多様なのですが、このなかで便利そうなのがAudio、XML、ZIPファイルでしょうか。Audioファイルの箇所にspeech transcription
と記載されているので、かなり守備範囲が広いなと思います。
(注)🥲XMLとAudioファイル(wav、mp3)は試してみましたが未対応というエラーが発生しました😫
対応するファイル形式
- PowerPoint
- Word
- Excel
- Images (EXIF metadata and OCR)
- Audio (EXIF metadata and speech transcription)😫
- HTML
- Text-based formats (CSV, JSON, XML😫)
- ZIP files (iterates over contents)
つづいてMarkItDown
の使い方をみていきます。
- インストール方法
- コマンドラインからの実行
- pdfファイルを変換する
- ローカルにあるDOCXファイルのコンバート
- ローカルにあるZIPファイルのトランスポート
- Pythonのコード内から変換を行う
- おわりに
インストール方法
インストールはpipコマンドで行います。Docling
とは異なりGPU向けのライブラリ関係をインストール行わない分インストールサイズは小さいようです。Ubuntu24.04などではPEP668エラーが発生する可能性があります。
# pipでのインストール $ pip install markitdown # PEP668エラーが発生した場合 $ pip install --break-system-packages --user markitdown
コマンドラインからの実行
インストールが完了したら、コマンドラインから実行してみます。そのままmarkitdownコマンド
を実行すると標準入力待ち状態になるので、--helpオプションを使用して実行すると以下の様に表示が行われます。
MarkItDown
オプションを調べる
$ markitdown --help usage: SYNTAX: markitdown <OPTIONAL: FILENAME> If FILENAME is empty, markitdown reads from stdin. EXAMPLE: markitdown example.pdf OR cat example.pdf | markitdown OR markitdown < example.pdf Convert various file formats to markdown. positional arguments: filename options: -h, --help show this help message and exit
この--help表示にもあるように3つのパターンで実行ができるとのことでしたが、GitHubのREADMEにある-oオプション
は使用できませんでした🙄(実質2パターンとなると思ったほうがよい?)
コマンドライン的な機能が多いのでツールというよりもツールチェーン的な位置づけになっているのかもしれません。
リダイレクト
で変換結果をファイルを保存する方法
$ markitdown path-to-file.pdf > document.md
パイプ
を使用して標準出力を使って変換する方法
$ cat path-to-file.pdf | markitdown
pdfファイルを変換する
MarkItDown
はコンバータなので、Webからデータを取得する機能はありません。あらかじめダウンロードして変換する。
$ markitdown 2206.01062v1.pdf > 2206.01062v1.md
URL指定ができるとちょっと楽なのになという点は残念です。この用途では、以下のようにコマンドを組み合わせてURL先のファイルを取得し変換します。以下の例ではcurlコマンド
で組み合わせています。
$ curl https://arxiv.org/pdf/2206.01062 --output - | markitdown > 2206.01062v1.md
元のpdfファイル
MarkItDownの変換結果
ドキュメント内のテキストの読み取りに関しては問題はありません。 ただ、気になったのは、一部画像がmarkdownデータに含まれていない箇所があったところ、テーブル構造の再現性にやや課題があるところでしょうか。
ローカルにあるDOCXファイルのコンバート
続いてはMicrosoft Wordのファイル形式であるDOCXファイルをmarkdown形式に変換してみます。
$ markitdown test.docx > test.md
こちらも概ね問題なさそうです。pdfのときに感じたテーブルの構造に関しては、DOCXの方が再現率は高そうです。
ローカルにあるZIPファイルのトランスポート
Docling
には無かった機能です。ZIP形式で固められたファイルを1つのmdファイルにしてくれます。各ファイル形式に関しては単独処理と大きく変化はありませんが、1つのファイルにまとめるためファイル名の区切り(## File: test.xlsx
といった表記)が含まれます。メールのマルチパートみたいな印象でしょうか。
$ markitdown test_files.zip > test_files.md
ソースコードなどを一式まとめてMarkdown形式にしてLLMの入力とするときには便利そうな機能です。
Pythonのコード内から変換を行う
Pythonのコード内から変換処理を行ってみます。MarkItDown
のconvert関数にファイル名を与えることで変換が簡単に行えます。ファイルに保存する場合には戻り値をファイルに格納が必要です。
from markitdown import MarkItDown md = MarkItDown() result = md.convert("test.xlsx") print(result.text_content)
おわりに
今回はMarkItDown
というドキュメント変換ツールについて調べてみました。対応フォーマットの豊富さや、ZIPファイルの一括変換など、独自の特徴を持つツールだなという印象です。また、更に対応フォーマットを増やそうとする意気込みは感じます。一方で、現時点ではドキュメントの整備が十分とは言えず、一部の機能(XMLやAudioファイルの変換)が未実装という課題も見られます。
RAGシステム構築のためのツールの選択肢として、Docling
とMarkItDown
の特徴を理解した上で、用途に応じて使い分けていくのが良さそうです。今後のアップデートにも期待したいと思います。