跳转至

字符集过滤 (Charset Filter):控制生僻字与扩展字符范围

字符集过滤用于控制候选中可显示的汉字范围,在满足日常输入需求的同时,也可以根据需要放行繁体字、生僻字和 Unicode 扩展区字符。

日常输入通常只会使用数千个常用汉字。如果字库中的全部字符都直接参与候选,翻页时可能出现大量低频字、生僻字或设备字体无法正常显示的字符,影响候选查找。

万象拼音默认启用字符集过滤,日常模式主要保留“8105 个通用规范汉字 + 𰻞𰻞(biáng biáng)”等补充字符,并支持根据不同使用场景切换字集范围。


核心交互:切换大小字集

当需要输入生僻字、古籍用字或 Unicode 扩展区字符时,无需修改配置,可以直接通过快捷键切换字符集过滤状态:

大/小字集快捷切换

在输入状态下按下 Ctrl + g,即可在【小字集(日常过滤模式)】与【大字集(全量字集模式)】之间切换。

patch:
  switches/@6/reset: 1   # @6 对应 switches 的第 7 组(charset_filter 字集过滤开关),加入 reset: 1 可默认启用大字集;Base 与 Pro 的排列顺序不同,请根据实际数组从 0 开始确认

字符集标签与底层过滤

万象的字符集过滤并不是简单依赖一个 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 指定的字符集,只要加入这里,也不会显示。

哪些内容会被过滤,哪些可以豁免?

字符集过滤并非对所有候选统一处理,不同来源和候选形态的处理规则有所区别:

  1. 通过根目录 TXT 文件引入的 user_table 类型词条不会被过滤。

  2. 通过固定词库引入的词组,即使其中包含生僻字,也不会被过滤。

  3. 当词组或句子的末尾为生僻字时,如果输入辅助码达到三码形成中间候选,该候选会被字符集过滤,并自动启用兜底结果。 处于兜底状态的候选会在注释中显示 ~,用于与正常候选区分。

  4. 单字候选只要符合当前字符集的过滤条件,一律执行过滤。

配置示例 (Patch):

wanxiang.custom.yaml 字符集微调示例
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,是因为简繁转换会改变字符形态。保留基础字符集可以继续沿用简体候选原有的权重排序,再放行对应繁体字符。

万象字符集过滤:根据输入场景控制常用字、繁体字与扩展字符的显示范围。