[{"data":1,"prerenderedAt":285},["ShallowReactive",2],{"content-/book-chunking-by-section":3,"all-pages-for-dir":263,"related-/book-chunking-by-section":264,"og-image-/book-chunking-by-section":284},{"id":4,"title":5,"body":6,"category":243,"concepts":244,"description":245,"extension":246,"meta":247,"navigation":248,"ogImage":244,"path":249,"project_name":250,"published":251,"publishedAt":252,"seo":253,"source":254,"stem":255,"tags":256,"todo":244,"unpublished":251,"updatedAt":244,"__hash__":262},"pages/2026-09/2026-09-13/book-chunking-by-section.md","自炊した入門書を節単位に組み直す（234チャンクを109に）",{"type":7,"value":8,"toc":233},"minimark",[9,13,16,19,22,26,29,32,36,39,42,45,48,51,54,57,60,63,66,69,72,76,79,82,85,88,91,94,97,100,103,106,110,113,116,119,122,125,128,131,134,137,141,144,147,150,153,156,186,189,192,195,198,201,204,207,210,213,216,229],[10,11,12],"p",{},"朝いちばんに投げた指示は一行だけだった。",[10,14,15],{},"「ドキュメントを見て続きをやってください。綺麗にするやつから全部」。",[10,17,18],{},"自炊した数学の入門書を蔵書DBに取り込む作業が、前の日の途中で止まっていた。",[10,20,21],{},"どこまで進んだかを自分で数え直すより、引き継ぎ書に書いた順番をそのままなぞらせるほうが早い。",[23,24,25],"h2",{"id":25},"続きの4工程",[10,27,28],{},"残っていたのは再構造化、クリーンアップ、検証、履歴の記録の4つだった。",[10,30,31],{},"これを頭から順に走らせた。",[23,33,35],{"id":34},"_234のページチャンクを109の節チャンクにする","234のページチャンクを109の節チャンクにする",[10,37,38],{},"再構造化は、OCRにかけた画面単位のチャンクを、本の節の切れ目でまとめ直す工程になる。",[10,40,41],{},"適用前のスナップショットを退避させてから、1トランザクションで入れ替える段取りにしてもらった。",[10,43,44],{},"結果、DBのチャンクは234のページ単位から109の節単位になった。",[10,46,47],{},"図は218枚すべてを残した。",[10,49,50],{},"コンタクトシートを作り、サブエージェント5体に装飾図かどうかを判定させた。",[10,52,53],{},"そのうえで、判定の割れた全10枚を1枚ずつ突き合わせさせた。",[10,55,56],{},"装飾と判定されて落ちかけた2枚は、本文がそのまま名指ししている図だった。",[10,58,59],{},"迷ったら残す、でいい。",[10,61,62],{},"クリーンアップでは、OCRが見出しと誤検出した49行を平文に戻し、段落の途中に紛れ込んだ柱を落とした。",[10,64,65],{},"行末の改行は105チャンクで3,305箇所を結合した。",[10,67,68],{},"母艦側の取り込みで改行が生のまま入り、日本語の文の途中に空白が開いて描かれていたためである。",[10,70,71],{},"最後に全文検索のインデックスを作り直し、ブラウザで実物の描画まで確かめて終わった。",[23,73,75],{"id":74},"蔵書一覧に出てこないと思った","蔵書一覧に出てこない、と思った",[10,77,78],{},"作業の途中で手が止まった。",[10,80,81],{},"左の蔵書一覧をいくら見ても、この本が出てこない。",[10,83,84],{},"取り込みは済んでいるはずなのに、なぜ画面に出ないのか。",[10,86,87],{},"聞いてみたら、出ていた。",[10,89,90],{},"399冊中118番目に。",[10,92,93],{},"一覧は登録日の新しい順に並ぶ。",[10,95,96],{},"そしてこの本の登録日は、初回の取り込み時のままだった。",[10,98,99],{},"前の日に母艦側から再取り込みしたとき、同じ書籍行の中身を丸ごと置き換えたので、登録日だけが古いまま残っていたわけだ。",[10,101,102],{},"「出ていない」ではなく「ずっと下にある」。",[10,104,105],{},"自分の目が、一覧の上のほうしか見ていなかった。",[23,107,109],{"id":108},"_3ヶ月前に入れた別経路の版","3ヶ月前に入れた別経路の版",[10,111,112],{},"登録日が6月だと聞いて引っかかった。",[10,114,115],{},"昔この本を登録していたのか。",[10,117,118],{},"していた。",[10,120,121],{},"3ヶ月ほど前に、電子書籍リーダーの見開きスクリーンショット118画面から同じ本を取り込み、41チャンクに整形した版がある。",[10,123,124],{},"今回は1ページずつ撮り直したので画面が235枚あり、節に割ると109になる。",[10,126,127],{},"どちらの精度が高いのか気になって、同じ箇所を並べて見比べてもらった。",[10,129,130],{},"本文の文字はほぼ同じで、精度は同等だった。",[10,132,133],{},"違うのはページの粒度で、新しい版のほうが節が細かく割れるぶん、検索と参照に強い。",[10,135,136],{},"旧版のチャンクはバックアップに退避してある。",[23,138,140],{"id":139},"並び順を直すかこの本の登録日を直すか","並び順を直すか、この本の登録日を直すか",[10,142,143],{},"選択肢は2つ出てきた。",[10,145,146],{},"一覧の並びを更新日順に変えるか、この本だけ登録日を9月に書き換えるか。",[10,148,149],{},"前者を選んだ。",[10,151,152],{},"この1冊の辻褄を合わせても、次に別の本を再取り込みしたときに同じところで迷う。",[10,154,155],{},"更新日順なら、最近いじった本が自然に上へ来る。",[157,158,163],"pre",{"className":159,"code":160,"language":161,"meta":162,"style":162},"language-sql shiki shiki-themes vitesse-light vitesse-light","ORDER BY COALESCE(updated_at, created_at) DESC\n","sql","",[164,165,166],"code",{"__ignoreMap":162},[167,168,171,175,179,183],"span",{"class":169,"line":170},"line",1,[167,172,174],{"class":173},"sHkkW","ORDER BY",[167,176,178],{"class":177},"sz8Xr"," COALESCE",[167,180,182],{"class":181},"sG7-3","(updated_at, created_at) ",[167,184,185],{"class":173},"DESC\n",[10,187,188],{},"一覧の並びをこの形に変えて、この本が先頭に出ることを画面で確かめた。",[23,190,191],{"id":191},"隠れていた図92枚",[10,193,194],{},"もうひとつ、表示側に地雷があった。",[10,196,197],{},"ビューアは面積9万px²以下の画像をアイコンとみなして非表示にしていた。",[10,199,200],{},"この本の情報図218枚のうち92枚が、その閾値の下にいた。",[10,202,203],{},"天秤や数直線、小さな作図が並ぶ。",[10,205,206],{},"どれも本文の説明と対になっていて、消えると話の筋が追えなくなる。",[10,208,209],{},"クリーンアップ済みの本では非表示を切り、幅の狭い図は原寸より引き伸ばさずに描くよう変えてもらった。",[10,211,212],{},"ブラウザを再読み込みして、それまで空白だった位置に小さな図が出ていることを確かめた。",[23,214,215],{"id":215},"学び",[217,218,219,223,226],"ul",{},[220,221,222],"li",{},"「出ていない」と思ったら、まず並び順と件数を疑う。データの不在より、表示の条件のほうがよく壊れる",[220,224,225],{},"同じ行を使い回す再取り込みは登録日を更新しない。一覧の並びに登録日を使っている限り、手を入れた本ほど下に沈む",[220,227,228],{},"アイコン除けの閾値は、小さな図が主役の本ではそのまま本文の欠落になる。閾値はページ側ではなく本の性質で切り替える",[230,231,232],"style",{},"html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sG7-3, html code.shiki .sG7-3{--shiki-default:#393A34;--shiki-dark:#393A34}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":162,"searchDepth":234,"depth":234,"links":235},2,[236,237,238,239,240,241,242],{"id":25,"depth":234,"text":25},{"id":34,"depth":234,"text":35},{"id":74,"depth":234,"text":75},{"id":108,"depth":234,"text":109},{"id":139,"depth":234,"text":140},{"id":191,"depth":234,"text":191},{"id":215,"depth":234,"text":215},"dev",null,"途中で止まっていた自炊書籍の取り込みを再開し、DBのチャンクをページ単位から節単位へ組み直した記録。蔵書一覧に出てこないと思った原因は、並び順と登録日の仕様だった。","md",{},true,"/book-chunking-by-section","book-knowledge-base",false,"2026-09-13T00:00:00.000Z",{"title":5,"description":245},"make-diary","2026-09/2026-09-13/book-chunking-by-section",[257,258,259,260,261],"自炊","OCR","全文検索","蔵書データベース","Claude Code","33OUmjyXf6a9bQHcufmZpBnoBr5UnoKQ_t6Lcw52mNE",[],[265,269,273,277,281],{"title":266,"path":267,"publishedAt":268},"自炊した本のOCR取り込みで手順が1つ抜けていた。3コマンドの連鎖に直して、スキャンPDFも一括リネームした","/book-ocr-import-chain-and-pdf-rename","2026-08-01T00:00:00.000Z",{"title":270,"path":271,"publishedAt":272},"2026年8月6日の開発日記 - 「取り込み済み」が使えるとは限らなかった","/2026-08-06-diary","2026-08-06T00:00:00.000Z",{"title":274,"path":275,"publishedAt":276},"裁断した実務書をOCRしてTursoのDBに横串検索できる本棚を毎日10冊単位で増やす","/book-knowledge-base-import-batch-workflow","2026-06-16T00:00:00.000Z",{"title":278,"path":279,"publishedAt":280},"2026年9月15日の開発日記 - 「終わっているはず」を確かめて回った日","/2026-09-15-diary","2026-09-15T00:00:00.000Z",{"title":282,"path":283,"publishedAt":280},"表の画像をCSVに起こすOCRを、Claude CodeとGemini 3.1 Pro（agy）で突き合わせた記録","/image-table-ocr-two-model-crosscheck","https://log.eurekapu.com/og/blog/book-chunking-by-section.png?v=2026-09-13T00%3A00%3A00.000Z&title=%E8%87%AA%E7%82%8A%E3%81%97%E3%81%9F%E5%85%A5%E9%96%80%E6%9B%B8%E3%82%92%E7%AF%80%E5%8D%98%E4%BD%8D%E3%81%AB%E7%B5%84%E3%81%BF%E7%9B%B4%E3%81%99%EF%BC%88234%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E3%82%92109%E3%81%AB%EF%BC%89&author=Kei%20Komatsu&sig=46ac6ce0ddfe5867",1789529464533]