☰
智能过滤与生僻字管理:WindInput 如何做到候选窗干净不刷屏
2026/10/16 2:05:22 网站建设 项目流程

【免费下载链接】WindInput

清风输入法 | 轻量、快速、可定制的开源中文输入法,专为五笔和码表输入方案设计,支持全拼/双拼(Windows / macOS / Linux)

项目地址:https://gitcode.com/gh_mirrors/wi/WindInput
点击查看免费下载

WindInput(清风输入法)是一款轻量、快速、可定制的开源中文输入法,专为五笔和码表输入设计。它的候选窗之所以干净不刷屏,靠的是内置的智能过滤机制:按编码分组自动滤掉生僻字,同时提供"临时放宽"和生僻字管理能力,让你在常用字优先的前提下,随时把冷门字精准找回来。本文用大白话讲清楚这套机制怎么运作、怎么调。

为什么候选窗需要"智能过滤"?

用五笔打过「sivg」的朋友都知道,一个码位下可能同时挂着一个常用字和一堆生僻字。如果全部摆出来,常用字被淹没在生僻字里,找起来很崩溃。

WindInput 的解决方案是把候选过滤做成三档,配置项是input.filter_mode(见 data/config.toml),默认出厂为smart(智能档):

档位配置值行为
常用字general只保留常用字,生僻字一律不出
智能(默认)smart同一编码下有常用字时,滤掉生僻字;没有常用字时整组放行
全部字符gb18030不过滤,词库里有什么出什么

💡 智能档的精髓在于"分组判定":过滤器按(来源, 编码)分组,只在"组内有常用字"时才下刀(实现见 wind-candidate/src/filter.rs)。所以打一个只有生僻字占用的码位时,这些字照常出现,不会误杀。

生僻字打不出来怎么办?一个翻页键"临时放宽"

智能档有个副作用:如果一个生僻字的唯一编码恰好被常用字占着(比如五笔「桜」与常用字「档」同码sivg),这个字在智能档下就彻底打不出来。老办法是整体切到"全部字符"档,但往往切了之后忘了切回,满屏生僻字。

WindInput 的做法是一条完全由用户主动触发的逃生路径(设计文档见 docs/design/smart-filter-scope-relax.md):

  1. 在候选窗里翻页翻到最后一页;
  2. 再按一次向后翻页键(默认开启,配置项input.scope_relax.page_end_key,见 data/config.toml);
  3. 被过滤的生僻字会以·前缀标注、追加到候选列表末尾,继续往后翻即可看到。

这套机制有几个贴心细节:

  • 临时生效:本次组合结束(上屏或取消)后自动恢复智能档,不用担心忘切回;
  • 不打乱常用字:新字只追加在末尾,原候选顺序纹丝不动,首选位置恒定;
  • 不影响自动上屏:五笔满码自动上屏的判定会排除这些放宽候选,盲打体验不退化;
  • 词频保护:放宽放出来的字即使误选一次,也不会靠调频顶到常用字前面。

为什么选"翻到末页再按翻页"而不是加个热键?因为"已经一路翻到底、常用字里没有我要的"这个动作本身,就是最自然的意图信号。

生僻字管理:从"判定"到"自定义"

过滤的另一个关键问题是:谁算常用字?WindInput 的判定基于内置的《通用规范汉字表》字表——出厂名单收在 data/charsets/common_han.yaml 中,共 8100 余字,按一级、二级、三级汉字排序。

更进一步,WindInput 把"字符集分类"做成了可配置的字符类系统(设计见 docs/design/charset-classification.md):

  • 常用 / 生僻是可覆盖的判定结果:在设置页可以把任意候选(包括 emoji、符号、甚至某个单字)标记为"常用"或"生僻",逐条覆盖优先于整表判定;
  • 字符类可按属性配置:emoji、符号等类别支持设置默认判定、优先级、整类批量操作,还能"外部编辑"导入导出字表文件分享给别人;
  • emoji 用字表而不是区间:避免把0-9 # *这类 keycap 基字符误判成 emoji,也方便 Unicode 升版后无感更新。

词组里的生僻字,出厂"整词放行"

还有一个容易踩的坑:「苯磺酸」这类词库正常收录的词,只因一个"磺"字不在常用表里,就会被整条滤掉。

WindInput 用input.rare_phrase这一独立维度解决它(与filter_mode正交,可任意组合):

# data/config.toml 出厂配置 filter_mode = "smart" # 单字层:按常用度裁剪 rare_phrase = "keep" # 词组层:含生僻字的多字词整词放行

keep(出厂值)的语义是:过滤只作用在单字层,词库收录的多字词照常打得出来。如果你希望"每字都常用才留"的更严格行为,改成filter即可。

小结:干净与完整的平衡术

WindInput 的智能过滤本质上回答了一个输入法的老难题——候选窗怎么既干净又不丢字:

场景WindInput 的做法
日常输入智能档按编码分组滤掉同码生僻字,候选窗干净
找冷门字翻到末页再按一次翻页键,临时放宽、自动恢复
词组含生僻字出厂整词放行,不过度过滤
长期需求设置页逐条/整类标记常用、生僻,自定义字符集分类

核心实现分布在 wind_input/crates/wind-candidate/(过滤逻辑)与 docs/architecture/engine-candidate-pipeline.md(候选后处理管线),如果你感兴趣,可以从这两处继续深挖。默认配置已经是最优解,绝大多数用户开箱即用、无需任何设置。

【免费下载链接】WindInput

清风输入法 | 轻量、快速、可定制的开源中文输入法,专为五笔和码表输入方案设计,支持全拼/双拼(Windows / macOS / Linux)

项目地址:https://gitcode.com/gh_mirrors/wi/WindInput
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询