小狼毫输入法

小狼毫输入法配置中,speller/algebra通过设置拼写运行,让输入法实现容错简拼模糊拼音等功能。

拼写运算

拼写运算是借助正则表达式实现其字符串处理能力,进一步利用数学知识,构造出建立在输入法编码集合上的代数系统,运算步骤以yaml字符串列表的形式定义,每个列表项描述一项运算,包含基于Perl规范的正则表达式。

  • 转换 /Transliteration
    依次将拼写中<左字符表>的音符替换为<右字母表>对应位置的字符。左、右字母表包含相同数目的Unicode字符。
格式:xlit/<左字母表>/<右字母表>/
实例:xlit/abc/ABC/  运算元:abracadabra  结果:ABrACAdABrA
  • 变形/Transformation
    若拼写字符串与<模式>匹配,则将所匹配的部分改写为<替换式>;否则拼写保持不变。<模式><替换式>遵循Perl正则表达式语法。
格式:xform/<模式>/<替换式>/
实例:算式 xform/^([nl])ue$/$1ve/  运算元:nue  结果:nve
效果:输入 nue(lue) 可以获取源码表中与编码 nve(lve)对应的候选
  • 消除/Erasion
    若拼写与<模式> 完全匹配,则将该拼写从有效拼写集合中消除。
格式:erase/<模式>/
实例:算式 erase/^.*d$/  运算元:dang1  结果:带声调的拼音不可用
  • 派生/Derivation
    若对拼写做正则模式匹配、替换而获得了新的拼写,则有效拼写集合是包含派生前后的拼写;否则仅保留原拼写。
格式:derive/<模式>/<替换式>/
实例一:算式 derive/^([nl])ue$/$1ve/  运算元:nue  结果:nve
效果:输入nve或nue(lve或lue) 均可获得源码表中与编码 nue(lue) 对应的候选

实例二:算式 derive/^[nl](.*)$/l$1/  运算元:na  结果:la
效果:输入la可获取源码表中与编码na、la对应的候选;输入na,候选仍为码表中编码为na的候选
  • 模糊/Fuzzing
    执行派生运算;派生出的拼写将获得「模糊」属性,可设定将其用作构成词组的简码,但不用与输入单字。
格式:fuzz/<模式>/<替换式>/
实例:算式 fuzz/^([a-z]).+([a-z])$/$1$2/
效果:以首、尾码为多字母音节码的构词码。
注:需配合 script_translator 的选项 `translator/strict_spelling: true` 方可限定该拼写不用于输入单字。
  • 缩略/Abbreviation
    执行派生运算,派生出的拼写将获得「缩略」属性,会在音节切分时与通常的拼写做区分处理。
格式:abbrev/<模式>/<替换式>/
实例:算式 abbrev/^([a-z]).+$/$1/
效果:以首字母为多字母音节码的缩写。

例子

例1:朙月拼音(luna_pinyin.schema.yaml),定义简拼、容错拼写。

....
speller:
  algebra:
    - abbrev/^([a-z]).+$/$1/          # 简拼(首字母)
    - abbrev/^([zcs]h).+$/$1/         # 简拼(zh, ch, sh)
    - derive/^([nl])ve$/$1ue/         # 设 nue = nve, lue = lve 
    - derive/ui$/uei/                 # 设 guei = gui,...
    - derive/iu$/iou/                 # 设 jiou = jiu,...
    - derive/([aeiou])ng$/$1gn/       # 容错 dagn = dang,...
    - derive/ong$/on/                 # 容错 zhonguo = zhong guo
    - derive/ao$/oa/                  # 容错 hoa = hao,...
    - derive/([iu])a(o|ng?)$/a$1$2/   # 容错 tain = tian,...
....

例2:在拼音输入法中定义模糊音zh=z, ch=c, sh=s, n=l, en=eng, in=ing

...
speller:
  algebra:
    - derive/^([zcs])h/$1/
    - derive/^([zcs])([^h])/$1h$2/
    - derive/^n/l/
    - derive/^l/n/
    - derive/([ei])n$/$1ng/
    - derive/([ei])ng$/$1n/
    # 模糊拼音先于简拼,可令简拼支持模糊拼音
    - abbrev/^([a-z]).+$/$1/
    - abbrev/^([zcs]h).+$/$1/
...
原文地址:https://www.cnblogs.com/lqqgis/p/13846504.html