[{"data":1,"prerenderedAt":229},["ShallowReactive",2],{"content-/book-archive-ingest-path-and-ocr-rebuild":3,"all-pages-for-dir":207,"related-/book-archive-ingest-path-and-ocr-rebuild":208,"og-image-/book-archive-ingest-path-and-ocr-rebuild":228},{"id":4,"title":5,"body":6,"category":189,"concepts":190,"description":191,"extension":192,"meta":193,"navigation":161,"ogImage":190,"path":194,"project_name":195,"published":196,"publishedAt":197,"seo":198,"source":199,"stem":200,"tags":201,"todo":190,"unpublished":196,"updatedAt":190,"__hash__":206},"pages/2026-08/2026-08-06/book-archive-ingest-path-and-ocr-rebuild.md","自炊した蔵書は「取り込み済み」でも使えるとは限らない",{"type":7,"value":8,"toc":176},"minimark",[9,13,17,20,25,28,31,34,37,40,43,46,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,147,150],[10,11,5],"h1",{"id":12},"自炊した蔵書は取り込み済みでも使えるとは限らない",[14,15,16],"p",{},"朝いちばんに、クラウドストレージの共有リンクを Claude Code に渡した。\n裁断した本のPDFはここに全部入っている、という所在の情報をまずドキュメントとして残しておきたかった。\nついでに、前の晩に手元へ落とした2冊を読み解いて整形しておいてほしい、と足した。",[14,18,19],{},"返ってきたのは「2冊とも取り込み済みです」だった。",[21,22,24],"h2",{"id":23},"入っていないと思ったら入っていた","入っていないと思ったら、入っていた",[14,26,27],{},"思い込みの出どころははっきりしている。\nこの2冊を取り込んだのは旧マシンで、そのときの作業跡が今の環境からは見えなかった。\n画面に何も残っていないので、まだ手を付けていない本だと判断していた。",[14,29,30],{},"実際には取り込みも後処理も終わっていた。\n記憶のほうが正しかったのに、目の前の画面を信じて上書きしてしまったことになる。",[14,32,33],{},"同じ勘違いは次もやる。\nだから所在のドキュメントに、どのマシンで取り込んだ分がどこまで反映されているか、という一節を足させた。\n原本の置き場所だけ書いても足りない。\nどの機械で何をしたかは、蔵書のデータベースを引いても出てこない。",[21,35,36],{"id":36},"スキル化の計画書を一区切りにする",[14,38,39],{},"夜、蔵書を素材にしたスキル化の計画書を開いた。\nこの計画書からの作成はもう終わりでいいのか、と確認した。",[14,41,42],{},"答えは、終わりでいい、だった。\nただし計画書の側にはそう書かれていなかったので、2箇所に追記させた。",[14,44,45],{},"完了の判断が頭の中にしかない状態は、書いていないのと変わらない。\n数日置いて開き直したときに、どこから再開すればいいのかが分からなくなる。\n締め方まで含めて計画書だ、と思うようになった。",[21,47,49],{"id":48},"入っていると思ったら使えなかった","入っていると思ったら、使えなかった",[14,51,52],{},"深夜になって、ある専門書の巻末が気になった。\n数字だけが並んだ表が20ページほど続く付録がある。\n蔵書のデータベースには入っているはずなので、そこから引けばいいと考えた。",[14,54,55],{},"引かせてみると、該当ページはたしかに存在した。\nただし19ページ分が1つの塊に固まっていて、5万字を超える巨大なチャンクになっていた。\n中身を見ると、数字が並ぶはずの場所に「+税」や「3歳」といった文字列が混ざっている。\nOCRが表の格子を追いきれず、別の場所の断片を拾い集めていた。",[14,57,58],{},"行はある。\n中身は使えない。\n「取り込み済み」に2段階あることをここで初めて実感した。",[21,60,61],{"id":61},"原本から取り直す",[14,63,64],{},"DBの側は諦めて、クラウドに置いてある原本のPDFを落とし直させた。\n175MBある。",[14,66,67],{},"付録は横向きに組まれていた。\n1枚の画像に上下2ブロックが入っていて、それぞれが紙面1ページ分の表になっている。\n回転させてから分割させると、20ページが40ブロックになった。\nいきなり全部を投げず、まず1枚だけ codex に渡して出力の形式と精度を確かめさせた。\n形が固まってから、残りを10並列で流した。",[14,69,70],{},"待っている間に検証の側を用意させた。\nこの表には強い規則性があるので、目視ではなく全件を機械で確かめられる。",[14,72,73],{},"最初に立てた規則は一部が外れていた。\n実データから導き直させて、3回直したところで2,500行すべてが式と整合した。\n途中で19件の指摘も出たのだが、こちらは表の区切りで値がリセットされる正常な挙動を検証側が拾っていただけだった。",[14,75,76],{},"そのあと表計算に転記させ、書き込んだ内容をAPI経由で読み返して往復照合させた。\n不一致は0行だった。\n別口で、レビュー用のサブエージェントに原本の画像と突き合わせさせた。\n2,625セルの目視照合でも不一致は0だった。",[21,78,79],{"id":79},"表の規則は本文にも書いてあった",[14,81,82],{},"規則が出そろってから、本文側を読ませた。\n自分が実データから導いた形と、本の中の記述が食い違っていないかを確かめたかった。",[14,84,85],{},"一致していた。\n著者は本文の中でこの規則を明示していて、付録の使い方もその数ページ後に書いてある。\n自分は、本を読めば分かることを表のほうから逆算していたことになる。",[14,87,88],{},"面白かったのは規則の強さのほうだ。\n表の各行は、独立した数値の並びではない。\n前の値から次の値が決まる連鎖になっていて、全体が数本の短い式で再現できてしまう。",[14,90,91],{},"これはダイヤル錠の候補を絞り込んだ一覧である。\n機械の構造上ありえない組み合わせを落とすと、目盛りの数から素朴に想像するよりずっと少ない候補しか残らない。\n守る側から読むと、この付録は「桁が多く見える錠でも、候補は見た目ほど多くない」という話になる。\n具体的な式と値、操作の手順はここには書かない。",[21,93,94],{"id":94},"太字は電子化で落ちる",[14,96,97],{},"レビューから重い指摘が返ってきた。\n太字が丸ごと落ちている、という。",[14,99,100],{},"表の一部の行が太字になっていて、それは著者が現場で当たりを付けている組を指している。\n太字はOCRの結果にもDBにも残らない。\n原本の画像を見に行かないと存在すら分からない。",[14,102,103],{},"codex に太字だけを抜き出させ、レビュー側が独立に目視で報告してきた行と照合した。\n2つの経路が完全に一致した。\n太字は77件で、全体の3%ほどだった。",[14,105,106],{},"ここで妙なことに気づいた。\n太字が集中している組と、本文が確率の高い範囲として挙げている値が一致しない。\n本文が中心とする組は、太字28種のうち11番目でしかなかった。\n著者が現場で溜めた勘のほうを太字が指している。",[14,108,109],{},"電子化で落ちるのは文字ではない。\n文字に載っていた強弱が落ちる。\nテキストにしてしまえば、どの行も同じ重さの文字列になる。",[21,111,112],{"id":112},"回して確かめる画面にする",[14,114,115],{},"表を眺めても規則は頭に入らないので、盤を回して確かめられる画面を作らせた。\nボタンを順に押していくと段ごとに合否が色で分かれて、どこまで揃っているかが目で見える。",[14,117,118],{},"父が見るので、文字を大きくしてほしいと注文を付けた。\n一度直させたのに注記だけが小さいままだったので、実測させた。\nルートの文字サイズが既定のままで、相対指定がそこに引きずられていた。\nルートごと上げて、いちばん小さかった注記を本文と同じ大きさにそろえた。\n12.5pxが20pxになった。",[14,120,121],{},"見出しが読点でないところで割れて「77行し/かない」と表示されていたのも直した。\n文字数を均す指定が日本語で悪さをしていた。",[14,123,124],{},"PCでしか見ないと伝えたので幅も広げた。\n1画面に収まる版は別ファイルとして作らせ、今の版はそのまま残した。\n気に入っているものを作り直させて失うのがいちばん惜しい。",[21,126,127],{"id":127},"学び",[129,130,131,135,138,141,144],"ul",{},[132,133,134],"li",{},"「取り込み済み」には2段階ある。DBに行があることと、中身が使えることは別物だった",[132,136,137],{},"どのマシンで何をしたかは、データベースを引いても分からない。所在のドキュメント側に書いておく必要がある",[132,139,140],{},"完了の判断は計画書に書いて初めて完了になる。頭の中にあるうちは、次に開いたときに再開点を探すことになる",[132,142,143],{},"OCRを通した時点で、太字のような装飾に載っていた情報は消える。原本を見に行く経路を残しておく",[132,145,146],{},"規則を体で分かるには、表を眺めるより触れる形にしたほうが早い。作った画面で、本の理論値より著者の印のほうが早く当たる場面が出た",[21,148,149],{"id":149},"明日やること",[129,151,154,164,170],{"className":152},[153],"contains-task-list",[132,155,158,163],{"className":156},[157],"task-list-item",[159,160],"input",{"disabled":161,"type":162},true,"checkbox"," 1画面に収まる版を、全ステップ通して動かして確認する",[132,165,167,169],{"className":166},[157],[159,168],{"disabled":161,"type":162}," 巨大チャンクになっていた付録ページを、取り直した結果でDB側に入れ直す",[132,171,173,175],{"className":172},[157],[159,174],{"disabled":161,"type":162}," 表を含む本が他にもないか、同じ壊れ方をしていないか当たらせる",{"title":177,"searchDepth":178,"depth":178,"links":179},"",2,[180,181,182,183,184,185,186,187,188],{"id":23,"depth":178,"text":24},{"id":36,"depth":178,"text":36},{"id":48,"depth":178,"text":49},{"id":61,"depth":178,"text":61},{"id":79,"depth":178,"text":79},{"id":94,"depth":178,"text":94},{"id":112,"depth":178,"text":112},{"id":127,"depth":178,"text":127},{"id":149,"depth":178,"text":149},"dev",null,"クラウドストレージに置いた電子化書籍を、旧マシンで取り込んだ分が新しい環境から見えず未取り込みだと誤認した。所在と経路をドキュメントに残し、OCRが壊していた巻末の表を原本から作り直して規則を確かめた1日の記録。","md",{},"/book-archive-ingest-path-and-ocr-rebuild","book-knowledge-base",false,"2026-08-06T00:00:00.000Z",{"title":5,"description":191},"make-diary","2026-08/2026-08-06/book-archive-ingest-path-and-ocr-rebuild",[195,202,203,204,205],"OCR","蔵書管理","クラウドストレージ","Claude Code","mFq3DO7NH0WKjUCAOo-yPMp8qSeholUKjgzejcPcWFE",[],[209,213,217,221,225],{"title":210,"path":211,"publishedAt":212},"蔵書DBを棚卸しして専門書の抜けを洗い出し、簡易デューデリジェンス支援スキルを実装した","/bookshelf-db-stocktake-and-dd-skill","2026-08-05T00:00:00.000Z",{"title":214,"path":215,"publishedAt":216},"yomitokuで書籍PDFをMarkdown化してTurso DBに格納する：日本語特化AI OCRで蔵書を全文検索可能にする","/yomitoku-book-pdf-to-markdown-db","2026-05-10T00:00:00.000Z",{"title":218,"path":219,"publishedAt":220},"書籍OCRバッチクリーンアップとtokyo-onkeiデプロイ修正 - 2026年2月20日","/book-ocr-and-misc-2026-02-20","2026-02-20T00:00:00.000Z",{"title":222,"path":223,"publishedAt":224},"2026年2月19日の開発日記 - 書籍OCRパイプラインを丸一日磨き上げた日","/2026-02-19-diary","2026-02-19T00:00:00.000Z",{"title":226,"path":227,"publishedAt":224},"書籍OCRパイプライン整備 - yomitoku + SQLite + 並列クリーンアップで蔵書DB構築を加速した一日","/book-ocr-pipeline-2026-02-19","https://log.eurekapu.com/og/blog/book-archive-ingest-path-and-ocr-rebuild.png?v=2026-08-06T00%3A00%3A00.000Z&title=%E8%87%AA%E7%82%8A%E3%81%97%E3%81%9F%E8%94%B5%E6%9B%B8%E3%81%AF%E3%80%8C%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF%E6%B8%88%E3%81%BF%E3%80%8D%E3%81%A7%E3%82%82%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%A8%E3%81%AF%E9%99%90%E3%82%89%E3%81%AA%E3%81%84&author=Kei%20Komatsu&sig=14dd391ef7a781ad",1786233161655]