Codex引き継ぎ: 匿名化パイプラインの仕上げ

前提: decisions/0010 を先に読む。 判定表は確定済み(Codex=学習利用オフ確認済みのため私的資料を扱ってよい。 ただし匿名化が先・LLMは後、原本の外部持ち出し禁止、出力は必ず役割語)。

済んでいること(Fable 5、2026-07-10)

  • scripts/anonymize.py — 二モード(pension=実名→役割語のみ/ research=役割語+地名・機関名粗視化+日付→月+用語標準化)。 テスト済み。辞書は ~/knowledge/personal/匿名化辞書.json(Git外)、 雛形 匿名化辞書.example.json が同じ場所にある。
  • 対象資料: ~/knowledge/personal/障害年金受給/(R2は専用バケット personal-archive・専用トークン[r2personal]へミラー。2026-07-13、 paper-civic-kitバケットから認証分離済み。所有者のみ読み取り可)。

Codexのタスク(順に)

  1. 辞書の実データ化: ~/knowledge/personal/ 配下のtxtを読み、実名・地名・ 機関名を洗い出して 匿名化辞書.json を作る。役割語は既存慣行 (父・母・元交際相手A・支援機関職員 等)に合わせる。辞書はGit管理外に 置き、コミットしない。 完成したら置換レポートを添えて本人承認へ。
    • 2026-07-10 Codex: ~/knowledge/personal/匿名化辞書.json を作成し、 障害年金受給/anonymize-report-research.txt障害年金受給/anonymize-report-pension-xlsx.txt を生成。承認前のため、 匿名版は後段パイプラインへ未投入。
  2. xlsx対応: 年金様式(02/04/byoreki_1.1)はxlsx。openpyxlでセル単位に 同じ辞書置換を通す --xlsx 対応を anonymize.py に追加(文字列セルのみ、 数式・書式は保持)。
    • 2026-07-10 Codex: scripts/anonymize.py --xlsx を追加し、対象xlsxの pensionモード匿名化出力を生成。単体テストで文字列セル置換・数式保持・ 書式保持を確認。
  3. terms辞書の充実(researchモード用): 俗称→ICD-11分類名・コード併記、 俗な法律表現→法令用語(国民年金法・施行令別表の言い回し)への正規化。 テンプレート research/hypothesis_hypergraph のICD-11ルールと整合させる。
  4. DSM-5-TR複写PDFのOCR: 図書館複写の合法的PDF(本人提供)。 ~/oss/ndlocr-venvndlocr-lite --sourcedir <dir> --output <事前作成dir> (約7秒/頁・CPU)でテキスト化。複写PDF原本はR2 copies/(公開不可資料の専用プレフィックス、作成済み)、OCRテキスト・抽出結果はsources/<citekey>/へ→研究モード匿名化は 不要(公刊物)だが全文を公開物・リポジトリに置かない(複写物のため。 私的kb投入・抽出・グラフ化はOK)。抽出は reextract-v2.py のパターン (gpt-5.5+bge-m3+research/hypothesis_hypergraph)を流用。

プロキシ(2026-07-12追加)

datacenter IPで弾かれる収集先には、.envのWEBSHARE_PROXY_URL(設定されて いる場合のみ)をそのリクエストに限って使ってよい。全体には使わない。 レート制限・行儀は通常どおり。exit node・家庭回線経由は使わない。 実測注意: ローテーション利用時はusernameに-rotateサフィックス必須 (素のusernameだと407)。疎通確認済み(2026-07-12、100プロキシプール)。

禁止事項(再掲)

  • 原本(匿名化前)をLLM APIの入力以外の場所へ送らない・コミットしない。
  • 承認前の匿名版をパイプラインに流さない。
  • PR・公開物に個人情報・複写物全文を含めない。

