个性化

词库与词频

管理方案词库与附加词库、维护用户词、调频与候选置顶,以及候选排序的基本原理

打过的字词、手动造的词、调频记录都属于用户数据,与方案自带的预置词库分层存放。设置工具的「词库」页面统一管理这些数据,所有修改即时生效。

词库管理界面

打开设置工具(Ctrl + Shift + ]),进入「词库」页。顶部「词库类型」下拉选择数据域——快捷短语(全局)或某个输入方案;下方子标签切换具体数据类别。

下拉里含全部已安装方案,不限于已启用的,也包括英文、快符这类特殊方案——它们各有独立的用户词库与词频记账,与主方案互不干扰。

选择方案后,可管理的数据类别随方案引擎类型变化:

方案类型可管理数据
码表用户词库、临时词库、词频、候选调整
拼音用户词库、临时词库、词频
英文 0.114 新增用户词库、词频、候选调整
混输候选调整

快符这类特殊方案按码表处理,四类齐全。英文少一个「临时词库」,原因见下文

通用操作:

  • 搜索 —— 输入编码或词条即时过滤,编码支持中段匹配 0.113 新增:搜 ya 也能搜到 haoya,不必从头打起
  • 排序 —— 点击表头按该列排序
  • 分页 —— 用户词库、词频等数据量大时分页浏览
  • 删除、清空等破坏性操作均有二次确认

快捷短语的管理见自定义短语,本页聚焦方案词库与词频。

拼音编码带音节空格 0.113 新增

拼音词库的编码在列表、搜索回显与「出码」按钮里一律显示成带音节空格的形式(ni hao 而不是 nihao),让词库真实的音节结构可见。存储侧不变,仍是扁平码,用户词库与临时词库都已统一。

由此多出一个用法:在编码框里手打空格即显式声明音节切分,优先于程序的自动推导——自定义切分或生僻音的词,打个空格就能把边界给准。搜索时带不带空格都能匹配。

直接打开到指定方案 0.113 新增

从输入法菜单选「词库管理」时,直接落在你当前正在用的那套方案上,不再停在「快捷短语」让你再选一次。

要跳得更准,可以用命令行参数指定方案与数据类型:

wind_setting.exe --page dict --schema wubi86 --type shadow

也可以挂成短语,用编码一键直达:

cods = $CC("五笔候选调整", setting.open("dict", "--schema=wubi86 --type=shadow"))

取值与降级规则见设置工具的命令行参数

附加词库开关

方案除主词库外,还可随附若干附加词库(表情、符号、地名等)。它们与主词库共同参与候选排序,可按需独立开关,是在不修改方案文件的前提下调整候选范围的最常用入口。

在「方案」页选中方案后点「设置」,打开方案设置对话框,其中「附加词库」区块列出该方案的所有附加词库(主词库不在此列出)。每个条目一个开关,下方小字说明该词库的内容范围(由方案作者预设)。

五笔方案内置的附加词库:

词库默认说明
极点五笔主词库——主词库,始终启用,不在附加词库列表中
扩展词库启用新词、网络用语、生僻词等非常用词条
Emoji 表情启用按五笔编码检索 emoji;输入 emoj 可查看常用表情
行政区域关闭省市县区等地名词条,按需启用

即时生效,无需重启

保存后开关立即生效,停用的词库即从候选中移除。开关状态写入用户数据目录下的 schema_overrides\<方案ID>.toml,仅保存与方案默认值不同的项;升级安装包不会覆盖你的开关设置。

开关只记「开或关」,不冻结词库定义

覆盖层按词库 id 只接受启用状态一个字段,词库的路径、名称、顺序等始终以方案文件为准。因此方案升级后新增或调整过的词库都能正常透传,不会被你点过的开关冻结在旧版本。若想替换词库文件本身,见同结构覆盖机制

用户词库

用户词库收录你手动添加的词,以及自动造词转正后的词条。

手动添加 —— 输入词条后可点击「出码」按钮自动生成编码,也可手动填写;支持设置权重。此外可编辑、删除、清空。

导入 / 导出 —— 导出对话框可勾选用户词库、临时词库、词频、候选调整,一并写进同一个 WindDict YAML(.wdict.yaml);导入支持 WindDict、Rime 词库、TSV 文本(按内容自动识别)。导入前先预览识别格式与新增 / 更新 / 跳过条数,再选择:

  • 合并导入 —— 保留本地已有词,追加新词
  • 替换导入 —— 清空当前方案词库后导入

文件格式规范、格式识别判据、跨引擎类型校验与合并去重键见导入与导出

英文方案的用户词库 0.114 新增

英文方案有自己的用户词库,收专有名词、缩写、项目内部词汇这些词库里不会有的词。编码就是单词本身的小写——英文词库以小写码做大小写不敏感的前缀匹配,加 WindInput 后打 wind 就能出。

