📝

MarkItDownでPDFをMarkdownに変換してみる

2025/01/01に公開

これはなに

Microsoftが公開した、さまざまなファイルをMarkdownに変換するユーティリティです。
https://github.com/microsoft/markitdown

業務でPDFやエクセルに格納されている情報を抜き出して、データベースへ登録する機能を作っており、ちょうどタイムリーな話題でしたので試してみました。

準備

環境

当方の環境は下記の通りです。
OS:macOS(15.1.1(24B91))
brew:4.4.14
Python:3.13.1
Pip:24.3.1

仮想環境の構築

まずは仮想環境を用意します。

python3 -m venv .venv

仮想環境の起動

さきほど作成した仮想環境を起動します。

source .venv/bin/activate

依存関係の更新と導入

仮想環境のPipを更新します。

python3 -m pip install --upgrade pip

MarkItDownをインストールします。

pip3 install markitdown

実行

コマンドラインからの実行

手元に用意したPDFを、コマンドラインからMarkdown形式に変換するには以下のように実行します。

markitdown test.pdf > document.md

-o オプションを利用して、出力先を指定することも可能です。

markitdown test.pdf -o document.md

パイプを利用して変換結果を閲覧することもできます。

cat test.pdf | markitdown

Python APIによる実行

main.pyを作成しコードからも実行してみました。

from markitdown import MarkItDown

md = MarkItDown()
result = md.convert("test.pdf")
print(result.text_content)

結果

入力

今回は、個人アカウントのGoogle Cloudの請求書がありましたので、こちらを利用してみました。
個人情報の箇所はモザイクにしてます🙏

1ページ目 2ページ目

出力

一部段落がずれてしまっている箇所がありますが、内容は網羅されていますね。

Google Cloud Japan GK

Shibuya STREAM,

3-21-3 Shibuya, Shibuya-ku

Tokyo, 150-0002

Japan

登録番号: T6010003022051

請求書

請求書番号: **********

請求先

**********

**********

**********

**********

**********

詳細

請求書番号
..............................................................

**********

請求書発行日
2024年11月30日
..............................................................

請求 ID
..............................................................
**********

Google Cloud

合計(JPY)

アカウント ID
..............................................................

**********

2024年11月1日 - 2024年11月30日 の概要

小計(JPY)

消費税(10%)

合計(JPY)

お支払い金額は自動請求されます。

¥0

¥0

¥0

¥0

1/2 ページ

請求書

請求書番号: **********

Google Cloud Platform の料金表(console.cloud.google.com/billing/**********/reports/tabular)を使用すると、プロジェ

クトあたりの費用など、詳細な請求書データを表示およびダウンロードできます。

摘要

Google Cloud - 2024年11月の料金

小計(JPY)

消費税(10%)

合計(JPY)

金額(¥)

0

¥0

¥0

¥0

2/2 ページ

おまけ

出力したMarkdownのファイルを、claudeに入力しJSON形式に変換してみました。
LLMに入力する際のテキストデータに変換する手段として、MarkItDownが有効な気配を感じます。
業務で取り扱うPDFファイルなども読み込んでみて、精度などを検証してみようと思います。

{
  "company": {
    "name": "Google Cloud Japan GK",
    "address": {
      "street": "Shibuya STREAM, 3-21-3 Shibuya",
      "city": "Shibuya-ku",
      "prefecture": "Tokyo",
      "postalCode": "150-0002",
      "country": "Japan"
    },
    "registrationNumber": "T6010003022051"
  },
  "invoice": {
    "number": "***************",
    "date": "2024-11-30",
    "id": "***************",
    "accountId": "***************",
    "period": {
      "start": "2024-11-01",
      "end": "2024-11-30"
    }
  },
  "billTo": {
    "name": "***************",
    "address": {
      "street": "***************",
      "building": "***************",
      "city": "***************",
      "prefecture": "***************",
      "postalCode": "***************",
      "country": "***************"
    }
  },
  "billing": {
    "subtotal": 0,
    "tax": {
      "rate": 10,
      "amount": 0
    },
    "total": 0
  },
  "notes": {
    "paymentMethod": "自動請求",
    "additionalInfo": "Google Cloud Platform の料金表(console.cloud.google.com/billing/***************/reports/tabular)を使用すると、プロジェクトあたりの費用など、詳細な請求書データを表示およびダウンロードできます。"
  }
}

Discussion