yomitoku OCRで専門書2冊をデジタル化してTurso DBに格納した記録
2冊の専門書をyomitoku OCRに通し、Turso DBに流し込んだ。201ページの参考書と320ページの専門書。どちらもOCR→図リネーム→DB格納の同じパイプラインで処理したが、Turso移行後のAPIシグネチャ変更に2セッションとも引っかかり、同じ手順で修正する羽目になった。
yomitoku OCRとは
yomitokuは日本語に特化したAI OCRエンジン。PDFを入力すると、ページごとのMarkdownファイルと、検出した図・表・レイアウト画像を出力する。日本語の縦書き・横書き混在や複雑なレイアウトにも対応しており、汎用OCRと比べて日本語テキストの認識精度が高い。
1冊目: 参考書(201ページ)
OCR実行
201ページのPDFをyomitokuに通した。出力として各ページのMarkdownファイルに加え、124個の図ファイルが生成された。
図のリネーム(124件)
OCRが出力するファイル名は figure_001.png のような連番で、中身を見なければ何の図かわからない。124件の図をひとつずつ確認し、内容に基づいたファイル名にリネームした。
リネームの流れ:
- 画像ファイルを目視確認
- 対応するMarkdownの文脈から図の意味を特定
figure_001.png→cashflow-statement-example.pngのように命名- Markdown内の参照パスも一括置換
Turso DBに格納
リネーム済みのMarkdownをチャンク分割してTurso DBに格納した。ここで最初のつまずきが起きた。
2冊目: 専門書(320ページ)
OCR実行
320ページの専門書をOCRにかけると、961ファイルが生成された。内訳はMarkdownファイル、レイアウト画像、OCR処理画像の3種類。このうち図として意味のあるものは44件だった。
図のリネーム(44件)
1冊目と同様の手順で44件をリネーム。ページ数が多い割に図が少なかったのは、テキスト主体の書籍だったため。
DB格納
2冊目もチャンク分割してTurso DBに格納。1冊目で経験した問題がここでも再現した。
Turso移行後のAPI変更 ── 2回同じ壁にぶつかる
2冊の処理は別セッションで行ったが、どちらのセッションでも同じ試行錯誤が発生した。
何が起きたか
book-knowledge-baseプロジェクトは以前ローカルSQLiteで動いていたが、途中でTurso(クラウドDB)に移行済みだった。移行に伴いPythonスクリプトのAPIシグネチャが変わっていたが、その変更が頭に入っていなかった。
具体的には2点:
db_path引数が不要に: ローカルSQLite時代はdb_path="./books.db"を渡していたが、Turso移行後はURLとトークンを環境変数から読むため、db_pathを渡すとエラーになったinit_books_db()のスキップが必要: テーブルは既にTurso上に存在するため、初期化関数を呼ぶとテーブル再作成で既存データを壊すリスクがあった
2セッションとも同じ解決手順
エラー発生: db_path引数が不正
↓
Turso移行済みだったことを思い出す
↓
db_pathを削除し、環境変数から接続情報を取得するよう修正
↓
init_books_db()を呼ばずに直接登録処理を実行
↓
格納成功
1冊目で解決したのに、2冊目のセッションで再び同じエラーに遭遇した。セッションが別だったため、前回の修正が文脈に残っていなかった。Claude Codeのセッション間で学びが引き継がれない典型的なパターン。
パイプライン全体像
2冊を通して固まったパイプラインは以下の通り。
PDF
↓ yomitoku OCR
Markdown + 図ファイル群
↓ 図の選別・リネーム
↓ Markdown内の参照パス更新
クリーンなMarkdown + 命名済み図
↓ チャンク分割
↓ Turso DB格納(db_path不要、init_books_dbスキップ)
蔵書データベースに登録完了
処理量まとめ
| 項目 | 1冊目(参考書) | 2冊目(専門書) |
|---|---|---|
| ページ数 | 201 | 320 |
| 生成ファイル数 | 124(図のみ) | 961(MD+画像) |
| リネーム対象の図 | 124件 | 44件 |
| DB格納 | 完了 | 完了 |
学んだこと
- セッション間の知識断絶は仕組みで防ぐ: Turso移行後のAPI変更に2回引っかかった。スクリプトのdocstringやREADMEに「Turso移行済み、db_path不要」と書いておけば、次のセッションのClaude Codeがコードを読んだ時点で気づける
- yomitokuの図出力は玉石混交: OCRが検出する「図」にはレイアウト画像や装飾も含まれるため、毎回選別作業が発生する。閾値による自動フィルタをテンプレート化しておくと次回が楽になる
- 同じパイプラインを2回流すと手順が洗練される: 1冊目で手探りだった手順が、2冊目ではほぼ迷わず進んだ。3冊目以降はスクリプト化できるレベルまで手順が固まった