字符集过滤 (Charset Filter):控制生僻字与扩展字符范围
字符集过滤用于控制候选中可显示的汉字范围,在满足日常输入需求的同时,也可以根据需要放行繁体字、生僻字和 Unicode 扩展区字符。
日常输入通常只会使用数千个常用汉字。如果字库中的全部字符都直接参与候选,翻页时可能出现大量低频字、生僻字或设备字体无法正常显示的字符,影响候选查找。
万象拼音默认启用字符集过滤,日常模式主要保留“8105 个通用规范汉字 + 𰻞𰻞(biáng biáng)”等补充字符,并支持根据不同使用场景切换字集范围。
核心交互:切换大小字集
当需要输入生僻字、古籍用字或 Unicode 扩展区字符时,无需修改配置,可以直接通过快捷键切换字符集过滤状态:
大/小字集快捷切换
在输入状态下按下 Ctrl + g,即可在【小字集(日常过滤模式)】与【大字集(全量字集模式)】之间切换。
字符集标签与底层过滤
万象的字符集过滤并不是简单依赖一个 charset.dict.yaml 字表,而是通过二进制字符集数据库 charset_reverse.bin 对不同字符进行分类标记。
每个汉字可以对应一个或多个字符集标签,过滤器根据当前配置中的标签组合决定字符是否保留。
汉字字符集标签 (Tag) 说明
万象内部按照不同标准划分了多组字符集标签,可以根据需要组合使用:
-
规范与常用字符:
a(通用规范汉字表 8105 字)、b(GB2312)、g(GBK) -
简繁与港台字符:
T(Big5 台港澳常用)、j(OpenCC 简体)、f(OpenCC 通用繁体)、h(OpenCC 香港繁体)、t(OpenCC 台湾繁体) -
Unicode 字符区:
u(基本区 U+4E00-U+9FFF)、A-I(各扩展区,支持至 Ext-I)、c(兼容区)
多状态联动与字符集求并集
字符集过滤可以与简繁转换等开关共同工作。
例如,当切换到 s2hk(香港繁体)模式时,如果仍然只按照日常简体字集进行过滤,一些转换后的香港繁体字符可能因为不属于基础字集而被过滤。
为避免这种情况,万象会根据当前启用的选项组合对应字符集。
以 s2hk 为例,可以将基础字符集 a 与香港繁体字符集 h 组合为 ah。这样既保留基础字符范围,也允许香港繁体转换产生的对应字符通过过滤,而其他不属于当前字符集范围的字符仍然保持过滤状态。
如何通过 Patch 调整字符集?
如果某个常用字符不在当前基础字集中,导致开启过滤后无法正常候选;或者需要调整不同简繁模式下允许显示的字符范围,可以在 wanxiang.custom.yaml 中修改字符集配置。
参数说明:base、addlist 与 blacklist
-
base:指定需要调用的字符集标签。支持组合多个标签,例如aj表示同时使用通用规范汉字表与 OpenCC 简体字符集。 -
addlist(白名单):额外允许通过过滤的字符。即使字符不属于base指定的字符集,只要加入这里,也可以正常显示。 -
blacklist(黑名单):强制过滤指定字符。即使字符属于base指定的字符集,只要加入这里,也不会显示。
哪些内容会被过滤,哪些可以豁免?
字符集过滤并非对所有候选统一处理,不同来源和候选形态的处理规则有所区别:
-
通过根目录 TXT 文件引入的
user_table类型词条不会被过滤。 -
通过固定词库引入的词组,即使其中包含生僻字,也不会被过滤。
-
当词组或句子的末尾为生僻字时,如果输入辅助码达到三码形成中间候选,该候选会被字符集过滤,并自动启用兜底结果。 处于兜底状态的候选会在注释中显示
~,用于与正常候选区分。 -
单字候选只要符合当前字符集的过滤条件,一律执行过滤。
配置示例 (Patch):
patch:
# 注意:这里会覆盖原有的 charset 列表,请确保保留需要使用的联动开关
charset:
# 1. 主控开关:日常小字集模式
- option: charset_filter
base: a # 调用标签 a(通用规范汉字表)
addlist: # 白名单:补充常用但不在基础字集中的字符
- "诶濛硷氽尛躝〇冇吔磺咗囧屌鲶芶咲畑垅𰻝𰻞龍朙頔雲"
blacklist: [] # 黑名单为空
# 2. 联动开关:通用繁体模式
- option: s2t
base: af # 开启 s2t 时,同时使用标签 f(通用繁体)
addlist: []
blacklist: []
# 3. 联动开关:香港繁体模式
- option: s2hk
base: ah # 开启 s2hk 时,同时使用标签 h(香港繁体)
addlist: []
blacklist: []
# 4. 联动开关:台湾繁体模式
- option: s2tw
base: at # 开启 s2tw 时,同时使用标签 t(台湾繁体)
addlist: []
blacklist: []
各联动模式中保留标签 a,是因为简繁转换会改变字符形态。保留基础字符集可以继续沿用简体候选原有的权重排序,再放行对应繁体字符。