置換辞書で4,056箇所を自動修正する。ただし辞書の向きが逆だと永遠に壊れ続ける
124行のCSVで機械的に直す仕組みと、その辞書自体を全件検算するスクリプトを書いた理由。
■ この記事はこんな人におすすめ
- 同じ誤変換が何百回も出てきて、手で直すのを諦めかけている人
- 一括置換をやりたいが、正しい語まで壊しそうで怖い人
- 置換ルールを作ったあと、それが正しく効いているか確かめる術がない人
■ この記事で得られること
- 無条件に置換してよい語と、絶対にしてはいけない語を分ける基準
- 置換ルールを手で育てずに、人の修正履歴から自動で拾う方法
- ルールの向きが逆になっていないかを全件で検算するやり方
1. 結論
登録の条件を「誤形がコーパスに1件も出てこないこと」に固定すると、無条件で置換できます。 この1点だけで、一括置換の怖さはほぼ消えました。
いまは124行の辞書で4,056箇所を直しています。
2. 具体的にやること
# data/known_fixes.csv
誤形,正形,根拠
ゼア公文,there構文,テロップで確認 (2026-08-04)
乱学,Langaku,概要欄の提供表記
フォレスト,Forest,概要欄「総合英語Forest」
クロードコード,Claude Code,英字が正
登録する前に、その誤形がコーパスに残っていないかを引きます。
$ python3 -c "
import sqlite3; c=sqlite3.connect('data/yuru.db')
q=lambda w: c.execute(
\"SELECT COUNT(*) FROM segments WHERE COALESCE(text_corrected,text) LIKE ?\",
(f'%{w}%',)).fetchone()[0]
for w in ['ゼア公文','バン','マキタ']:
print(w, q(w))
"
ゼア公文 0 # 誤形が残っていない。登録できる
バン 214 # 「バン」は普通に使われる。BAN への一括置換はできない
マキタ 0 # 登録できる(人名。正しくは槙田)
3. 各項目の説明
■ なぜ「誤形が0件」が条件になるのか
誤形がコーパスに1件も出てこないなら、置換して壊れる正しい語が存在しないということです。 逆に「バン」のように普通に使われる語は、どれだけ「BAN」に直したくても辞書には入れられません。 入れた瞬間、正しく喋られている「バン」まで全部壊れます。
■ 辞書は手で育てない
項目は、管理画面で直した履歴から機械的に拾っています。 指摘されてから足すのではなく、直した事実のほうから拾いたかったからです。
$ python3 scripts/mine_user_fixes.py
■ 辞書に登録できる候補 (誤形がコーパスに0件)
マキタ → 槙田 人名。カタカナ→漢字
クロードコード → Claude Code カタカナ英語→英字
オーパス → Opus
■ 登録できないもの (誤形が正当出現する)
バン → BAN ※「バン」は普通に使われる語
■ 傾向
- カタカナ英語は英字表記に直される (フォレスト→Forest / オーパス→Opus)
- 人名のカタカナは漢字に直される (マキタ→槙田)
思ったより効いたのは、いちばん下の「傾向」でした。 英単語がカタカナで出ていたら英字を疑う、人名がカタカナなら漢字を疑う、 という当たりを先に付けられるようになっています。
■ 出てきた候補を全部は入れない
この抽出は、文ごと書き換えた箇所からも機械的にペアを作ってしまいます。 実際、直近の9件のうち語の対応になっていたのは1件だけでした。
祖収る → ソシュール ← 語の対応。登録した
そしゅうるの → ソシュール ← 助詞が付いている。入れない
であえずマキタ → There's Makita ← 文ごと直した跡。入れない
カズトヨ → かずとよ) ← 括弧が混ざっている。入れない
提案を全部そのまま入れる作りにしなかったのは、ここが理由です。
ハマったところ: 向きが逆だと、気づかずに壊れ続ける
辞書は取り込みのたびに無条件で発火します。 1行間違えれば、正しい語が毎回壊れます。 しかも差分を見ても気づけません。どちらも「ありそうな日本語」だからです。
それで、辞書だけを検算するスクリプトを足しました。
$ python3 scripts/audit_known_fixes.py
辞書 124 件を検算した
① 誤形がコーパスに残っていないか → 残っていれば置換が効いていない
② 正形が1件以上あるか → 0件なら向きが逆の疑い
✅ 全件が条件を満たす (誤形0件 / 正形1件以上)
一度作って終わりのデータに見えますが、実際は毎回動く仕掛けです。 そこに逆向きの検算を付けておくのが、いちばん効きました。
← Whisperは日本語のとき、聞いていない話者名を書… LLMに校正させるとき、精度より効いたのは「作文の禁… → 目次へ