Skip to content

使用 “u” 键引导全拼反查(以四叶草拼音为例)

Xuesong edited this page May 16, 2023 · 1 revision

前提条件

简体中文拼音方案

因为键道的词库使用的是简体中文,所以全拼反查使用的拼音词库也需要是简体词库。小狼毫、鼠须管自带的明月拼音、地球拼音都是繁体中文,不适用键道的反查。这里用四叶草拼音为例,也可以使用雾凇拼音、袖珍简化字等方案。

小狼毫、鼠须管需要自行导入简体拼音方案,如果是仓输入法则自带四叶草拼音。

补丁机制

具体教程可参考 Rime 官方 wiki。简单来说,就是把修改的内容以补丁的形式放到 xkjd6.custom.yaml 文件里,而非直接修改 xkjd6.schema.yaml。这样的好处是,键道官方更新了配置的时候,可以直接覆盖更新,无需手动检查和备份自己的配置。

具体配置

在 Rime 的用户文件夹里新建或找到 xkjd6.custom.yaml 并编辑,加入以下内容:

patch:
  schema/dependencies:
    - clover
  engine/translators/+:
    - reverse_lookup_translator
  recognizer/patterns/+:
    reverse_lookup: "^u[a-z]*'?$"
  reverse_lookup:
    dictionary: clover
    prefix: "u"
    suffix: "'"
    tips: "〔全拼〕"
    preedit_format:
      - xform/^u(.+)/$1/
      - xform/([nl])v/$1ü/
      - xform/([nl])ue/$1üe/
      - xform/([jqxy])v/$1u/
    comment_format:
      - xform/^/〔/
      - xform/$/〕/
      - xform/ /, /

需要注意的是,如果你已经有这个文件,并且添加过内容,请确保添加的时候符合 yaml 的语法。

详细解释

如果有不明白的,请首先参考补丁机制

Rime 配置的补丁通常会把要修改的配置放到 patch 下面,其他所有的项都带有缩进。

依赖配方

  schema/dependencies:
    - clover

上面的配置是为键道配方加上四叶草作为依赖配方,其中 schema一级设定项dependencies二级设定项,设定项后直接跟冒号表示替换掉整个这一级的配置。比如在这里就是替换了整个 dependencies 这个配置。不过键道官方是没有这个配置的,所以效果就是新增了这个配置。

这个 dependencies 配置是一个列表,列表的子项用减号和一个空格作引导,- clover 表示这个列表只有一项,也就是四叶草配方。

添加反查翻译器项

  engine/translators/+:
    - reverse_lookup_translator

上面两行配置是为键道配方新增了翻译器。同样地,engine一级设定项translators二级设定项,设定项和冒号之间有斜线和加号(/+)表示以下的配置和原有的设定项进行合并,可以是列表的合并,也可以是字典的合并。在这里是列表的合并,对于键道来说,合并后就变成了:

engine:
  # 其他设定省略
  translators:
    - punct_translator
    - table_translator@custom_phrase
    - table_translator
    - history_translator@repeat_history
    - lua_translator@date_time_translator
    - reverse_lookup_translator # 我们新增的翻译器
  # 其他设定省略

这里的 reverse_lookup_translator 是 Rime 内置的一个特殊的翻译器,是专门用来反查的,这个服役器会读取 reverse_lookup 这个一级设定项的具体配置(见反查翻译器配置),其中包含了应该去查找的词典名。在打字的时候,这个翻译器只会对特定字段起作用,在这里这个特定字段是被打上 "reverse_lookup" 这个标签(tag)的字段。如果有这样的字段,翻译器会去查找设定中的词典,并根据配置修改对应候选的注释和预编辑文本。

添加识别器模式

  recognizer/patterns/+:
    reverse_lookup: "^u[a-z]*'?$"

识别器 recognizer一级设定项,是 Rime 内置的一个处理器(processor);模式 patterns二级设定项,描述了识别器应该识别哪些模式,并打上标签(tag)。这里同样使用了追加的写法,表示下面的内容和原有的 patterns 内容合并。

这个 patterns 是一个字典,reverse_lookup: "^u[a-z]*'?$" 是我们新增的字典项,字典用冒号分隔 keyvalue。这里的 "^u[a-z]*'?$" 是一个正则表达式,简单来说就是以字母 "u" 开头的拼写,末尾可能有也可能没有单引号 "'"。

在打字的时候,recognizer 这个处理器会把符合模式 "^u[a-z]*'?$" 的字段打上 "reverse_lookup" 的标签。这样一来,前面提到的翻译器就会翻译这个字段。

反查翻译器配置

最后就是比较复杂的反查翻译器的配置了。

  reverse_lookup:
    dictionary: clover
    prefix: "u"
    suffix: "'"
    tips: "〔全拼〕"
    preedit_format:
      - xform/^u(.+)/$1/
      - xform/([nl])v/$1ü/
      - xform/([nl])ue/$1üe/
      - xform/([jqxy])v/$1u/
    comment_format:
      - xform/^/〔/
      - xform/$/〕/
      - xform/ /, /

reverse_lookup 这个一级设定项是 Rime 内置的一个翻译器。dictionary: clover 指定了反查翻译器使用的词典,注意是词典名称,不一定是配方名称,可以在 build 文件夹下找到名为 xxx.table.binxxx.prism.bin 这样的文件,其中 xxx 就是词典的名称。

prefix: "u" 表示使用字母 "u" 引导,在反查的时候,翻译器会忽略引导的字符再查找词典,例如输入字段为 "uzhuang",翻译器会用 "zhuang" 去查找拼音词典,而不是用 "uzhuang"。suffix: "'" 表示用单引号 "'" 结束,用来隔开反查字段和其他字段,在非语句流的配方中好像没什么用(如果有错误请修改这里)

tips: "〔全拼〕" 表示在反查的时候会在预编辑文本处显示 "〔全拼〕" 作为提示,可以修改为其他内容。

图片

    preedit_format:
      - xform/^u(.+)/$1/
      - xform/([nl])v/$1ü/
      - xform/([nl])ue/$1üe/
      - xform/([jqxy])v/$1u/

上面的几行表示修改预编辑文本,应用了以下规则

  • xform/^u(.+)/$1/: 隐藏开头引导用的字母 "u"
  • xform/([nl])v/$1ü/ 拼音里的 "nv" 和 "lv" 显示为 "nü" 和 "lü"
  • xform/([nl])ue/$1üe/ 拼音里的 "nue" 和 "lue" 显示为 "nüe" 和 "lüe"
  • xform/([jqxy])v/$1u/ 拼音里的 "jv", "qv", "xv", "yv" 显示为 "ju", "qu", "xu", "yu"

最后是反查结果的提示:

    comment_format:
      - xform/^/〔/
      - xform/$/〕/
      - xform/ /, /

反查翻译器查找到词典里的词后,会在注释里加上本配方(键道)词典的拼写,如果有多个拼写就用空格隔开。理论上不加这几行就可以用了,这几行的作用就是在注释的开头加上左括号 "〔",结尾加上右括号 "〕",空格都改为逗号。