小狼毫输入法配置中,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/
...