新增学习资料生成器模块(learner),从权威库生成多维日语学习资料: - 拼音/假名/汉字/熟字训四类索引,带拼音↔假名↔汉字交叉跳转 - 逐字音训分类(KANJIDIC2 精确查表 + 启发式回退 + 排序键) - 音变标注体系:浊化(連濁)、半浊化、促音变(促音便)、连声(れんじょう) 独立配色 + 合并逻辑 + 音变规律说明 - 显式标注表:rendaku_marks(连用形连浊)、renjou_marks(连声) - 每索引独立例词数配置(jlearn.toml + --config) - HTML 单页应用 + 静态 HTML + PDF(playwright) 清洗工具增强: - 拼音校验器(pinyin_checker)集成到 jclean - 多音字拼音校正、ます形サ変動詞转原型 数据: - 权威库补充连声词(反応/天皇/陰陽/観音/因縁/三位/輪廻/安穏) - KANJIDIC2 音训分类表、拼音校正字典 整理 .gitignore:忽略生成产物(output/study_materials)、词典数据库、 任务运行日志、备份文件
353 lines
12 KiB
Markdown
353 lines
12 KiB
Markdown
# Japanese Vocabulary Cleaner
|
||
|
||
日语词表清理工具 — 半自动处理「汉字 + 假名 + 拼音」三段式词表。
|
||
|
||
---
|
||
|
||
## 项目简介
|
||
|
||
本项目用于清理和规范化日语词表数据,将原始格式转换为标准的三段式格式:
|
||
|
||
```text
|
||
输入:日本人:にほんじん:
|
||
输出:日|本|人:に|ほん|じん:ri|ben|ren
|
||
```
|
||
|
||
核心功能:
|
||
|
||
- 🔍 **自动分割** — 汉字/假名智能对齐,管道符分割
|
||
- 🔤 **拼音生成** — 基于 pypinyin + 多音字字典(数据外置)
|
||
- 🤖 **智能分类** — 成功/失败/待审核自动分流
|
||
- 📋 **任务管理** — 批次隔离、状态机、断点续处理
|
||
- 🔄 **Review 交互** — 交互式逐条确认或文件标注批量处理
|
||
- ⚙️ **配置驱动** — TOML 配置文件,多项目友好
|
||
|
||
---
|
||
|
||
## 快速开始
|
||
|
||
### 安装
|
||
|
||
```bash
|
||
# 安装项目(开发模式)
|
||
pip install -e .
|
||
|
||
# 验证安装
|
||
jclean --help
|
||
```
|
||
|
||
### 创建第一个任务
|
||
|
||
```bash
|
||
# 1. 初始化配置文件(可选)
|
||
jclean init-config
|
||
|
||
# 2. 创建清理任务
|
||
jclean create my_task --source data/sources/xinbiaori_1.txt
|
||
|
||
# 3. 运行任务
|
||
jclean run my_task
|
||
|
||
# 4. 查看状态
|
||
jclean status my_task
|
||
|
||
# 5. Review 确认(两种方式)
|
||
# 方式1: 交互式逐条确认
|
||
jclean review my_task --bucket pinyin
|
||
|
||
# 方式2: 编辑 review 文件标注后批量应用
|
||
jclean review my_task --bucket pinyin --apply
|
||
|
||
# 6. 所有 review 清零后,继续推进(合并到最终库)
|
||
jclean run my_task
|
||
```
|
||
|
||
详细使用说明:
|
||
- 完整工作流 → [docs/design/WORKFLOW.md](docs/design/WORKFLOW.md)
|
||
- Review 交互指南 → [docs/REVIEW_GUIDE.md](docs/REVIEW_GUIDE.md)
|
||
- CLI 命令参考 → [README_cleaner.md](README_cleaner.md)
|
||
|
||
### 生成学习资料
|
||
|
||
清洗完成的权威库可以生成多维学习资料(汉字读音手册、拼音对照表、音读规律、Anki 卡片等):
|
||
|
||
```bash
|
||
# 列出所有可生成的资料类型
|
||
jlearn list
|
||
|
||
# 生成全套学习资料(默认输出到 ./study_materials)
|
||
jlearn generate
|
||
|
||
# 指定权威库和输出目录
|
||
jlearn generate --vocab data/db/vocabulary.txt --output-dir my_materials
|
||
|
||
# 只生成指定类型
|
||
jlearn generate --only handbook,anki
|
||
```
|
||
|
||
详细说明 → [docs/LEARNER.md](docs/LEARNER.md)
|
||
|
||
---
|
||
|
||
## 项目结构
|
||
|
||
```text
|
||
japanese/
|
||
├── src/pl_japanese/
|
||
│ ├── cleaner/ # 清理工具核心(三层架构)
|
||
│ │ ├── tango_analyser.py # 底层:单词分析
|
||
│ │ ├── task_processor.py # 中层:文件 I/O、桶管理
|
||
│ │ ├── workflow.py # 顶层:状态机、任务推进
|
||
│ │ ├── cli.py # 命令行接口
|
||
│ │ ├── config.py # 配置文件管理
|
||
│ │ └── ...
|
||
│ ├── learner/ # 学习资料生成器
|
||
│ │ ├── builder.py # 加载权威库、预建索引
|
||
│ │ ├── generators.py # 文本类资料生成器 + 音训读判断
|
||
│ │ ├── html_generator.py # 交互式 HTML 单页应用
|
||
│ │ └── cli.py # jlearn 命令行接口
|
||
│ ├── tango/ # Tango 数据模型(下游)
|
||
│ └── dict_utils.py # 词典工具
|
||
│
|
||
├── tests/ # 测试(92 个)
|
||
│ ├── test_cleaner.py # 底层单元测试
|
||
│ ├── test_cleaner_workflow.py # 三层集成测试
|
||
│ ├── test_config.py # 配置管理测试
|
||
│ ├── test_learner.py # 学习资料生成器测试
|
||
│ └── ...
|
||
│
|
||
├── scripts/
|
||
│ ├── clean.py # jclean 便捷入口(未安装包时)
|
||
│ └── mdlint.cmd # Markdown lint 检查
|
||
│
|
||
├── data/
|
||
│ ├── db/ # 权威库(最终成果)
|
||
│ │ ├── vocabulary.txt # 清理完成的词表
|
||
│ │ └── skipped.txt # 跳过的词条
|
||
│ └── sources/ # 原始数据源
|
||
│
|
||
├── tasks/ # jclean 任务目录(每任务一个子目录)
|
||
│ └── my_task/
|
||
│ ├── task.json # 任务元数据
|
||
│ ├── auto_done.txt # 自动处理成功
|
||
│ ├── skip.txt # 跳过(无汉字等)
|
||
│ └── review_*.txt # 待人工确认
|
||
│
|
||
├── study_materials/ # jlearn 生成的学习资料
|
||
│ ├── overview.txt # 数据总览
|
||
│ ├── kanji_handbook.txt # 汉字读音手册
|
||
│ ├── jukujikun.txt # 熟字训词表
|
||
│ ├── pinyin_kana_mapping.txt # 拼音→汉字→假名对照表
|
||
│ ├── pinyin_kana_kanji_mapping.txt # 拼音→假名→汉字对照表(读音规律复用)
|
||
│ ├── phonetic_rules.txt # 音读规律总结
|
||
│ ├── anki_deck.txt # Anki 卡片(TSV)
|
||
│ └── study_app.html # 交互式单页应用(多维互链查询)
|
||
│
|
||
├── docs/ # 项目文档
|
||
│ ├── design/ # 设计文档
|
||
│ ├── history/ # 历史记录
|
||
│ ├── LEARNER.md # jlearn 使用指南
|
||
│ └── REVIEW_GUIDE.md # Review 交互指南
|
||
│
|
||
├── jclean.toml # jclean 配置文件
|
||
├── pyproject.toml # 项目配置
|
||
└── README_cleaner.md # jclean 用户文档
|
||
```
|
||
|
||
---
|
||
|
||
## 核心特性
|
||
|
||
### 数据清洗(jclean)
|
||
|
||
#### 三层架构
|
||
|
||
```text
|
||
┌─────────────────────────────────────┐
|
||
│ CleanerWorkflow (顶层) │ 状态机、任务推进
|
||
│ - run() 统一入口 │
|
||
│ - 状态转换:CREATED → PROCESSING │
|
||
│ → REVIEWING → READY │
|
||
└─────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────┐
|
||
│ TaskProcessor (中层) │ 文件 I/O、桶管理
|
||
│ - process_source() │ 无状态更新
|
||
│ - reprocess_bucket() │
|
||
│ - merge_to_authoritative() │
|
||
└─────────────────────────────────────┘
|
||
↓
|
||
┌─────────────────────────────────────┐
|
||
│ TangoAnalyser (底层) │ 单词级分析
|
||
│ - analyze(kanji, kana) │ 无文件/桶概念
|
||
│ - 返回 AnalysisResult │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
设计细节见 [docs/design/WORKFLOW.md](docs/design/WORKFLOW.md)。
|
||
|
||
#### 智能分类
|
||
|
||
处理结果自动分流到 5 个桶:
|
||
|
||
| 桶名 | 说明 | 自动处理 |
|
||
| ------ | ------ | --------- |
|
||
| `auto_done.txt` | 成功:单音字、唯一分割 | ✅ |
|
||
| `skip.txt` | 跳过:无汉字、纯假名 | ✅ |
|
||
| `review_pinyin` | 多音字:已填最常见读音 | ⚠️ 人工 |
|
||
| `review_split` | 分割失败:假名对齐失败 | ⚠️ 人工 |
|
||
| `review_verb` | 动词形态:する/でした 结尾 | ⚠️ 人工 |
|
||
| `review_special` | 特殊格式:片假名/符号/~ | ⚠️ 人工 |
|
||
|
||
#### 配置文件驱动
|
||
|
||
```toml
|
||
# jclean.toml
|
||
[paths]
|
||
tasks_root = "tasks"
|
||
vocabulary = "data/db/vocabulary.txt"
|
||
skipped = "data/db/skipped.txt"
|
||
|
||
[defaults]
|
||
backup_before_merge = true
|
||
backup_dir = "data/backup"
|
||
|
||
[logging]
|
||
level = "INFO"
|
||
```
|
||
|
||
配置文件查找顺序:`--config` > 当前目录 > 项目根 > `~/.jclean.toml` > 默认值
|
||
|
||
详细说明见 [docs/design/CONFIG_FILE_DESIGN.md](docs/design/CONFIG_FILE_DESIGN.md)。
|
||
|
||
### 学习资料生成(jlearn)
|
||
|
||
从清洗完成的权威库生成多维学习资料,借助拼音帮助母语者快速掌握日语汉字读音:
|
||
|
||
#### 8 种学习资料
|
||
|
||
| 资料类型 | 说明 | 适用场景 |
|
||
|---------|------|---------|
|
||
| **数据总览** | 汉字统计、一字多音分布、高频核心字 | 了解数据全貌、规划学习重点 |
|
||
| **汉字读音手册** | 每个单字按读音分组 + 例词(拼音锚定) | 系统掌握一字多音(`生` 9 音、`日` 8 音) |
|
||
| **熟字训词表** | 整词读音无法拆字的条目(如 `今日→きょう`) | 整体记忆特殊词汇 |
|
||
| **拼音→汉字→假名** | 从中文拼音出发,按汉字分组 | 利用母语直觉迁移记忆 |
|
||
| **拼音→假名→汉字** | 按假名分组,**发现读音规律复用**(如 `an→あん` 在 安/暗/案 中都成立) | 提炼可推理规律、减少死记硬背 |
|
||
| **音读规律总结** | 拼音与假名对应模式统计(如 `-ng` 结尾 74% 带长音) | 发现宏观统计规律 |
|
||
| **Anki 卡片** | TSV 格式,可直接导入 Anki | 间隔重复背诵 |
|
||
| **交互式 HTML 应用** | 单页应用,拼音·汉字·假名多维互链,可搜索、离线可用 | 随点随查、交叉导航 |
|
||
|
||
#### 性能优化
|
||
|
||
- 预建 `(汉字,假名)→拼音` 反查索引,避免 O(N²) 遍历
|
||
- 7552 词权威库全量生成 < 5 秒
|
||
|
||
详细说明 → [docs/LEARNER.md](docs/LEARNER.md)
|
||
|
||
---
|
||
|
||
## 测试
|
||
|
||
```bash
|
||
# 运行全部测试(92 个)
|
||
pytest tests/ -v
|
||
|
||
# 按模块测试
|
||
pytest tests/test_config.py # 配置管理
|
||
pytest tests/test_cleaner_workflow.py # 三层集成
|
||
pytest tests/test_cleaner.py # 底层单元
|
||
pytest tests/test_validator.py # 格式校验
|
||
pytest tests/test_learner.py # 学习资料生成器
|
||
```
|
||
|
||
---
|
||
|
||
## 文档
|
||
|
||
- **用户文档**
|
||
- [README_cleaner.md](README_cleaner.md) — jclean 工具使用指南
|
||
- [docs/LEARNER.md](docs/LEARNER.md) — jlearn 学习资料生成器指南
|
||
- **设计文档** → [docs/design/](docs/design/) — 架构、工作流、配置方案
|
||
- **交互指南** → [docs/REVIEW_GUIDE.md](docs/REVIEW_GUIDE.md) — Review 确认流程
|
||
- **历史记录** → [docs/history/](docs/history/) — 重构总结、变更日志
|
||
|
||
完整文档索引见 [docs/README.md](docs/README.md)。
|
||
|
||
---
|
||
|
||
## 开发
|
||
|
||
### 环境搭建
|
||
|
||
```bash
|
||
# 克隆项目
|
||
git clone <repo>
|
||
cd japanese
|
||
|
||
# 创建虚拟环境
|
||
python -m venv venv
|
||
source venv/bin/activate # Windows: venv\Scripts\activate
|
||
|
||
# 安装依赖(开发模式)
|
||
pip install -e .
|
||
pip install pytest
|
||
|
||
# 运行测试
|
||
pytest tests/
|
||
```
|
||
|
||
### 目录约定
|
||
|
||
- `src/` — 源代码(src-layout)
|
||
- `tests/` — 测试(pytest,pythonpath = ["src"])
|
||
- `tasks/` — jclean 任务工作目录(git ignore)
|
||
- `data/db/` — 权威库(最终成果,git 跟踪)
|
||
- `data/sources/` — 原始数据源(git 跟踪)
|
||
- `docs/` — 项目文档
|
||
- `scripts/` — 工具脚本
|
||
|
||
---
|
||
|
||
## 版本历史
|
||
|
||
### v0.4.0 (当前)
|
||
|
||
- ✅ 学习资料生成器(jlearn)
|
||
- 8 种资料:汉字手册、熟字训表、拼音→汉字→假名、拼音→假名→汉字(读音规律复用)、音读规律、Anki 卡片、数据总览、交互式 HTML 应用
|
||
- 音读/训读启发式标注(音读可迁移、训读需单记)
|
||
- 交互式 HTML 单页应用:拼音·汉字·假名多维互链,可搜索、离线可用
|
||
- 单字/熟字训自动区分(1784 单字 + 35 熟字训)
|
||
- 性能优化:预建反查索引,7552 词 < 5 秒生成
|
||
- ✅ 92 个测试(+8 learner 测试)
|
||
|
||
### v0.3.0
|
||
|
||
- ✅ 配置文件系统(TOML 格式,多项目支持)
|
||
- ✅ 配置简化(移除不必要的默认值)
|
||
- ✅ UTF-8 BOM 容错
|
||
- ✅ 项目目录清理(脚本归档、文档整理)
|
||
|
||
### v0.2.0
|
||
|
||
- ✅ 三层架构重构(底层/中层/顶层职责分离)
|
||
- ✅ 任务化管理(批次隔离、状态机)
|
||
- ✅ CLI 简化(统一 `jclean run` 命令)
|
||
- ✅ 73 个测试覆盖
|
||
|
||
### v0.1.0
|
||
|
||
- 🗑️ 单文件 500+ 行脚本(已废弃)
|
||
- 🗑️ 全局变量、硬编码路径(已重构)
|
||
|
||
---
|
||
|
||
## 许可
|
||
|
||
(待添加)
|
||
|
||
---
|
||
|
||
## 联系
|
||
|
||
(待添加)
|