三种词加不进去,加词会提示无法计算编码:

  • 带空格的(如 thank you)—— 带空格的编码会让前缀查询永远命中不到,加了等于没加
  • 非 ASCII 的(如 café)—— 英文词库的编码空间就是 ASCII
  • 一个字母都没有的(如 123)—— 纯数字或纯符号不是英文词

英文没有临时词库:临时词库是自动造词的暂存区,而英文没有造词流程。因此英文方案在词库页只有「用户词库 / 词频 / 候选调整」三个子标签。

临时词库与自动造词

启用自动造词 / 自动学习后(码表与拼音各有独立开关),连续选字产生的新词组会先进入临时词库,记录使用次数,尚未进入正式用户词库。

在「临时词库」子标签中:

  • 转正 —— 将临时词条转入正式用户词库
  • 全部转正 —— 一键转正当前全部临时词条
  • 删除 / 清空

词频与调频

清风的候选排序由两个彼此独立的维度决定:

  • 权重(weight) —— 候选自带的静态排序分,来自词库或语言模型,是默认排序维度
  • 词频(frequency) —— 你实际使用候选的统计(用了多少次、最近何时用),是完全独立的另一维度

关键在于:词频不加到 weight 上,而是排序阶段作为独立维度与权重组合,排序时绝不修改任何候选的 weight。

词频记录(count 使用次数与 last_used 最近使用时间)按「方案 + 编码 + 文本」存储在 userdata.redb。在「词频」子标签中可删除单条记录(该词回落原始排序)或清空列表。

记账用哪个编码:码表与拼音相反 (0.114)

这里的「编码」两类方案取法不同,是刻意的:

  • 码表 —— 记你实际敲的输入码d / de / def 是三个独立码位,各自的首选独立调整。这也是下文「首选保护按码长分级」成立的前提
  • 拼音 / 英文 —— 记候选自身的编码。候选码恒是这个词完整的读音或拼写,打 d 选了「东西」之后打 dongxi 也该受益;而且拼音下不能用输入缓冲——双拼的 siyr 与候选码 siyuan、带分隔符的 xi'anxian 都对不上

0.113 及以前码表侧也走候选码,导致在 de 下选中「有」(它带的是全码 def)后,打 d 时它也跟着前移。0.114 已按候选来源分流修正。

调频策略

码表方案的词频以基础排序为基底调整候选顺序,设置页「调频策略」三选一:

策略设置页标签语义行为
top(默认)置顶一次到顶选一次立刻置于已用档之首(按最近使用时间排)
step步进逐次提升按累计次数爬升,抗误选
position位次渐进 0.114 新增位次减半每用一次把该候选的位次前移一半,逐步靠前

topstep 的本质都是布尔的「用过优先」:只要用过一次就整体跳到未用过的那批之前,策略只决定已用过的内部怎么排。这在候选以精确匹配为主时没问题,但对前缀匹配为主的方案过于粗暴——英文几乎所有候选都是前缀匹配(打 helhello / help),选过一次就顶到最前,一次误选就很显眼。

position 没有这道台阶:位次连续表达强弱,用一次前移一半,第 8 位 → 4 → 2 → 1 → 0,四次到顶;久未使用则按半衰期回落。这也是英文与前缀匹配类方案的推荐策略

提升只在档内发生

候选按来源分档(精确全码 / 简码 / 前缀补全…),position 的提升跨不出档位——前缀补全的词再怎么提升也排不到精确全码之前,「五笔优先」不受影响。

补全词参与调频 0.114 新增

设置页「补全词参与调频」控制前缀补全出来的候选是否参与位置提升,码表与拼音各有一项,三选一:

取值设置页标签语义
none不参与前缀补全的候选一律不提升
single仅单字/单词只提升「单个语义单元」的候选:一个汉字,或一个西文单词
all全部全部提升

判据是语义单元数而不是字符数:「东西」是 2 个单元,hello 是 1 个,thank you 是 2 个。用字符数判会把英文整个挡死(hello 有 5 个字符),语义单元让同一条规则在中英文下都成立。

拼音出厂 single——只打半个音(如 d)时所有候选都是补全,让「的 / 得」这类单字正常上浮,但不让「东西」这种词组跑到单字前面。码表出厂 all,因为码表的前缀补全已由档位隔离、跨不到精确档之前,无需再收窄。

码表侧只在「位次渐进」下生效

top / step 走布尔「用过优先」,根本不读这一项,故设置页把码表的「补全词参与调频」挂在策略为「位次渐进」时才可用。拼音侧没有策略选择,只要开了调频就生效。

首选保护:把基础排序原本的前 N 个候选按原序回填到最前,即使某候选词频极高,不在保护集内也进不了前 N 位。仅码表 / 混输方案生效。

保护档位按本次输入的码长分级 0.113 新增,设置页对应四项:

设置项配置键出厂说明
一简位保护前 N 项protect_top_n_len11一简每个编码通常只有两个字,误选一次就会永久换掉首选,故默认保护
二简位保护前 N 项protect_top_n_len21同上
三简位保护前 N 项protect_top_n_len30三简的固定程度弱于一二简,默认不保护
全码位保护前 N 项protect_top_n04 码及以上,默认不保护,让调频正常起作用

