config.yaml 详解
config.yaml
是汉字自动拆分系统所使用的配置文件,可以由网页 App 生成,也可以自行编写。
info
方案信息(选填)
info.name
方案名称
info.version
方案版本
info.author
方案作者
info.description
方案描述
data
用户自定义数据(选填)
用户对数据的自定义分为新增、打补丁、选择标签三种操作,这些操作都存放在方案文件中。用户不能删除现有的数据。
- 除了字音和字形数据之外,其他数据都是「客观」的,没有自定义的必要,因此不开放接口来自定义;
- 对字音数据的自定义是传入拼音列表覆盖默认的拼音列表,这是为了满足不同方案收录多音字标准、范围不同的需求;
- 对字形数据的自定义是传入一个字形描述,要么是一个部件,要么是一个复合体。因为最终系统使用的字形只能有一个,系统提供多个字形描述只是为了方便选择,因此用户自定义没有必要提供多个。
这个补丁数据的生成方式是:
- 用户在表单中对一个字的字音数据编辑时,将编辑后的拼音列表存储到方案文件中;
- 用户在表单中能够看到一个字的所有预设字形描述。如果用户想要的描述不在第一个,那么可以点击「加载」将某个描述复制到自己的补丁中;如果用户对这这些都不满意,那么可以点击「新建」在补丁中添加一个字形描述。
data.repertoire
汉字自定义(选填)
如果新增,需要提供一个完整的 Character 数据类型。所以,repertoire
是一个字到 Character
类型的 YAML 字典。
用一个列表 glyphs
来存放一个或多个字形描述,每个描述可以是部件也可以是复合体。虽然列表中可能有多个描述,但是在默认情况下,只有第一个会被用到,其余忽略。相反,多个字音数据都会被用到,生成多个不同的编码。
基本部件 BasicComponent,衍生部件 DerivedComponent 和复合体 Compound 的内容是
data.glyph_customization
字形数据自定义(选填)
是一个字到 BasicComponent | DerivedComponent | Compound
的字典。
data.reading_customization
字音数据自定义(选填)
是一个字到拼音列表的 YAML 字典。
data.tags
标签(选填)
从系统已有的标签中选择几个启用
在计算拆分时,按照以下顺序来决定最终选用哪个字形描述:
- 如果用户对当前字有补丁,那么就用补丁中的描述;
- 依次查看用户所启用的标签,若当前字的系统内置描述中有任何一个描述包含了这个标签,就用这个描述,否则继续查看下一个标签;
- 如果所有系统内置描述都没有被标签选中,就用系统内置数据中的第一个。
analysis
拆分(选填)
analysis.classifier
笔画分类(选填)
笔画分类是一个从笔画名称到数字的 YAML 字典。在国家标准中,31 种不同的笔画被分为 5 类,分别用 1, 2, 3, 4, 5 来代表,但是你可以自定义这种分类,比如现代五笔把笔画分成 6 类,相应的写法是
analysis:
classifier:
竖钩: 5
竖提: 6
横折提: 6
竖折: 6
横折折: 6
竖弯: 6
横折弯: 6
竖弯钩: 6
横折弯钩: 6
撇点: 6
撇折: 6
斜钩: 6
横斜钩: 6
这个字典不需要提供所有笔画名称,没有提供的默认按照国标来。
analysis.degenerator
字根认同(选填)
字根认同是判断一个字是否包含一个字根的过程。例如,还有些方案规定相交不拆。这些
---
degenerator:
feature: { 捺: 点, 提: 横 }
no_cross: false
如果不填,默认为以上配置。
analysis.selector
拆分方式筛选(选填)
一个列表,按优先级次序列出拆分规则。可用的拆分规则参见网页版。
---
selector:
- 结构完整
- 根少优先
- 能连不交
- 能散不连
- 全符笔顺
- 取大优先
如果不填,默认为以上配置。
analysis.customize
自定义拆分(选填)
自定义拆分是一个部件到字根的列表的映射。
---
customize:
万: [丆, "5"]
algebra
拼写运算(选填)
拼写运算是一个 YAML 字典,里面存放了自定义的音码元素的生成方式。字典的键为这种生成方式的名字,而值为一个操作的列表。例如
algebra:
双拼声母:
- { type: "xform", from: "^([bpmfdtnlgkhjqxzcsryw]h?|^).+$", to: "$1" }
- { type: "xform", from: "^$", to: "0" }
双拼韵母: [{ type: "xform", from: r`^.*?([aeiouv].*|m|ng?)\d$`, to: "$1" }]
声调: [{ type: "xform", from: r`.+(\d)`, to: "$1" }]
这些操作的含义是从完整的带调拼音来推导出你所需要的音码元素。比如「中」zhong1
在这些生成方式下分别被提取出 zh
, ong
和 1
三个部分。
具体来说,操作分为两种,一种是「变换 xform
」,一种是「转写 xlit
」,它们的含义和 Rime 输入法的拼写运算一样,分别包含一个 from
正则表达式和 to
字符串。
interface Transformation {
type: "xform";
from: string;
to: string;
}
interface Transliteration {
type: "xlit";
from: string;
to: string;
}