主题
tools/ — 数据与评测工具链
这里放的是离线产出与评测用的东西,都不参与 app 运行时。四个子目录, 两条互不相干的线:预装词库产线(三个)和短语质量评测(一个)。
与
scripts/的分工:scripts/是仓库工程脚本(守门、发版、备份、CI 用), 随每次提交/发版跑;tools/是低频的数据产线与评测,只在做词库或调短语质量时跑。
谁产谁、谁喂谁
tools/agid-2016.01.19/ ─┐
infl.txt(词形变化) │
├─→ cargo run --example build_dict
tools/wordnet/ ─┘ (在 src-tauri/,非本目录)
irregular_forms.json │
↓
src-tauri/assets/nlp/*.json
(lemmatizer Layer 1/2 中间产物)
│
↓
tools/vocabulary_builder_v3/ ──────→ src-tauri/assets/lampio_dict.db
Dart pipeline(Oxford 5000 骨架 (预装词库,唯一产出)
+ Kaikki 主数据源 + LLM 增强层) │
↓
scripts/check-vocab-asset.sh
(提交前闸门:体积 + 卫生断言)
↓
rvh/assets/databases/lampio_dict.db
(symlink → 上面那个文件,红线 #10:只有一份)🔒 红线 #10:lampio_dict.db 双端只有一份物理文件(RVH 侧是 symlink)。唯一产源 = 本目录的 vocabulary_builder_v3(2026-07-19 从 RVH 迁入,RVH 已降级为纯消费方)。 禁止对该 db 就地 ALTER/UPDATE——运行时只 ATTACH 只读读取。 维护流程走 /vocab-reseed skill。
四个子目录
| 目录 | 是什么 | 什么时候碰 |
|---|---|---|
vocabulary_builder_v3/ | 预装词库 pipeline(Dart)。Step 1-6 + 一堆 opt-in 的 LLM 增强步 | 做词库时。详见其 README |
agid-2016.01.19/ | AGID 词形变化数据(infl.txt,Kevin Atkinson,公共领域+WordNet license) | 基本不碰。不要手工编辑 |
wordnet/ | 5,637 条人工策展的不规则形映射(went→go) | 基本不碰。build_dict 输入资产,运行时不 include |
phrase_eval/ | 短语识别质量评测:gold.jsonl 标注集 + run.py 批量打分器 | 改短语 prompt / 分档 / matcher 前后。走 /phrase-eval skill |
phrase_eval 速用
bash
python3 tools/phrase_eval/run.py对线上 judge-phrases-batch Edge Function 跑整个 gold-set,按 cat 拆失败分布。 改 prompt 前后各跑一次,分数不退才部署——这是防回归的棘轮。 评测结论落账到 docs/plans/phrase-eval-log.md(持续追加型 ledger,不归档)。
anon key 默认从 src-tauri/assets/sql/init_data.sql 取(public by design); 代理默认 127.0.0.1:7897,用 PROXY=none 关。
顶层那个 .txt 是什么
build_dict.report.txt 是 src-tauri/examples/build_dict.rs 的审计报告产物—— AGID 与 WordNet 合并时的冲突项、按 POS 优先级被丢弃的候选、各修正层逐条改了什么, 都记在里面(Summary 段只有行数/条目数,没有输入 SHA256)。 输出路径写死在该文件的 REPORT_OUT_REL(src-tauri/examples/build_dict.rs:19), 移动它需要同步改代码,不要顺手挪。
🔒 它是输入的确定性函数:同样的 AGID + WordNet 输入,重跑任意多次字节相同。 这不是白来的——wordnet_overrides 由 HashMap 迭代产生,2026-08-25 前每次重跑取到的 条目顺序都不同,一次无关重跑就能在这个 tracked 文件里造出 ~370 行纯乱序 diff, 把真实改动埋掉(v27 那轮实测 188+/184−,真实改动只有 4 行)。现在靠三件事守住: 写盘前 sort()、策展层清单全量打印(不截断 = 顺序变动不会改变展示窗口)、 以及 WordNet 输入的大小写碰撞断言。改这个生成器时别把这三样优化掉。 验收方式:连跑两次 cargo run --example build_dict --release,两次产物应字节相同。
它是本目录唯一的生成物;别再往这一层加新产物(新的落 logs/ 或对应子目录)。