japanese/tests/data/rules.md
panli ef3df73166 refactor: 三层架构重构 + 配置文件 + 项目目录整理
清洗管线重构为严格三层架构:
- tango_analyser.py(底层:单词分析)
- task_processor.py(中层:文件 I/O、桶管理)
- workflow.py(顶层:状态机、任务推进)
- 移除旧的 batch_processor.py

新增配置文件系统:
- config.py:TOML 配置,相对路径相对配置文件目录解析
- 查找优先级 --config > cwd > 项目根 > ~ > 默认值
- count=None 语义为处理到文件末尾

项目目录整理:
- 根脚本归档到 scripts/analysis 与 scripts/legacy
- 文档归档到 docs/{design,history,analysis}
- 临时报告移到 reports/(已 gitignore)

文档质量:
- 新增 .markdownlint.json 与 scripts/mdlint.cmd
- 修复全部 14 个 md 文件的 markdownlint 警告

测试:74 passed(8 cleaner + 31 workflow + 6 tango + 15 validator + 14 config)
2026-08-19 19:40:02 +08:00

119 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 日语词表处理规则(铁律)
本文件记录 xinbiaori_tobe.txt → xinbiaori.txt 的所有处理约定,流水线和人工都遵循。
## 数据格式
每行三段,用 `:` 分隔,段内用 `|` 对齐:
```text
汉字|分段:假名|分段:拼音|分段
```
示例:`中|国|人:ちゅう|ごく|じん:zhong|guo|ren`
- 汉字段:每个汉字单独一段;连续假名(送り仮名/前后缀)合并为一段
- 假名段:与汉字段一一对应
- 拼音段:汉字对应拼音,假名段留空
## 处理规则
### 1. 词中没有汉字的 → 跳过不处理
汉字段不含任何汉字(纯英文、纯符号、纯片假名外来语等),直接跳过,放入单批忽略文件 `skip.txt`
- 例:`IT:アイティー:``WTO:...``Japan Railways:...``:パーセント:`
- 判断标准:汉字段用正则 `[\u4e00-\u9fff]` 匹配不到任何字符
### 2. 含字母+汉字的混合词 → 正常处理
字母作为独立段,拼音填小写字母本身。
- 例:`阿|Q|正|伝:あ|キュー|せい|でん:a|q|zheng|zhuan`
- 例:`|自|動|車:ジェーシー|じ|どう|しゃ:jc|zi|dong|che`
### 3. `~` 标记 → 作为任意长通配符对齐,~ 对应部分不输出
`~`(全角 或半角 ~)表示"省略的、无对应汉字的假名部分"。处理时把 `~` 当作
任意长通配符,与汉字 token 一起对齐,`~` 吸收到的假名段和纯标点段都从输出中删除,
只保留汉字段和与汉字紧邻的送り仮名。
- する 动词:`発明~:はつめいします:``発|明:はつ|めい:fa|ming`~ 吸收「します」)
- 名词省略前半:`~賞:ノーベルしょう:``賞:しょう:shang`~ 吸收「ノーベル」)
- 名词省略后半:`飲料~:いんりょうメーカー:``飲|料:いん|りょう:yin|liao`
- 送り仮名保留:`干し~:ほしブドウ:``干|し:ほ|し:gan|`(し 保留,~ 吸收「ブドウ」)
- 对齐成功 → auto无多音字或 review_pinyin含多音字
- 对齐失败/多解无法定夺 → review_split人工确认
### 4. ます形动词 → 转辞書形(原型)
- 五段:ます前 i段音 → u段音かり→かる、き→く、し→す
- 一段:ます → る(げます→げる)
- 用 jamdict 词典验证动词身份
- **词典唯一解** → 直接处理
- **词典歧义**(如 にます→にる/ぬ)→ 放入 review_verb人工查证
- 例:`預かります:あずかります:``預|かる:あず|かる:yu|`
### 5. 完整表达/惯用句 → 保留原样(不砍词尾)
带 お/に/ください 等构成完整寒暄的整句,保留 します/でした。
- 例:`お先に失礼します``お|先|に|失|礼|します:お|さき|に|しつ|れい|します:|xian||shi|li|`
### 6. 々(同字重复符号)→ 展开为前一个字
- 例:`我々:われわれ:``我|我:われ|われ:wo|wo`
- 例:`佐々木:ささき:``佐|佐|木:さ|さ|き:zuo|zuo|mu`
### 7. 熟字训/特殊读音 → 词典无法分割的放 review_split 人工处理
- 例:田舎(いなか)、明日(あす)、お父さん(おとうさん)
## 拼音规则
- 多音字:只标记高频多音字黑名单(行/长/重/传等),其他直接用最常见读音
- 日本新字体按对应的中文字标拼音楽→le、伝→chuan、価→jia
## 条数校验(铁律)
**输入条数 = 各输出文件条数之和**。条数不对,结果一定不对,必须排查。
去掉纯英文等跳过项后,剩余条数也要能对上。
## 工作流(任务化架构)
每次清洗是一个**任务**Task有独立配置、独立临时文件、状态机。
详见 `WORKFLOW.md`。核心流程:
1. **创建任务**:指定数据源 + 处理范围,任务独立目录 `tasks/{id}/`
`jclean create <id> --source data.txt --start 1 --count 300`
2. **处理一批**数据源只读分流到单批文件auto_done/skip/review_*
`jclean process <id>`
3. **逐个 review**:你指出问题 → AI 只记录 → 单文件说完后 AI 汇总
4. **改代码重跑**AI 改字典/规则(不手改输出文件),重跑单个 review 桶
`jclean reprocess <id> --bucket pinyin`
5. **核对总数**review 全清零后auto_done + skip == 原始输入有效条数
6. **你说合并**AI 才合并auto_done→vocabulary、skip→skipped去重
`jclean merge <id>`
> 命令行等价写法:`jclean` = `python -m pl_japanese.cleaner.cli` = `python scripts/clean.py`。
> 流程需人工介入,推荐用 `tests/test_cleaner_workflow.py` 测试驱动协作。
### 两层文件结构
- **单批(临时,任务独立)**auto_done / skip / review_{pinyin,split,verb,special}
- **最终权威(累积,只增去重)**xinbiaori.txt / skipped_total.txt
### 铁律
- 数据源只读,绝不修改原文件
- review 是中间态,确认完必须清零
- 改代码而非手改输出文件
- 合并需人工授权,最终库只增不删
- 所有路径都是任务配置项,可覆盖
## 编码注意
- 所有文件用 UTF-8 无 BOM换行 \n
- 写文件时禁止引入 BOMEF BB BF
- 控制台是 GBK脚本输出避免使用非 ASCII 符号(如 ✅⚠️)