追加タスク(2026-07-10追記。いずれも特殊コマンド不要・LLM不使用)

  1. オープン辞書の整備: ~/knowledge/dictionaries/ に取得済み: JMdict_e.gz(日英辞書、EDRDG)、wnjpn.db.gz(日本語WordNet 1.1、 英語WordNet同梱のSQLite)。残り: 日本法令外国語訳DBの標準対訳辞書 (https://www.japaneselawtranslation.go.jp/ja/dicts/download 、フォーム経由。 法律用語の日英対訳CSV)を取得して同じ場所へ。取得後、全部をR2 dictionaries/ プレフィックスにもバックアップ。 用途の訂正(2026-07-14): この辞書は単語・フレーズ対訳集であり FT材料ではない。文脈の無い断片でFTすると丸暗記・流暢さ崩れの リスクがある(translation-ft/docs-quality-notes.md 2.参照)。 正しい用途は推論後の訳文チェック・用語注入——特に しなければならない/するものとする/することができるの訳語が 標準(shall/shall or is to/may 等)と一致するかの機械照合に使う。 FTに使うべきは⑦のJLT法令全文対訳(文脈込み)の方。
  2. LLMフリー分析ライブラリ scripts/pcklib.py(PEP 723): Jupyter/ R Markdown(reticulate)から呼ぶ関数群。論証構造の解釈 (仮説・支持/反証・理念/実証)には踏み込まない(0008追記の境界)。
    • word_graph(texts, window) 共起語グラフ→nodes/edges dict(形態素は SudachiPy、辞書はcore。導入不可ならn-gramフォールバック)
    • kwic(term, texts, width) 用例検索(KWIC形式)
    • law_search(q) / law_text(law_num) e-Gov法令API直叩き (hourei-mcp-serverと同じ公式API。Pythonから同期呼び出し)
    • bib(citekeys) Zotero Web API→参考文献リスト文字列(ワンタッチ引用。 .envのZOTERO_を使用、research-mcp-server.py(旧oa-mcp-server.py)の zoteroを流用可)
    • wn_lookup(word) wnjpn.dbから類義語・上位語(辞書タスク5と連動) pytestをscripts/test_scripts.pyの流儀で追加しmake checkへ。
    • 2026-07-11 Codex: scripts/pcklib.py を追加。SudachiPy coreが使える場合は 形態素、不可の場合はn-gramで word_graph を構築し、KWIC、e-Gov法令API、 Zotero Web API、wnjpn.db参照を実装。scripts/test_scripts.pyにHTTP差し替え・ SQLite最小DBでのpytestを追加。サンドボックス内ではPyPI名前解決不可のため make check は依存取得で停止し、標準ライブラリ範囲の構文検査と直接確認を実施。
  3. 対訳ペア収集スクリプト scripts/collect-parallel.py(PEP 723、LLM不使用): 出力は 専用バケット r2ft:translation-ft/parallel/<source>.jsonl (認証分離のためpaper-civic-kitバケットに置かない。rclone remote [r2ft]は ユーザーがトークン発行後に設定) (1行= {"en":…, "ja":…, "domain":…, "source":…})。 専用repo https://github.com/hkawaguc/translation-ft (private)の notebooks/translation-ft.ipynb がこの形式を読む。FT関連の実装はそちらに置く。源泉と優先順:
    • ①日本法令外国語訳DB(法令の全文日英対訳本文、domain=law。 単語対訳集=タスク5とは別物・こちらが法令ドメインFTの本命材料)
    • ②CiNii/J-STAGE 日英アブストラクト対(domain=academic。情報処理学会・ JSAI・電子情報通信学会分は domain=it として別タグ)
    • ③ICD-11日英公式訳(domain=med)
    • ④OPUSコーパスのUbuntu/GNOME/KDE/PHP(domain=linux。既成DLのみ、即使用可)
    • ⑤特許対訳(domain=patent): NTCIR/ALAGIN/JParaCrawlは不採用 (研究限定の契約が再配布・OSS公開と両立しない。2026-07-11ユーザー判断)。 代替: J-PlatPat/Google Patentsの公開公報から日英対応公報ペアをマイニング (公開文書+著作権法30条の4のTDM例外で契約なしに学習利用可)。
    • ⑥汎用の底上げ: JParaCrawl v3(NTT、HF/公式サイト)を私用トラック限定で投入license: "NTT-research-only"タグ必須。OSSトラックのフィルタで除外される。 2026-07-11ユーザー承認。22M対・数GBなのでダウンロードは~/knowledge側、 ディスク139GB空き確認済み)。オープン側の汎用はWikiMatrix(CC-BY-SA)・ OPUS各コーパス。ParaCrawl公式にEN-JAは存在しない(Codex調査で確定。 以前のhandoffの記載は誤り)。
    • ⑦医学対訳(domain=med): MHLW「疾病、傷害及び死因の統計分類」xlsx (基本分類表727KB・全索引用語8.6MB、ICD-11コード+日本語名)と WHO英語版静的zipをICDコードで突合して日英対を生成する。 https://www.mhlw.go.jp/stf/toukei/goriyou/sippei.html 参照。 API認証不要・コード結合なので品質はスクレイピングより高い。 WHO ICD API(無料登録制)は定義文が欲しくなった場合のオプション。
    • ライセンス2トラック制: 私用モデル=制約なし/OSS公開モデル=CC0・ Apache-2.0系データのみ+ベースもApache系(MADLAD-400/mT5/Qwen。 NLLB=CC-BY-NC・plamo=コミュニティライセンスは公開トラック不可)。 JSONLに "license": フィールドを追加してトラック別フィルタを可能にする。
    • FT対象モデル(2026-07-14訂正): 法令ドメインFTはNLLBで行う (translation-ft/notebooks/translation-ft*.ipynb に既存レシピあり、 GPU/TPU両対応)。plamoはFTしない——FTレシピ未検証・9.5Bで コスト高、当面は無訓練の強い推論エンジンとして温存する (decisions/0011参照)。
    • 重複除去(en+jaハッシュ)と長さフィルタ(極端な長短・非対訳らしき対の除去)必須。
    • TexTra APIは学習データ源にしない(コーパス一括出力口がない)。FT後の 品質比較ベースラインとして評価セルで使う(非商用・要登録、キーは.env)。
  4. 狙い撃ち法令コーパス収集 scripts/collect-laws.py(PEP 723、LLM不使用。 decisions/0011のencoderドメイン適応+翻訳FT法令対訳の共通基盤):
    • e-Gov法令API(pcklib.law_search/law_text と同一の公式API)から、 中核法令を優先収集: 刑法・医療観察法・精神保健福祉法・国民年金法・ 障害者総合支援法・憲法・民法(関連条)等。法令番号リストは設定で持つ。
    • 出力: R2 law-corpus/<law_id>.txt(法令本文プレーン)。著作権フリー (著作権法13条)なので匿名化不要・公開制約なし。
    • translate-batch.py型のチェックポイント(取得済みlaw_idを記録し再開可能)、 APIレート配慮のpacing、既存law_textの整形を流用。
    • 全件は取らない。中核リスト→効果確認→拡張(0011「量より関連性」)。