2026年3月28日土曜日

pdf2md



図:ChatGPTによるMarkdownのイメージ


pdfをMarkdownに変換するOpenDataLoaderというツールがすごいというのをtwitterで見かけた

pdfからテキストを抽出するツールはpdftotextなど沢山あるが,表などでテキストが構造化されていると,出力がぐちゃぐちゃして後処理が面倒なことになる。その点,Markdownは文書の構造を保持するので,事後の利用にもそのまま使えるというわけだ。無料,オープンソース,高速だから,論文・社内資料・契約書、全部MarkdownにしてそのままRAGに投入できる,という触れ込みだ。

そこまで要求しないので,ChatGPTに依頼してもとのソースコードを簡単にしてもらった。実行は,python環境で ./pdf2md.py ○○○.pdf とすればよく,○○○.md が出力される。試してみたところ,表などはうまく再現できていた。数式は未確認。あまり期待してはいけないというのが,ChatGPTのコメントである。ただのテキスト抽出よりはまし。


#!/usr/bin/env python3

# -*- coding: utf-8 -*-

# pdf2md.py


import sys

from pathlib import Path

import shutil

import tempfile

import opendataloader_pdf


def main():

    if len(sys.argv) != 2:

        print("使い方: python pdf2md.py input.pdf")

        sys.exit(1)


    pdf_path = Path(sys.argv[1]).expanduser().resolve()


    if not pdf_path.exists():

        print(f"ファイルが見つかりません: {pdf_path}")

        sys.exit(1)


    if pdf_path.suffix.lower() != ".pdf":

        print(f"PDFファイルを指定してください: {pdf_path}")

        sys.exit(1)


    with tempfile.TemporaryDirectory() as tmpdir:

        opendataloader_pdf.convert(

            input_path=[str(pdf_path)],

            output_dir=tmpdir,

            format="markdown"

        )


        src_md = Path(tmpdir) / f"{pdf_path.stem}.md"

        dst_md = pdf_path.with_suffix(".md")


        if not src_md.exists():

            print(f"Markdownファイルが生成されませんでした: {src_md}")

            sys.exit(1)


        shutil.move(str(src_md), str(dst_md))


    print(f"作成完了: {dst_md}")


if __name__ == "__main__":

    main()



0 件のコメント:

コメントを投稿