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

5.2 KiB
Raw Permalink Blame History

日语词表处理规则(铁律)

本文件记录 xinbiaori_tobe.txt → xinbiaori.txt 的所有处理约定,流水线和人工都遵循。

数据格式

每行三段,用 : 分隔,段内用 | 对齐:

汉字|分段:假名|分段:拼音|分段

示例:中|国|人:ちゅう|ごく|じん: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 符号(如 ⚠️