码表方案配置
五笔等码表方案的全局上屏行为、编码提示、z 键引导、词频调整与自动造词
方案 → 全局方案配置 → 码表方案配置。这里的设置是所有码表方案共享的基线——五笔 86、导入的五笔 98 / 虎码、快符表都读同一份。个别方案要不一样,用方案级码表配置覆盖。
对应配置段是 config.toml 的 [schema.codetable],完整键名与默认值见方案与引擎配置。
码表方案是什么
码表方案按「编码 → 词条」的固定映射出候选,编码由方案的码表文件写死,不做拼音那样的语言模型推断。清风内置的五笔 86(ID wubi86)基于极点五笔码表,最大码长 4:
q → 我(一级简码)
dd → 大(二码简码)
gggg → 王(全码)
ggtt → 五笔(二字词)导入社区码表(五笔 98、新世纪、虎码等)后也是同一套配置在管。
上屏行为
这一组决定「什么时候自动把候选送出去」。四项都是开关:
| 选项 | 说明 | 出厂 |
|---|---|---|
| 全码唯一自动上屏 | 编码唯一精确匹配、且没有更长的后继编码时,直接上屏不必按空格 | 关 |
| 满码空码清空 | 编码达到最大码长且一个候选都没有时,自动清空缓冲,不必按 Esc | 关 |
| 顶码上屏 | 编码超过最大码长时,自动把前 N 码的首选顶上去,多出来的码留在缓冲继续 | 开 |
| 标点顶码上屏 | 有编码时按标点,先上屏首选再输出该标点 | 开 |
「顶码」是码表方案特有的连打机制
四码方案打第五个字母时,前四码那个字已经确定了——顶码上屏就是把它自动送出去,让你不必按空格断开。关掉它,第五个字母会被当作新一轮编码或被丢弃(取决于方案)。
常用功能
| 选项 | 说明 | 出厂 |
|---|---|---|
| 显示编码提示 | 候选旁显示该词的完整编码。打 gg 时「王」旁边显示剩下的 gg,帮你记全码 | 开 |
| 精确匹配模式 | 只显示编码完全等于你打的那些候选,不再显示前缀补全的长词 | 关 |
| 精确匹配空码补全 | 精确匹配模式下若一个候选都没有,自动从更长编码里取首个候选顶上,避免空码。仅在上一项开启时可用 | 开 |
| z 键重复输入 | 打 z 时首选是上一次上屏的内容,快速重复 | 开 |
| z 键引导功能 | 见下 | 不启用 |
精确匹配模式适合谁
默认(关)时,打 gg 会同时出精确匹配的「王」和前缀补全的 ggtt「五笔」等长词。开启后只剩精确匹配的,候选干净、位置稳定,适合已经打熟、靠肌肉记忆盲打的用户;代价是失去「打半个码就看到长词」的便利。
「精确匹配空码补全」是它的安全网:某个编码在词库里恰好没有精确条目时,不至于面对空候选卡住。
z 键引导功能
z 在五笔 86 里是死码(不参与任何编码),可以借来当引导键。空码状态下按 z 直接进入所选模式:
z 有三重身份,冲突时按固定顺序裁决
z 键重复输入、z 键引导功能、以及「z 是本方案的活码前缀」三者共用一个键。运行时的裁决顺序是:z 是本方案活码 > 「z 键重复输入」开着且有上屏历史 > 引导功能。
所以在 z 参与编码的方案(如某些三码方案)上配引导功能不会生效;在五笔 86 上则要先关掉「z 键重复输入」,引导功能才有机会拿到这个键。
其它引导键(符号键)在临时拼音 / 临时英文 / 快捷输入各自的触发键设置里配——那三处只收符号键,字母键统一走这一项。
词频调整
先读原理再调参数
这一组的每个选项都建立在「词频与权重是两个独立维度」之上。三种策略的取舍、首选保护为什么按码长分级、提升为什么跨不出档位——完整说明见词频与候选排序。本节只讲每一项的界面含义。
| 选项 | 说明 | 出厂 |
|---|---|---|
| 启用词频调整 | 总开关。关闭后候选顺序完全由词库权重决定 | 关 |
| 调频策略 | 置顶 / 步进 / 位次渐进,见下 | 置顶 |
| 补全词参与调频 | 前缀补全出来的候选是否参与提升。仅「位次渐进」下可用 | 全部 |
| 热度衰减半衰期 | 使用记录衰减到一半所需的小时数,0 = 内置 72 小时。仅「位次渐进」下可用 | 0 |
| 一简位保护前 N 项 | 只打 1 个编码时,词库前 N 项不参与调频 | 1 |
| 二简位保护前 N 项 | 打 2 个编码时同上 | 1 |
| 三简位保护前 N 项 | 打 3 个编码时同上 | 0 |
| 全码位保护前 N 项 | 打 4 个及以上编码时同上 | 0 |
三种调频策略 0.114 新增
| 策略 | 语义 | 适合 |
|---|---|---|
| 置顶 | 用过一次即排到「没用过的那批」之前,已用过的按最近使用时间排 | 想立竿见影、不怕误选 |
| 步进 | 同样是「用过优先」,已用过的内部按累计次数排 | 想抗一点误选 |
| 位次渐进 0.114 新增 | 每用一次目标位次前移一半(第 8 位 → 4 → 2 → 1),久不用按半衰期回落 | 想平滑、误选代价小 |
「置顶」与「步进」的本质是同一个:布尔的「用过优先」——只要用过一次就整体跳到未用过的之前,策略只决定已用过的内部怎么排。好处是立竿见影,代价是一次误选就把词顶到很显眼的位置,且码表侧的「用过」永不衰减。
「位次渐进」没有这道台阶,用连续的位次表达强弱,误选一次只前移一档;也是唯一带时间衰减的策略,所以「补全词参与调频」和「热度衰减半衰期」两项只在它下面可用,其余策略下会置灰。
三者都不会破坏「五笔优先」:提升只在同一来源档内发生,补全词再怎么用也跨不到精确全码之前。
简码位的首选保护 0.113 新增
首选保护按本次输入的码长分成四档,出厂即为「一简二简保护、三简与全码放开」。
五笔的一简是肌肉记忆的核心,而 25 个一简编码每个都是二选一(a → 工 / 戈、s → 要 / 五……)。调频只看「有没有被选过」、不看词库权重,因此不保护的话,误选一次次选字就会永久换掉首选。分档之后简码位保住词库钦定的首选,全码位仍可正常调频——那里才是调频该起作用的地方。
保护名额只在精确匹配的候选里取,不足则少保护,不会把前缀补全的长词一并钉死。
0.112 及以前开过调频的用户需手动改一项
旧版只有一个 protect_top_n,出厂值是 1;开过调频的用户配置里冻结着这个值,升级后全码位仍被锁死。请把「全码位保护前 N 项」改为 0。三个新增的简码档不受影响,自动按新默认生效。
自动造词
连续上屏的单字会被自动组成词条,算出编码后存入临时词库,此后可直接用该编码打出。
| 选项 | 说明 | 出厂 |
|---|---|---|
| 启用自动造词 | 总开关 | 关 |
| 转入用户词库次数 | 该临时词用满几次后收录进用户词库;0 = 不收录,一直留在临时词库 | 0 |
拼音方案不适用
本节只涉及码表方案与混输方案的码表侧。拼音方案用的是「选词即学」,开关在拼音方案配置 → 自动学习,两者互不影响。
累积与终止
引擎维护一个连续单字缓冲:每上屏一个汉字单字即追加,遇到终止信号则取出已累积的序列尝试造词,随后清空。
只有汉字单字会进入缓冲。混输方案下由拼音打出的单字同样计入,因为造词时的编码由词组编码器按字重新计算,与该字的输入来源无关。
终止信号有七种:
| 信号 | 说明 |
|---|---|
| 上屏多字词 | 选中词组即表明当前不是散字序列。该词组本身不进入缓冲 |
| 上屏非汉字 | 标点、英文、数字、空格。该字符本身也不进入缓冲 |
| 回车 | |
| 切换中英文模式 | |
| 切走输入法或窗口失去焦点 | |
| 移动光标 | 插入点改变后,已累积的字与后续输入不再连续 |
| 距上一个字超过 5 秒 | 见下 |
超时的处理与其余六种不同:它先将旧序列取出造词,再以当前字开启新序列,而非丢弃。此举用于避免跨句拼接,例如间隔十分钟的两次「加好」不会被拼成「加好加好」。间隔阈值由 idle_timeout_ms 控制,0 表示取默认值 5000 毫秒。
造词条件
取出的序列还需满足四项条件,任一不满足则整词作废。
长度 —— 少于 2 字不造词;超过 5 字同样不造词,且是整体放弃而非截取末尾若干字。在连续 8 字的中间切分,结果多半不成词,是杂词的主要来源。上下限为 min_phrase_len(默认 2)与 max_phrase_len(默认 5),均未在设置界面暴露。
取码 —— 按方案文件 [[encoder.rules]] 定义的词组编码器规则,从各字的编码推导词条编码。
取码失败是自动造词不生效的最常见原因
只要序列中有一个字在码表里取不到全码,整词即作废。生僻字、扩展词库中的字往往只有词条而无全码,含这类字的序列不会产出词条。开启 debug 日志可看到失败的具体词条。
查重 —— 若「编码 + 词条」在系统词库或用户词库中已存在则跳过,避免候选出现重复项。
归属 —— 混输方案下,出码与入库均使用主码表方案。因此在混输中造出的词,切回纯码表方案后同样可用。
存储与晋升
新词条写入临时词库,初始权重 800,即时可用。
重复造出同一词条不会重复入库,而是将其使用计数加一,权重不再增长。计数达到「转入用户词库次数」后自动转入用户词库;该项为 0 时不会自动转入,词条一直留在临时词库,可在词库页手动转正、删除或清空。
临时词库默认保留 5000 条(temp_max_entries,0 表示不限),超出时删除权重最低的若干条。检查按写入次数节流,每造词 64 次执行一次,故实际条数可能短暂略高于上限。
排查
将日志级别调至 debug,日志中 auto-phrase: 开头的记录覆盖整条链路:终止信号及其原因、取码失败及具体词条、查重跳过、造词成功及计数、临时词库淘汰。排查完毕后调回 info。
隐藏字段 min_phrase_len / max_phrase_len / idle_timeout_ms / temp_max_entries 的取值范围见配置参考。