MarkItDownについて
2024-12-14にMicrosoftから面白そうなものが公開されていた。
その名もMarkItDownというソフトウェアだ。
色々なファイルをMarkdownという形式に変換するという内容である。
公式リポジトリから、変換可能な形式を引用すると
- PDF (.pdf)
- PowerPoint (.pptx)
- Word (.docx)
- Excel (.xlsx)
- Images (EXIF metadata, and OCR)
- Audio (EXIF metadata, and speech transcription)
- HTML (special handling of Wikipedia, etc.)
- Various other text-based formats (csv, json, xml, etc.)
- ZIP (Iterates over contents and converts each file)
と多種多様なファイルを扱っている。
役に立ちそうなのは…
神は「光あれ」と言われた。すると光があった
という聖書の一説がある。
現代、神ではないが神のように扱われているものがある。AIだ。
AIは「データあれ」と言われた。すると情報があった
というのが今だろう。
そのAIにデータを用意するとして、全てがテキストで保存されてるわけではない。
何かしらでAIが読み込める形にする必要があるが、ここでMarkItDownの出番だ。
PDFで保存されている文章をMarkdownに変換するとAIも大喜びだろう。
仕事で扱うために、実際に動かしてみた。
実際の利用編
このリポジトリにコードを公開している。
uvというツールを用いて、環境構築も極力楽に出来る設計だ。
公開しているプログラムの中身はこんな感じ。
from pathlib import Path
from markitdown import MarkItDown
def convert_pdfs_to_markdown(src: str, dest: str):
"""
PDFファイルを指定したディレクトリ内でMarkdown形式に変換し、出力先ディレクトリに保存する。
Args:
src (str): 入力PDFファイルが格納されているディレクトリ。
dest (str): 変換したMarkdownファイルの出力先ディレクトリ。
"""
# 入力ディレクトリと出力ディレクトリのパスを設定
src_dir = Path(src)
dest_dir = Path(dest)
# 出力先ディレクトリが存在しない場合は作成
dest_dir.mkdir(parents=True, exist_ok=True)
# PDFファイルを探索してMarkdownに変換
for pdf_file in src_dir.glob("*.pdf"):
mid = MarkItDown()
result = mid.convert(str(pdf_file))
# 出力先ファイル名を設定
md_file = dest_dir / (pdf_file.stem + ".md")
# Markdownファイルとして保存
with open(md_file, "w", encoding="utf8") as f:
f.write(result.text_content)
print(f"{pdf_file.name} -> {md_file.name} に変換完了")
# 使用例
if __name__ == "__main__":
src_dir = "./src" # 入力元ディレクトリ
dest_dir = "./dest" # 出力先ディレクトリ
convert_pdfs_to_markdown(src=src_dir, dest=dest_dir)
そんなに複雑なプログラムではない。
大事な部分としては
result = mid.convert(str(pdf_file))
で変換の処理result.text_content
でテキストの中身を取り出す
この2点だ。
終わりに
多用するプログラムではないかもしれないが、新しいツールを使うというのは楽しい体験だった。
ちまちま今回のような記事を書くのも楽しいかもしれない。