保护名额只在精确匹配的候选里取,不足则少保护——名额多于精确候选时不会把前缀补全的长词一并钉死。分级的来龙去脉与老配置的迁移注意事项见方案与引擎配置 · 首选保护按码长分级

码表的 top / step 下,「用过」是永久的,用一次即可稳定上浮。position 与拼音则带时间衰减,久未使用的记录会逐渐褪色、落回原始序。

拼音调频:位置提升模型 0.114 新增

0.113 及以前,拼音的「用过」是一道布尔闸门——只要用过就排到没用过的之前,无论权重差多少个数量级。于是打一个 d,只选过一次的「的样子」会把「的」挤下去。

0.114 起换成与码表 position 同一套位置提升模型:

目标位次 = 原始位次 / 2^有效使用次数
有效使用次数 = 累计次数 × 时间衰减

要点:

  • 提升速度与权重无关。位次天生是归一化的——第 2 位就是第 2 位,与它的绝对权重是 1.5 千万还是 2 万无关。所以不管候选之间差 486 倍还是 2 倍,第 2 位的候选都是用一次到首位
  • 只在层内提升。整句候选与精确码短语恒占顶部、不参与提升;简拼、前缀补全、子短语等匹配层级也是硬约束,词频不得跨层提拔
  • 同位次时用得多的在前
  • 累计有效使用不足半次的记录不提升——避免一年前用过一次、已衰减到几乎为零的记录仍把第 2 位顶上首位

衰减仍由 half_life(半衰期,出厂 72 小时)控制。这也意味着用过 50 次的词,一个月不用也会完全失效——墙钟衰减的固有行为,30 天约等于 10 个半衰期。

base_scale 与 recency_peak 已不再生效

拼音词频不再打分,只调位次,schema.pinyin.frequency 下的 base_scalerecency_peak 两项因此改动无任何效果。保留是为了将来可能恢复打分模型,现阶段不必调。half_life 仍然生效。

调频开关

码表与拼音的词频调整各有独立开关,随附方案默认开启。开关与策略在「方案」页的对应引擎配置对话框中调整。

调整候选顺序

短语的 position

position 是短语专有字段,用户词条没有这个字段。它只在同一编码、且权重相同的多条短语之间决定先后,详见自定义短语 · position

候选调整(置顶 / 隐藏)

「候选调整」控制特定候选的显示行为,不修改原始词库数据,规则以一层 shadow 规则持久化在 userdata.redb

  • 添加 —— 指定编码与词条,类型选固定位置(并填目标位置)或隐藏
  • 编辑 —— 修改已有规则
  • 撤销 —— 取消调整规则,恢复该候选的原始显示
  • 清空 —— 移除全部规则

日常使用中也可直接在候选窗口用快捷键置顶或删除候选(见快捷键定制),产生的规则同样在此管理。

拼音方案下的置顶

拼音候选权重是百万级,单纯把用户词的 weight 调到几千不足以稳定压过常用拼音词。更可靠的做法是给它一个不易与自然词碰撞的精确编码(例如 4 字母的 cobd),让它只在该精确编码下出现。

词库缓存与重建

首次加载 .dict.yaml 时会解析成二进制缓存(.wdat),存放在 %LOCALAPPDATA%\WindInput\cache,之后直接内存映射读取,省掉重复解析。

缓存按内容指纹校验,不看修改时间。以下任一情况会自动重建,用户无需手动干预:

  • 词库文件内容变化(哪怕只改一个字节)
  • 缓存文件或其指纹文件缺失、损坏
  • 拼音词库的 import_tables 子表增删或改动
  • 程序升级带来了解析语义变更
  • 词库的 typeenglish 与其他类型之间切换

因为指纹基于内容而非时间戳,用 scp 部署、从版本控制签出等刷新 mtime 的操作不会触发无谓的重建;把文件改回原样也能重新命中旧缓存。

改了 .dict.yaml 之后不需要做任何事

下次加载该词库时自动重建。改方案文件(.schema.toml)同样不需要——base_orderdefault_weightbase_sort 作用在查询期的排序器上,根本不进缓存。

需要强制全量重建时(例如怀疑缓存异常),用命令行:

wind_input schema rebuild

它会清空整个缓存目录。输出里若提示「M 个仍被占用」,是文件还处于内存映射中,再执行一次即可清掉,不影响正确性。详见命令行工具

只投放 .wdat 而无 .dict.yaml 的词库无法重建

词库也可以只分发编译好的 .wdat 而不带 yaml 源。这种词库直接映射加载、完全绕过指纹校验;一旦加载失败会明确报错,此时只能更换词库文件,改 yaml 没有意义(根本没有 yaml)。

删除操作不可恢复

删除与清空操作不可撤销。重要数据建议提前备份用户数据目录(%APPDATA%\WindInput\),或用设置工具一键备份,见备份与还原

本页目录