
Jia Suiandfanlusky
d270395816
fix(engine): 简拼尾组合路径放开静态邻键纠错并拒生成式远键 (#1009)
* fix(engine): 简拼尾组合路径放开静态邻键纠错并拒生成式远键
整串 k-best 解释不了时回退到「head 纠错 + 简拼尾组合」,该路径原本把邻键位整段屏蔽,导致邻键手误的 head 纠不回来(shabgz -> shang'z)。
改为三条规则:head 用完整掩码(静态邻键进来);head 最优切分带 has_generated 时拒(k-best 静态优先,等价无静态读法,挡 huanzg -> huang'g);存在自洽明文读法时跳过组合(挡最短尾拆 sh/zh 后静态邻键改写正确输入,xish -> xia'h 类 39 起,及 huanzh -> huang'h)。
* fix(engine): 纠错用例取词库路径改用 path_to_utf8,非 UTF-8 ACP 下不再抛异常
新增的 head+简拼尾用例用 (directory / msime.db).string() 取路径。MSVC 的 path::string() 走本机 ACP,而测试临时目录名含中文(metasequoia-session-词库-…),在 ACP 表示不了它的机器(CI runner 的英文版 ACP 1252)上会抛 ERROR_NO_UNICODE_TRANSLATION,也就是 CI 日志里的 No mapping for the Unicode character exists in the target multi-byte code page.,input_session 因此失败。文件其余取路径处一律走 metasequoia::path_to_utf8,改齐。
本地 ACP 936 能表示该中文,故本地未复现;本地沙箱另限制子进程建临时目录,端到端只能由 CI 验证。
* fix(engine): 简拼尾组合的 head 也过简拼形状门,挡住 xibd -> xin'd
规则 3 只认「完整音节 head + 简拼尾」,漏掉「完整音节 + 两个简拼声母」:
xibd(xi + b + d)在 0xe/0xf 下最短尾 d 留下 head xib,静态邻键 b->n 把它
读成 xin,组合出 xin'd 顶掉明文;tamd、zhemd 同理。这正是旧邻键掩码要挡的
那类噪声。
改为让 head 过整串同一道 looks_like_jianpin_spelling 门:整串不纠的
"shag"(sha + g),后面多接一个简拼尾也不该纠。shabgz、hauzh 等正例不受影响。
顺带合并两遍 tail 扫描,去掉恒等于 autocorrect_types 的 head_types。
xibd/tamd/zhemd 补进 test_input_session 回归表(改动前 xibd 实测为 xin'd),
test_pinyin 用 xibd 替换被删的 shng 负例。
---------
Co-authored-by: fanlusky <1730976608@qq.com>
2026-10-17 00:05:17 +08:00
..
2026-10-11 18:08:33 +08:00
2026-10-11 18:08:33 +08:00
2026-10-12 20:41:23 +08:00
2026-10-12 13:12:21 +08:00
2026-09-30 21:34:12 +08:00
2026-09-30 21:34:12 +08:00
2026-09-30 21:34:12 +08:00
2026-10-05 20:43:02 +08:00
2026-09-12 03:40:48 +08:00
2026-10-02 02:20:37 +08:00
2026-10-16 23:00:06 +08:00
2026-10-16 20:48:33 +08:00
2026-10-17 00:05:17 +08:00
2026-10-13 12:54:29 +08:00
2026-10-11 20:39:55 +09:00
2026-09-30 21:34:12 +08:00
2026-10-16 20:17:01 +08:00
2026-10-08 22:10:13 +08:00
2026-10-04 00:06:38 +08:00
2026-10-11 18:08:33 +08:00
2026-09-30 21:34:12 +08:00
2026-10-16 20:48:33 +08:00
2026-10-17 00:05:17 +08:00
2026-09-30 21:34:12 +08:00
2026-09-12 03:40:48 +08:00
2026-10-01 02:35:55 +08:00
2026-10-16 01:01:18 +08:00
2026-09-30 21:34:12 +08:00
2026-09-12 03:40:48 +08:00
2026-09-30 21:34:12 +08:00
2026-10-15 02:08:36 +08:00