pdf の論文をスマホでも読みたいので markdown への変換をしてくれる VikParuchuri/marker を試してみる
ここのスクラップで DDB の論文を読みたいのだが、スマホでも読みたいので markdown やリフロー型の epub などスマホ画面でも読むに耐えるフォーマットに変換できる手段が欲しかった。
VikParuchuri/marker というものが紹介されていたので、これを利用できないか試してみる。
紹介記事:
[1] note.com . 0xpanda alpha lab . PDFをMarkdownに変える六つのステップ:Markerの魔法
読みたかったのは 2007 年の DDB の論文。
Dynamo: Amazon’s Highly Available Key-value Store
私の作業環境は以下のような感じ。
key | value |
---|---|
PC | MacBook Pro M1 2021 |
OS | MacOS 13.4 |
Python | 3.11.7 |
pyenv | pyenv 2.3.33-4-g3fc9f438 |
poetory | Poetry (version 1.7.1) |
pyenv を使っているので、 pyproject で指定しているバージョンをよしなに local 指定した。
ひとまず私の手元にあった 3.11.7 を使うことにした。
$ cd marker
$ pyenv local 3.11.7
$ python -V
Python 3.11.7
$ pip install portory
$ pyenv shell
$ poetory install
Mac 向けの README のインストラクションに従っていく。
$ xargs brew install < scripts/install/brew-requirements.txt
$ brew list tesseract
/opt/homebrew/Cellar/tesseract/5.3.3/bin/ambiguous_words
/opt/homebrew/Cellar/tesseract/5.3.3/bin/classifier_tester
/opt/homebrew/Cellar/tesseract/5.3.3/bin/cntraining
/opt/homebrew/Cellar/tesseract/5.3.3/bin/combine_lang_model
...
# create local.env
$ cat local.env
TESSDATA_PREFIX=/opt/homebrew/Cellar/tesseract/5.3.3
TORCH_DEVICE=mps
$ mkdir papers
$ cd papers
$ wget -o papers https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
$ cd ..
$ mkdir outputs
$ python convert_single.py papers/amazon-dynamo-sosp2007.pdf \
outputs/amazon-dynamo-sosp2007.md --parallel_factor 2 --max_pages 30
preprocessor_config.json: 100%|███████████████████████████████████████████████████████████████████████| 502/502 [00:00<00:00, 465kB/s]
tokenizer_config.json: 100%|█████████████████████████████████████████████████████████████████████| 1.61k/1.61k [00:00<00:00, 8.10MB/s]
vocab.json: 100%|██████████████████████████████████████████████████████████████████████████████████| 798k/798k [00:00<00:00, 1.24MB/s]
merges.txt: 100%|███████████████████████████████████████████████████████████████████████████████████| 456k/456k [00:00<00:00, 978kB/s]
tokenizer.json: 100%|████████████████████████████████████████████████████████████████████████████| 2.11M/2.11M [00:00<00:00, 2.55MB/s]
added_tokens.json: 100%|████████████████████████████████████████████████████████████████████████████| 75.0/75.0 [00:00<00:00, 134kB/s]
special_tokens_map.json: 100%|████████████████████████████████████████████████████████████████████████| 267/267 [00:00<00:00, 282kB/s]
preprocessor_config.json: 100%|██████████████████████████████████████████████████████████████████████| 502/502 [00:00<00:00, 2.28MB/s]
tokenizer_config.json: 100%|█████████████████████████████████████████████████████████████████████| 1.61k/1.61k [00:00<00:00, 8.04MB/s]
vocab.json: 100%|██████████████████████████████████████████████████████████████████████████████████| 798k/798k [00:00<00:00, 1.22MB/s]
...
$ ls outputs
amazon-dynamo-sosp2007.md amazon-dynamo-sosp2007_meta.json
生成した markdown を眺めてみたが、ちょいちょいセクションが崩れていたり、図の画像が抽出できなかったりで不完全という印象だった。
とはいえ、テキストの抽出には概ね成功していそうなので、あとは手作業でセクションの調整などしながら画像はスクショして自分でリンクさせれば良さげ。
あとは手直ししたファイルをプライベートレポジトリに commit すればスマホの GitHub アプリから読めるようになる。
あと表もキツいっぽい。こっちはテキストデータを pdf が持っているので、ChatGPT に食わせて再構成させるか、こちらも図と同じでスクショから貼り付ければとりあえずは良さそう
段落が結構崩れているので、そのへんの手直しが必要なのと、図表の挿入をこっちでやらねばならない感じがちょっと面倒ではあった。あとページ番号やページ末尾の注釈とかがもっといい感じに検出できてくれていると大変ありがたい気がした。
30 - 60min くらいかけて手直しが完了した。
私も同じようなことをしたくてちょくちょく調べていました.
料金が1ページあたり1.5円と値段がネックですが,図の切り抜き性能もいいですよ
あと,1円課金すれば,数式もLatexで表現してくれます
情報ありがとうございます!
さきほど試してみましたが、prebuild のモデルでも段組みのような文章構造をかなり正確に出してくれて、非常に良さそうですね。このスクラップを書いた時点の試行結果よりも求めるものに近いアウトプットが得られました。
私が読みたかった論文に関して言うと prebuild のままだと図の切り抜きが今ひとつという感じでしたが、それでもこのスクラップを書いていた時期の試行結果よりはるかに便利です。有益情報ありがとうございます。