Closed4

pdf の論文をスマホでも読みたいので markdown への変換をしてくれる VikParuchuri/marker を試してみる

hassaku63hassaku63

https://zenn.dev/hassaku63/scraps/fc482625369f4c

ここのスクラップで DDB の論文を読みたいのだが、スマホでも読みたいので markdown やリフロー型の epub などスマホ画面でも読むに耐えるフォーマットに変換できる手段が欲しかった。

VikParuchuri/marker というものが紹介されていたので、これを利用できないか試してみる。

https://github.com/VikParuchuri/marker

紹介記事:

[1] note.com . 0xpanda alpha lab . PDFをMarkdownに変える六つのステップ:Markerの魔法

https://note.com/panda_lab/n/ncedca96086b9


読みたかったのは 2007 年の DDB の論文。

Dynamo: Amazon’s Highly Available Key-value Store

https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf

hassaku63hassaku63

私の作業環境は以下のような感じ。

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
hassaku63hassaku63

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
hassaku63hassaku63

生成した markdown を眺めてみたが、ちょいちょいセクションが崩れていたり、図の画像が抽出できなかったりで不完全という印象だった。

とはいえ、テキストの抽出には概ね成功していそうなので、あとは手作業でセクションの調整などしながら画像はスクショして自分でリンクさせれば良さげ。

あとは手直ししたファイルをプライベートレポジトリに commit すればスマホの GitHub アプリから読めるようになる。

あと表もキツいっぽい。こっちはテキストデータを pdf が持っているので、ChatGPT に食わせて再構成させるか、こちらも図と同じでスクショから貼り付ければとりあえずは良さそう

段落が結構崩れているので、そのへんの手直しが必要なのと、図表の挿入をこっちでやらねばならない感じがちょっと面倒ではあった。あとページ番号やページ末尾の注釈とかがもっといい感じに検出できてくれていると大変ありがたい気がした。

30 - 60min くらいかけて手直しが完了した。

このスクラップは4ヶ月前にクローズされました