この日やったこと
CF参考書が引用している会計基準の条文を構造化し、3層レビューHTMLビューアを組み上げた。書籍解説(Layer 1)・基準条文(Layer 2)・平易解説(Layer 3)の3層を並べて読める画面を目指した。朝の段階では「PDFから条文を抜けばいいだろう」と思っていたが、421ページのPDFは直接読めず、100万トークン超のHTMLも丸ごとは飲み込めず、結局TursoのDBチャンクを起点にパイプラインを積み上げていく一日になった。
Phase A: standards.json に41基準を登録
書籍の凡例ページに「本書で参照する会計基準一覧」がある。ここから41件の基準名・略称・正式名称を拾い、standards.jsonに登録した。この一覧が後続フェーズの基準マッチングで辞書として機能する。
Phase B: 実務指針HTMLのパース
実務指針のHTMLを条文単位に分割するパーサを書いた。目次(TOC)の見出しテキストをキーにして、本文中の対応セクションを切り出すマッピング方式を採った。40条文を抽出できた。
項46-48が見つからない
パーサが項46・47・48を拾えなかった。原因を追うと、消費税の例示テーブルが数百行に及んでいて、パーサの検索範囲200行を超過していた。検索範囲を広げて解決。
Phase C: 書籍チャンクから引用抽出
Turso DBに格納済みの書籍OCRチャンクを走査し、会計基準への引用を正規表現で拾った。258件が引っかかり、うち86件がresolved(基準条文と紐付き済み)、172件がunresolved。77のQ番号に紐づいた。
Q番号伝播で抜け漏れを埋める
OCRチャンクの分割境界がQ番号の記載位置とずれていて、Q番号を持たないチャンクが発生していた。直前のQ番号を後続チャンクに伝播させるロジックを追加し、さらに括弧内パターン(例:「(実務指針第10項参照)」)の正規表現を加えて、258→264件に引用数が伸びた。
Q3-4のLayer 2が0件になる問題
Q3-4だけ引用条文が0件で表示された。OCRのチャプター分割で「解説」部分が別チャンクに切り出されており、Q番号とリンクが切れていた。Q番号伝播で解決。
Phase E: 82Q全ての解説を構造化
書籍の82Q分の解説テキストをLayer 3(平易解説)として構造化した。OCRチャンクから設例・仕訳テーブルを除去し、解説本文のみを抽出する処理を組んだ。
Phase G: カバレッジ算出
実務指針40条文のうち、書籍が引用している条文は31件。カバレッジ77.5%。9条文は書籍の範囲外と判断した。
Phase H: HTMLビューア生成
3種類のHTMLページを生成した。
- ダッシュボード: 全体の統計(基準数・条文数・引用数・解決率)を表示
- 条文閲覧ページ: 基準ごとに条文を一覧表示。引用の有無で色分け
- 3層レビューページ: Q番号を選ぶとLayer 1(書籍解説)・Layer 2(基準条文)・Layer 3(平易解説)が横に並ぶ
Phase F: サブエージェント並行で追加基準を取得
解決率36%を引き上げるため、5つのサブエージェントを並行起動して追加の基準条文を取得した。
| サブエージェント | 取得対象 |
|---|---|
| 1 | 連結会計基準 |
| 2 | 自己株式会計基準 |
| 3 | 金融商品実務指針 |
| 4 | リース適用指針 |
| 5 | 持分法実務指針 |
5つが返ってきた結果、解決率が36%→52.3%に跳ね上がった。WebFetchで条文テキストを取りに行ったが、要約されて返ってくる問題に当たり、構造を把握したうえで手動でprovisions登録に切り替えた場面もあった。
Phase J: 表示順設計とレジストリ紐付け
Q番号の表示順を設定し、cfws_registryテーブルとの紐付けを行った。Q5-22とQ5-23が欠落していたので補完し、最終的に84Q全てに表示順が入った。
Layer 1キュレーション: Q3-1〜Q3-12
Q3-1からQ3-12までの12Q分について、OCRチャンクの中身を手作業で確認した。設例データや仕訳テーブルが解説テキストに混入していたため、解説部分だけを切り出すキュレーション作業を行った。OCRの分割精度に依存する部分は、最終的に人の目で判断するしかなかった。
試行錯誤まとめ
| 壁 | 原因 | 解決策 |
|---|---|---|
| PDF 421ページが読めない | トークン上限超過 | TursoのDBチャンクを起点にする |
| HTML 100万トークン超 | 同上 | TOCベースのセクション分割パーサ |
| 項46-48が見つからない | 消費税テーブルが長大でパーサの検索範囲超過 | 検索範囲を拡大 |
| WebFetchが条文を要約する | フェッチ時の自動要約 | 構造を把握して手動登録 |
| Q3-4のLayer 2が0件 | OCRチャプター分割でQ番号と解説が分離 | Q番号伝播ロジック |
振り返り
PDFを直接読もうとして弾かれた瞬間に「Tursoに入ってるチャンクを使えばいい」と方針を切り替えられたのが、一日の生産性を決めた。421ページのPDFと格闘する代わりに、すでにDBに入っている数百チャンクを正規表現で走査するパイプラインを組めた。
サブエージェント5並行は初めて試したが、待ち時間がほぼゼロで5基準分の条文が揃った。単体で順番に取得していたら1時間以上かかっていた作業が、数分で片づいた。
残りのunresolved引用(約48%)は、基準原文のHTML取得が必要になる。次のフェーズで対応する。