OpenCC-compatible Chinese script conversion (simplified, traditional, Taiwan, Hong Kong, Japanese shinjitai) in pure MoonBit, with no FFI.
Dependencies
moon add Ljh684/opencc # 已在 mooncakes 发布:https://mooncakes.io/docs/Ljh684/opencc// 按名字调用(会链入全部词典)
let out = @config.convert("s2twp", "内存泄漏与软件优化") // Some("記憶體洩漏與軟體最佳化")
// 只要一个方向、体积最小:import "Ljh684/opencc/config/s2twp"
let chain = @s2twp.chain()状态:开发中(WIP)。已完成:仓库骨架与 Apache-2.0 许可、上游 OpenCC 数据快照 (19 个词典 / 19 个配置 / 官方 golden 语料 + 官方 testcases 语料)、转换引擎(首字索引、 嵌套词典组、归一化 → 分词 → 逐段转换)、词典生成器(tools/gen_dict:把 26 个词典共 89817 条数据编译成内嵌文本块,其中 6 个是复刻 OpenCC 构建期生成的派生词典;SHA-256 校验与 --verify 幂等检查)、CLI 与库 API。官方一致性:golden 语料 5/5 逐字节通过;官方 testcases 语料覆盖全部 19 个配置、 262 例 / 583 条期望值全部逐字节复现(含 t2s、tw2s、tw2sp、hk2s、seal2t 等反方向与地区方向)。moon check 无警告,50 个测试通过 (含覆盖 89817 条词典条目的全量属性测试,以及 19 个配置的回归基线)。 见下方路线图。
| 配置 | 说明 |
|---|---|
| s2t | 简体 → 繁体(通用) |
| t2s | 繁体 → 简体 |
| s2tw | 简体 → 台湾正体 |
| tw2s | 台湾正体 → 简体 |
| s2twp | 简体 → 台湾正体(含台湾用词) |
| tw2sp | 台湾正体 → 简体(含大陆用词) |
| s2hk | 简体 → 香港繁体 |
| hk2s | 香港繁体 → 简体 |
| s2hkp | 简体 → 香港繁体(含香港用词) |
| hk2sp | 香港繁体 → 简体(含大陆用词) |
| t2tw | 繁体 → 台湾正体 |
| tw2t | 台湾正体 → 繁体(通用) |
| t2hk | 繁体 → 香港繁体 |
| hk2t | 香港繁体 → 繁体(通用) |
| jp2t | 日本新字体 → 繁体 |
| t2jp | 繁体 → 日本新字体 |
| s2seal | 简体 → 篆书 |
| seal2t | 篆书 → 繁体 |
| t2seal | 繁体 → 篆书 |
# 列出全部 19 个配置(会标出任何引用但解析不到的词典,当前为空)
opencc list-configs
# 文本 / 文件转换;不给 -o 时结果写到 stdout
opencc -c s2twp --text "内存泄漏与软件优化" # => 記憶體洩漏與軟體最佳化
opencc convert -c s2t --input in.txt --output out.txt
# 多个 -c 按顺序串联(同上游 CLI),以及整目录批量转换
opencc -c s2t -c t2s --text "内存泄漏与软件优化"
opencc convert -c s2twp --input-dir corpus --output-dir converted --ext .txt
# 与 OpenCC 官方语料逐字节比对:golden(5 条链)+ testcases(19 个配置)
opencc verify --golden test/fixtures/golden
# 同一批结果落成报告(Markdown 或 JSON),并附代码规模与数据快照
opencc verify --report docs/verification-report.md
opencc verify --report docs/verification-report.json// 库:一次转换
let out = @opencc.convert("s2twp", "内存泄漏与软件优化")
// 库:复用链(构建词典索引一次,多次转换)
let chain = @opencc.chain("s2twp")moon build examples/web --target js --release # 产出可被 JS 调用的模块
node examples/web/demo.mjs # 命令行演示
python -m http.server # 再打开 examples/web/index.html 看网页 demo$ node examples/web/demo.mjs
内存泄漏与软件优化
→ TW 記憶體洩漏與軟體最佳化
→ 简 记忆体泄漏与软体最佳化
较低级别的官员由总统任命。
→ TW 較低級別的官員由總統任命。
→ 简 较低级别的官员由总统任命。| 层次 | 内容 | 命令 |
|---|---|---|
| 正确性(oracle) | OpenCC 官方 golden 语料(5 条链)+ 官方 testcases 语料(19 个配置、262 例 / 583 条期望),全部逐字节比对 | moon run cmd/opencc --target native -- verify |
| 回归锁 | test/fixtures/regression/:19 个配置各一份基线,锁定行为不漂移 | moon test --target native |
| 数据完整性 | 26 个词典 / 89817 条目重新生成后与仓库逐字节一致,快照每个文件的 SHA-256 全部匹配 | moon run tools/gen_dict --target native -- --verify |
| 派生词典 | 6 个 OpenCC 构建期派生词典(*Rev、TSCharactersExt、地区词组投影)与上游脚本逐字节等价 | moon test --target native -p tools/gen_dict |
| 属性测试 | 89817 条词条逐条命中自身 key、分词边界、行粒度、代理对不被拆开、二次转换稳定性 | moon test(四个后端) |
| 性能 | 中文密集 / ASCII 密集两个语料的吞吐 | moon run tools/bench_lookup --target native |
| 可核对报告 | 上面几项的结果落成 docs/verification-report.md(19 配置覆盖、往返、数据快照、代码规模),CI 重新生成并逐字节 diff,过期即失败 | moon run cmd/opencc --target native -- verify --report docs/verification-report.md |
data/opencc/dictionary/ 19 个词典(单字、词组、地区变体、兼容汉字、篆书)
data/opencc/config/ 19 个转换配置 + schema
data/opencc/testcases/ 官方 testcases 语料(262 例,覆盖全部 19 个配置)
data/opencc/SHA256SUMS 逐文件校验和
data/opencc/REVISION 上游仓库、revision、归档哈希与选择理由
data/derived/ 6 个派生词典的可审计文本(由 tools/gen_dict 复刻)
test/fixtures/golden/ 官方一致性语料(1 份输入 + 10 份期望输出)pwsh -File scripts/fetch-opencc-data.ps1 -Revision <新 revision># 1. 安装 MoonBit 工具链(Windows)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm https://cli.moonbitlang.cn/install/powershell.ps1 | iex
# 2. 安装 Git 并完成仓库初始化(写入本仓库的 user.name / user.email 并首次提交)
winget install --id Git.Git -e
pwsh -File scripts/setup-git.ps1
# 3. 编译与测试
moon check
moon test
# 4. 可选:刷新上游 OpenCC 数据快照(已在仓库内,仅升级 revision 时执行)
# pwsh -File scripts/fetch-opencc-data.ps1 -Revision <新 revision>moon.mod 模块清单
data/opencc/ 上游词典与配置快照(含 REVISION / SHA256SUMS)
core/ 词典、最长匹配、转换链(引擎核心)
config/ 19 个内置配置的定义与其转换链
dict/ 编译期词典数据模块(由 tools/gen_dict 产出)
cmd/opencc/ CLI 入口
tools/gen_dict/ 词典 → MoonBit 数据 生成器
scripts/ 环境与数据准备的 PowerShell 脚本
test/fixtures/golden/ OpenCC 官方一致性语料(验收基准)
docs/ 设计文档与验收标准| 阶段 | 目标 | 状态 |
|---|---|---|
| F1 骨架 | 仓库、Apache-2.0 许可、MoonBit 模块与三后端构建 | 已完成 |
| F2 数据快照 | 词典 / 配置 / golden 语料入库,含 revision 与逐文件 SHA-256 | 已完成 |
| F3 词典生成器 | 词典 → dict/*.mbt + manifest,--verify 幂等 | 已完成 |
| F4 索引 | 首字索引替换线性扫描,性能记录入库 | 已完成 |
| F5 官方一致性 | 配置驱动链路 + 派生词典 + 逐段转换,golden 5/5 逐字节通过 | 已完成 |
| F6 CLI 与配置覆盖 | list-configs / convert / verify,库入口 convert(name, text) | 已完成 |
| F7 数据表示 | 内嵌文本块 + 运行时建索引:native 测试 341 s → 7 s,解除 plain wasm 上限 | 已完成 |
| F8 覆盖与属性测试 | 全量条目属性测试、往返一致性检查、缺失词典台账、行粒度与稳定性属性 | 已完成 |
| F9 按配置裁剪 | 词典/配置各自成包:t2s 构建 259 KB、s2t 914 KB、全量 CLI 1622 KB(wasm-gc) | 已完成 |
| F10 发布 | 已发布到 mooncakes(Ljh684/opencc v0.1.1)、GitHub Release 与演示素材 | 已完成 |
| F11 可核对报告 | verify --report 生成 docs/verification-report.md|json,CI 重新生成后逐字节 diff | 已完成 |
| F12 补齐派生词典 | 复刻 OpenCC 构建期生成的 6 个派生词典(*Rev、TSCharactersExt、地区词组投影),19 个配置再没有缺失的 pass | 已完成 |
| F13 官方 testcases | 官方 testcases 语料入库并在 verify 中逐条比对:19 个配置、262 例 / 583 条期望全部复现 | 已完成 |
| F14 代理对修复 | 修掉「非基本平面字符被吞」的引擎缺陷(切片起点落在低代理项时为空),补官方回归测试 | 已完成 |
Install
Download zipOpenCC-compatible Chinese script conversion (simplified, traditional, Taiwan, Hong Kong, Japanese shinjitai) in pure MoonBit, with no FFI.
Dependencies