Skip to content

琼林撷英:中文输入法常用概念术语

〔朱宇浩于乙巳年闰六月十一日〕

自当代中文输入法肇基以来,四十余年间,其相关概念曾随时间和技术的发展而变化,亦不断融合传统文化、统计学、现代计算机科学等专业术语。部分名词的定义会偏离其在原学科中的严格定义;部分概念会有多种不同的定义方式;同一名词在不同的语境下或有不同指代。这些都可能会造成学习和交流上的困难。

为了更好地理解输入法的工作原理和相关概念,方便不同输入法之间的交流和学习,本文采用输入法文献和同好圈中比较通行、常用、一致的术语和定义,将其作为行业最佳实践,并在必要时附上例子、辨析和总结。祈可促进输入法相关概念的学习、理解和交流。

1. 方案类型

1.1. 拼音输入法

「拼音输入法」,又称「字音输入法」「音码输入法」「拼音」「音码」等,是指通过输入汉字的读音来确定候选字范围的输入法。这类输入法通常基于某类拼音系统,如汉语拼音、注音、方言拼音、音标等。

纯粹的音码(纯音),不依赖除读音外的其他信息来确定候选字的范围。也就是说,当出现一个新汉字时,只要知道它的读音,就可以确定它的完整编码。

方案举例

全拼输入法,双拼输入法、注音输入法,方言拼音输入法。

1.2. 字形输入法

字形输入法,又称「形码输入法」「形码」等,是指通过输入汉字的字形特征来确定候选范围的输入法。这类输入法通常基于汉字的某类形态特征,如部首、笔划、结构等。

纯粹的形码(纯形),不依赖除字形外的其他信息来确定候选字的范围。也就是说,当出现一个新汉字时,只要知道它字形特征,就可以确定它的完整编码。

方案举例

笔划输入法(笔划)、四角号码输入法(特征)、五笔字形输入法(部首、结构)、仓颉输入法(部首、特征)。

1.3. 音形输入法

音形输入法,又称「音形码」,是指通过同时输入汉字的读音和字形特征来确定候选字范围的输入法。读音对应的编码在前,字形对应的编码在后。

音形输入法以音为主,以形为辅,部分情况下字形的部分只作为补充信息而被省略。

当出现一个新汉字时,只知道汉字的读音或字形特征,无法保证能够确定它的完整编码。

方案举例

自然码辅助码、小鹤双形、声笔飞码。

1.4. 形音输入法

形音输入法,又称「形音码」,是指通过同时输入汉字的字形特征和读音来确定候选字范围的输入法。字形对应的编码在前,读音对应的编码在后。

形音输入法以形为主,以音为辅,部分情况下字音的部分只作为补充信息而被省略。

当出现一个新汉字时,只知道汉字的读音或字形特征,无法保证能够确定它的完整编码。

方案举例

米十五笔、字源输入法。

1.5. 混合码输入法

混合编码输入法,是指一个汉字会使用两种或以上的编码方式。比如一个汉字既可以通过纯音方式输入,也可以通过纯形方式输入,也可以通过音形方式输入,也可以通过形音方式输入。

大部分的音形输入法或形音输入法都属于混合输入法。它们会提供两种及以上的编码方式,并在部分情况下会回退为纯音或纯形输入法。

方案举例

两分输入法(大字集形码递归)

1.6. 无理码输入法

无理码输入法,是指输入的编码无法直接对应到汉字的读音或字形特征。每个汉字的编码都需要特殊记忆。

方案举例

电报码,Unicode万国码。

2. 文字相关

2.1. 单字

单字,是指一个汉字或广义的字符。

一般地,我们只关注单个汉字的情况。

2.2. 词语

词语,是指由一个或多个单字组成的具有一定语义的语言单位。

广义的「词语」包含两种情况:

  1. 单字词:是指由单个汉字组成的词语,比如「汉」。
  2. 多字词:是指由两个或多个汉字组成的词语,比如「汉字」。

狭义的「词语」只指多字词。

2.3. 字频

字频,又称「汉字频率」,是指某个汉字在语料库中出现的频率。

字频通常用来衡量某个汉字或词语的常用程度。

辨析

字频是基于语料库统计的结果。依据语料库选取的文本类型、题材、语言风格、时间段、地域、用字习惯等不同,字频的统计结果可能会有所不同。

比如,使用文言文语料库统计的字频,「之」「乎」「者」等字的频率较高,而使用现代白话文语料库统计的字频,「的」「了」「在」等字的频率较高。

使用大陆地区的语料库统计的字频,简化字的频率较高,而使用香港、台湾地区的语料库统计的字频,繁体字的频率较高。

使用报纸、书籍、网络文章等不同类型的语料库统计的字频,可能会有较大差异。

举例

以下是一些常见的字频统计数据:

  1. 北京师范大学邢红兵的 《25 亿字语料汉字字频表》:反映了大陆地区现代汉语的字频情况,用字较为正式官方。基本简化字为主,有部分繁体字出现。
  2. 笔者的统计的《六亿知乎语料通规汉字字频表》:一、其具有非官方性质,宣传用语较少,贴近普通人生活。二、其具有社交性质,社交用语较多,贴近社交媒体生活。三、其语料质量较高,语言偏书面,且反映了一定的科学、文化、艺术基础。
  3. 台湾地区教育部门的《字频总表》:反映了台湾地区的现代汉语字频情况,全部为繁体字。

2.4. 词频

词频,又称「词语频率」,是指某个词语在语料库中出现的频率。

词频通常用来衡量某个词语的常用程度。

辨析

词频是基于语料库统计的结果。依据语料库选取的文本类型、题材、语言风格、时间段、地域、用字习惯等不同,词频的统计结果可能会有所不同。

只包含多字词词频的数据,不能反映多字词的实际频率,它是一种条件概率。这是因为多数文本无法被多字词完全分割。

只包含多字词词频的数据,可以反映多字词的相对常用程度。

2.5. 字集

字集,又称「汉字集」「字符集」,是指汉字或字符的集合。

辨析

字集的选取不一定反映汉字的常用程度。

2.5.1. GB2312

GB2312,又称《信息交换用汉字编码字符集(简体中文)》,是中国大陆于1980年颁布的汉字编码标准。它包含6763个常用汉字和682个符号,主要用于简体中文。

2.5.2. 通用规范汉字表

《通用规范汉字表》,是中国大陆于2013年颁布的汉字标准。它包含8105个常用汉字,主要用于简体中文。

2.5.3. GBK

GBK,又称《汉字内码扩展规范(GBK)》,是中国大陆于1995年颁布的汉字编码标准。它包含21003个汉字,包含简体和繁体字,为历史字集。

2.5.4. GB18030

GB18030,又称《信息技术 中文编码字符集》,是中国大陆于2000年颁布的汉字编码标准。当前标准为GB18030-2022。

2.5.5. 中日韩统一汉字CJK

CJK,又称《中日韩统一汉字》,是Unicode万国码中定义的汉字集。它包含了常用字和生僻字,并且分为若干个扩展区域,总计包含10万左右的汉字。

2.6. 常用字

常用字,又称「常用汉字」「常用字集」,是指在某一特定语境下,经常使用的汉字集合。常用字集通常是基于某一类通用的字形标准或者某一类语料库统计的结果。

辨析

常用字是一个泛用概念,没有唯一标准。一般而言,常用字集约等于通用规范汉字表中的汉字,或者是字频较高的汉字。对于常用字的选取,一般是字频前1500, 3000, 6000字。

2.7. 高频字

高频字,又称「高频汉字」「高频字集」,是指在某一特定语境下,出现频率较高的汉字集合。

辨析

高频字是一个泛用概念,没有唯一标准。相对而言,高频汉字较常用字集更小。一般是指字频前500, 1500, 3000的汉字。

2.8. 传承字

传承字,又称「传承汉字」,是指未经过简化的汉字集合。

辨析

「一」「二」「三」「天」「人」等字,在系统性简化中没有发生变化,因此它们是传承汉字。

2.9. 简化字

简化字,又称「简化汉字」「简体字」,是指经过中国大陆五十年代起进行的系统性简化而发生变化的汉字集合。

辨析

  • 「一」「二」「三」「天」「人」等字,在系统性简化中没有发生变化,因此它们不是简化字。
  • 「强」虽然是中国大陆标准汉字,但它不是由简化而来的,因此它不是简化字。

2.10. 简体字

简体字,根据语境,有两种含义:

  1. 狭义的简体字,等同于简化字。
  2. 广义的简体字,包括简化字和传承字,也可指代当前中国大陆使用的文字体系。可以等同于「简体中文」。

辨析

见到一个人 中有两个简化字,三个传承字,其对应的传统写法为 見到一個人。广义上,我们可以说这五个字都是简体字(简体中文);狭义上,我们只认为「见」「到」「个」是简体字。

2.11. 繁体字

繁体字,又称「繁体汉字」,有两种含义:

  1. 狭义的繁体字,指的是简化字对应的未简化形态的汉字集合。
  2. 广义的繁体字,包括未系统性简化的汉字和传承字,也可指代古代中国、当代台湾、香港、澳门等地区使用的文字体系。可以等同于「繁体中文」。

辨析

見到一個人这五个字,狭义上,我们认为 是繁体字;广义上,我们可以说这五个字都是繁体字(繁体中文)。

2.12. 传统字

传统字,又称「传统汉字」,是指未经过系统性简化的汉字集合。

辨析

传统汉字约等同于当前香港、台湾、澳门等地区使用的汉字体系。但也可以表示中国古代的汉字体系。

2.13. 新旧字

新旧字,又称「新旧字形」,指的是二十世纪中旬,由于印刷技术的发展和变化导致的印刷字体的字形差异。

辨析

新旧字形的选取,根据地区和时间有所不同。相对地,韩国标准汉字更接近于旧字形,而大陆和台湾标准汉字更接近于新字形。

比如,是旧字形,是新字形。它们的字形不同,但含义相同。

2.14. 正体字

正体字,又称「正体汉字」,是指一个时期一个地区的标准化汉字集合。

辨析

正体字表达了官方和正统的意识形态,因此它的定义同汉字标准出台的地区有关,它并不专门指代某固定的汉字标准。

2.15. 俗体字

俗体字,是指经常使用的非标准化汉字集合。这些字可能是由于历史演变、避讳文化、地域差异、个人习惯等原因而形成的。民间自发的简化字、缺笔字、错别字等都属于俗体字。

2.16. 异体字

异体字,是指具有相同或相近含义,但写法不同的汉字集合。

  1. 狭义的异体字,不包括对应的正体字。
  2. 广义的异体字,包括对应的正体字,也就是说这些字互为异体字。

辨析

襍``雜为一组异体字。

2.17. 异写字

异写字,是指字形上差异较小的异体字。

辨析

峰``峯为一组异写字。

2.18. 生僻字

生僻字,又称「生僻汉字」「生僻字集」,是指在某一特定语境下,出现频率较低的汉字集合。

2.19. 大字集

大字集,指的是包含非常用汉字和生僻字的字集。

举例

大字集包括GBK、GB18030、CJK等。

2.20. 全字集

全字集,又称「全汉字集」「全字符集」,是指包含所有已经统一和规范化的汉字的集合。在输入法领域,一般代指中日韩统一汉字CJK中非兼容区的所有汉字。

2.21. 全字集输入法

全字集输入法,又称,是指可以输入全字集中的所有汉字的输入法。这类输入法通常基于某类全字集编码系统,如GB18030、Unicode等。

2.22. 词库

词库,指的是一个输入法中包含的所有词语的集合。

3. 编码相关

本节中,「汉字」可以是单个汉字,也可以是词语或短语,也可以是任何其他的字符。

3.1. 编码

编码,指的是一串字符序列,包括字母、数字、符号等。它们会对应到一个或多个汉字。

3.2. 编码字符集合

编码字符集合,又称编码字符空间,指的是某一个输入法所使用的所有编码字符的集合。

举例

  1. 五笔字形的编码集合为 a-y 的 25 个字母。
  2. 冰雪清韵的编码集合为 a-z 的 26 个字母,加上 ;,./ 4个符号,共30个字符。

3.3. 码位

码位,又称「编码位置」,指的是一个输入方案中的一个合法的编码,也就是说它是按照此输入法的编码规则可以取到的编码。

举例

五笔字形的编码字符集合包括a-y的25个字母,且它的最长编码长度为 4,因此它的码位是任何四个a-y字母的组合。比如 abcdefghijkl 等。

3.4. 编码空间

编码空间,又称「码位空间」「编码集合」,指的是一个输入法中所有合法编码的集合。

编码空间中元素的个数称为「编码空间大小」。

举例

全拼输入法:编码空间包括所有合法的汉语拼音不带调音节,如 pianxianhao 等。pian 是合法的编码,而 pianx 则不是合法的编码。因此全拼的编码空间不包括 pianx。它的编码空间大小约为 400 左右。

宇浩星陈方案:第一码为a-y的25个字母,其余编码为a-z的26个字母,最大码长为4,因此它的编码空间大小为 25×263=1757600

宇浩日月方案:末码必须以aeiou等元音字母结尾或者达到最大码长5,韵码前可以有若干辅音字母,首码不得为z,故而编码空间大小为:

5+520i=1321i+20214=4862025

3.5. 编码分割

编码分割,又称编码分离,是指输入法在输入时,将连续的编码字符串分割若干合法的编码(这些编码需在编码空间中)。

3.6. 分割符

分割符,指的是用于分割编码的字符,它们往往不属于某输入方案的编码集合。使用分割符可以帮助输入法将连续的编码无歧义地分割成若干部分。

3.7. 理论编码和实际编码

理论编码,指的是输入法在设计时所定义的编码方式。

实际编码,指的是用户在使用输入法时实际输入的编码。有时候,为了消除歧义,实际编码会与理论编码有所不同,比如使用额外的分隔符。

举例

「西安」在全拼输入法中的的理论编码为 xian,实际编码可能是 xian(不进行手工分割),也可能是 xi'an(使用了单引号作为分隔符)。

3.8. 码长

码长,又称「编码长度」,指的是某输入法中,某一汉字或词语的编码字符的数量。码长分为两类:

  1. 理论码长:指的是输入法在设计时所定义的编码方式的最大长度。
  2. 实际码长:指的是用户在使用输入法时实际输入的编码字符的数量。由于需要唯一确定某个汉字,用户需要额外输入分割符、确定符、选重符等字符,因此实际码长可能会大于理论码长。

3.9. 平均码长

平均码长,是指某输入法中,输入一个汉字或字符所需要的平均实际编码长度。

一般地,当输入方案作为修饰词时,「平均码长」可以简称为「码长」。

辨析

形码输入方案中,为了消除歧义,往往需要在实际编码后添加分隔符号(如空格键)或者选重复号。因此,平均码长通常大于理论码长。为较为精确地计算平均码长,一般会采取以下手段:

  1. 在未达到最大码长的情况下,为编码码长添加1。
  2. 在出现重码的情况下,为非首选项的编码码长添加1。
  3. 在出现标点且不需要选重的情况下,不需要添加额外码长。

3.10. 编码属性

3.10.1. 分割唯一

分割唯一,是指输入法在输入时,可以将连续的编码分割为一种且唯一的方式,而不出现歧义。

举例

假定空格键是分割符号,则输入连续编码 ni hao shi jie 时,编码会被分割为 ni hao shi jie 四个部分,并且分割方式是唯一的。

3.10.2. 分割不唯一

分割不唯一,是指输入法在输入时,连续编码可以被分割为多种合法的编码组合,从而有可能产生歧义。具体的分割方法有可能会依赖于上下文或其他信息(联想)。

举例

连续编码 nihaoshijie 时,编码可能会被分割为 ni hao shi jie 四个部分,也可能被分割为 ni hao shi ji e 五个部分。两种分割方法都是合法的。

3.10.3. 前缀码

前缀码,又称前置码,前缀无关码。是指任何一个汉字的编码都不是任何其他汉字编码的前若干码。

前缀码的编码分割是内向性的,也就是说当前编码自身可以确定它的结束,而不需要看到下一个有效编码。

前缀码通常是末尾固定位置若干码和其他编码在不同的编码字符集合中的编码的前若干码。

例如,假设存在两个编码字符集AB,它们的交集为空集,则前缀码的一类编码形态为:B, AB, AAB, AAAB, AAAAB,以此类推。如此,观察到B集合的字符时,便可以确定当前汉字编码的结束。

另一类编码形式为:BBA, ABBA, AABBA, AAABBA,以此类推。如此,观察到BBA模式时,便可以确定当前汉字编码的结束。

辨析

如果一个方案中所有的编码都是以空格键结尾的,且空格键只作为结尾,则它具有前缀码属性。

前缀码具有分割唯一属性。

任何定长码或变长码,如果在其编码后附加额外的分隔符号(如空格),则其编码具有前缀码属性。

举例:一个前缀码方案中,「日」的编码为ri,则不存在任意一个字,它的前两码是ri

方案举例

注音输入法:如大千注音输入法。由于注音符号的最后一码是声调符号,被分配在一个单独的编码字符集合中,因此它具有前缀码属性。

带调拼音输入法:如地球拼音输入法。由于拼音的最后一码是声调符号,被分配在一个单独的编码字符集合中,因此它具有前缀码属性。

宇浩日月:纯形码。将字根的最后一码设计为字根元音在五个元音字母aeiou上的映射,这样当出现元音字母时,就可以确定当前编码的结束。

松烟:纯形码。将字根的最后一码设计为集合aeiouv中的字母,这样当出现该集合字母时,就可以确定当前编码的结束。

3.10.4. 顶功码

顶功,是指一类可以通过匹配后续汉字编码字符集合的组合模式而达到唯一编码分割的编码方式。

顶功码的编码分割是外向性的,也就是说需要看到下一个汉字的有效编码才能确定当前编码的结束。

顶功码的任意数量的编码模式的贯序连缀,不可以等同于其他任意数量的编码模式的贯序连缀。

辨析

顶功码具有分割唯一属性。

顶功码不是前缀码。

「顶功」的「顶」字可以表现出它的外向性,通过匹配后续编码的模式确定前序汉字编码的结束,从而将前续汉字「顶」上屏幕。同时,「顶」字也表达出了**延迟上屏(顶字上屏)**的属性。

部分编码分割可能同时展现出前缀(内生分隔)和顶功(外生分割)的特征。但由于顶功的编码分割是外向性的,在排除顶功前,无法确定当前编码是当前汉字的编码还是前序汉字的后续编码。因此,顶功属性高于前缀属性,此类输入法依旧是顶功码。

举例一:某方案中,一个汉字的第一个编码,被设计为左手的按键,而剩余的编码被设计在右手上。这样的编码是否具有顶功属性?

这样的编码方式具有顶功属性。因为每当看到左手的按键时,就可以确定这是一个新汉字的开始码。

举例二:某方案中,一个汉字的前两码都是辅音字母,而剩余的编码是元音字母 aeiou。这样的编码是否具有顶功属性?

这样的编码方式具有顶功属性。因为每当看到两个辅音字母时,就可以确定这是一个新汉字的开始码。否则,它永远都是前一个汉字的后续码。

举例三:某方案中,一个汉字的编码要么是两个的字母,要么是三到四个字母加上一个空格键。这样的编码是否具有顶功属性?

这样的编码方式同时具有前缀码和顶功属性。如果出现了连续四个字母,则观察第五码,如果它是空格键,则这是一个五码字的结束(四个字母加一个空格键)。如果第五码不是空格键,则其前两码构成一个两码字。

这种情况,我们需要往前看三码方能判断编码的分割情况。这个方案称为「五二顶」,也就是观察第五码来判断前两码是否可以唯一分割并上屏。

由于在第五码之前,无法确定当前编码是当前汉字的编码还是前序汉字的后续编码,因此这个方案应归为顶功码。

方案举例

逸码:纯形码,顶功码。前两码的编码的字符集合为A,后续编码的字符集合为B,且AB的交集为空集。编码模式包括:AA, AB, AAB, ABB, AABB, ABBB, AABBB, ABBBB 等。因为任意数量编码模式连缀非其他任意数量编码模式连缀,故而具有顶功属性。衹要出现BA模式,就可以确定前序汉字编码的结束。

C42输入法:形音码,顶功码。编码模式为:AA, AAAB 等。因为任意数量编码模式连缀非其他任意数量编码模式连缀,故而具有顶功属性。由于AAAAAB的前缀,故而不是前缀码。 部分编码分割呈现前缀码和顶功码特征:衹要出现B模式,就可以确定本汉字编码的结束;衹要出现AAAA模式,就可以确定前序汉字编码的结束。

徐码五二顶:纯形码,顶功码。编码模式为:AA, AAAB, AAAAB 等。因为任意数量编码模式连缀非其他任意数量编码模式连缀,故而具有顶功属性。由于AAAAAB的前缀,故而不是前缀码。 部分编码分割呈现前缀码和顶功码特征:衹要出现B,就可以确定本汉字编码的结束;衹要出现AAAAA模式,就可以确定前序汉字编码的结束。

关于更多顶功方面的相关信息和相关方案,请移步《顶功集萃》。

3.10.5. 定长

定长,指的是每个汉字的编码最大长度固定。也就是说,无论输入什么汉字,编码的最大长度都是一样的。当出现一个新的汉字时,它的最大长度是确定的。

辨析

定长码不一定具有「分割唯一」的属性。

定长码通过添加分隔符号(如空格),可以在实际编码中达到「分割唯一」的属性。

方案举例

五笔字形:全码最短编码长度为3,最长编码长度为4。 仓颉:全码最短编码长度为1,最长编码长度为5。 宇浩日月:全码最短编码长度为2,最长编码长度为5。前缀码,兼具前缀特征和定长特征。

3.10.6. 绝对定长

绝对定长,是指编码的长度在所有情况下都是固定的。也就是说,无论输入什么汉字,编码的长度都是一样的。

方案举例

双拼输入法。

辨析

绝对定长码具有「分割唯一」的属性。

3.10.7. 变长码

变长码,又称「不定长码」,指的是编码长度不固定的输入法。也就是说,输入不同的汉字,编码的最大长度可能会有所不同。当出现一个新的汉字时,它的最大长度是不确定的。

方案举例

笔划输入法、山人全息码。

辨析

变长码不一定具有「分割唯一」的属性。

变长码通过添加分隔符号(如空格),可以在实际编码中达到「分割唯一」的属性。

4. 方案相关

4.1. 拆分

拆分,是指字形输入法中,根据若干预设规则,将一个汉字分解为若干部件的有序组合的过程。

拆分不一定是唯一的。也就是说,对于同一个汉字,可能存在多种不同的拆分方式。

拆分不一定是覆盖的。也就是说,拆分后的部件不一定能完全覆盖汉字的所有特征。

4.2. 拆分规则

拆分规则,是指将汉字拆分为若干部件的具体方法。一般而言,拆分规则包含若干排除规则和优先级,将所有的拆分可能的序列进行排序,并选择最优的拆分序列。

常见的拆分原则有:

  • 笔顺:按照汉字的笔顺进行拆分,字根的笔划顺序与汉字的笔划顺序一致。
  • 根少:选择拆分后的字根数量最少的拆分方式。
  • 分散:选择拆分后字根分散的拆分方式。
  • 相连:选择拆分后字根相连的拆分方式。
  • 相交:选择拆分后字根相交的拆分方式。
  • 断开:选择拆分后字根断开的拆分方式。
  • 取大:选择笔顺靠前的字根笔划较多的拆分方式。
  • 取小:选择笔顺靠前的字根笔划较少的拆分方式。

4.3. 字根

字根,又称「码元」,是指字形输入法中,用来拆分汉字的基本部件,包括笔划、部首、元素、特征等。

字根的数量是有限的,任何新的汉字都可以拆分为字根集合中元素的有序组合。

根据字根的数量,汉字可以分为多种类型。

4.3.1. 单根字

单根字,又称「字根字」「成字字根」,是指拆分为单个字根的汉字。

4.3.2. 双根字

双根字,是指拆分为两个字根的汉字。

4.3.3. 三根字

三根字,是指拆分为三个字根的汉字。

4.3.4. 多根字

多根字,是指拆分为大于一个字根的汉字。

4.4. 字根编码

字根编码,是指将字根映射到一个或多个编码字符的过程。这些编码字符可以是字母、数字、符号等。

4.4.1. 单编码字根

单编码字根,又称「一码根」,是指字根对应一个编码字符。

单编输入法,指的是大多数的字根编码是一码的输入方案。

方案举例

五笔输入法、蓝宝石输入法、小鹤音形形码部分、字源输入法形码部分

4.4.2. 双编码字根

双编码字根,又称「两码根」是指字根对应两个编码字符。

双编输入法,指的是大多数的字根编码是两码的输入方案。

方案举例

徐码输入法、卿云输入法、真码输入法(也存在一码根)、郑码(也存在三码根)。

4.4.2.1. 大码

大码,又称「区码」指的是字根对应的两个编码字符中的第一个编码字符。

4.4.2.2. 小码

小码,又称「位码」指的是字根对应的两个编码字符中的第二个编码字符。

4.4.3. 三编码字根

三编码字根,又称「三码根」是指字根对应三个编码字符。

三编输入法,指的是大多数的字根编码是三码的输入方案。

方案举例

宇浩日月:字根大多数三编码,分为大码、声码、韵码。声码有时省略。

4.5. 主副根

主副根,是指部分字根的编码方式、参与单字编码的方式和其他字根不同。

辨析

一般而言,主副根具有以下特点:

主根,编码数量为一,字根字需要补充编码。或者编码数量为二,但小码的编码字符是固定的。 副根,编码数量大于一,字根字不需要补充编码。

部分输入法会将主根继续分为「第一主根」和「第二主根」,并将它们的编码方式区分开来。

方案举例

郑码输入法:部分字根是主根,它们的编码只有一个字符。为了输入字根字,必须补充编码。比如「言」是 S 上的第一主根,输入「言」需要补充编码 a,因此「言」的编码是 Sa

徐码输入法:部分字根是主根,它们的小码统一为vu。比如「石」是 G 上的第一主根,编码是 Gv。再比如「一」是 G 上的第二主根,编码是 Gu

4.6. 字根归并

字根归并,指的是将若干个字根视作同一个字根,并赋予它们完全相同的编码。

方案举例

郑码输入法:見见二字字形不同,但音义相同,后者为前者的简化。因此它们被归并到「见」字根上,赋予相同的编码Lr

虎码输入法:八丷二字字形不同,但音义相同,后者为前者的古字。因此它们被归并到「八」字根上,赋予相同的编码Hb

宇浩输入法系列:「𠤎huá」二字音义不同,但字形非常接近,实际难以区分。因此被归并到「匕」字根上,赋予相同的编码。

4.7. 字根分区

字根分区,指的是将字根按照某种内在特征划分到若干个区域。

方案举例

郑码输入法:字根主要按照首笔划,依照字典顺序进行分区(A-H I-L M-R S-W X-Z)。 五笔字形:字根主要按照首笔划,在键盘上进行分区。 宇浩光华:字根主要按照首笔划,在键盘上进行分区。

4.8. 字根聚类

字根聚类,指的是将若干个字根按照某种内在特征划分为一组,并赋予相同的主要编码(第一编码、大码)。

4.8.1. 音联

字根大码音联,又称「大码音托」,是指在输入法中,部分字根通过其读音来联系起来,并赋予它们相同的大码。

方案举例

  • 小鹤音形:形码部分,字根大码主要按照字根的读音放置在同一个大码上。比如「金」的大码是J
  • 冰雪清韵:字根大码主要按照字根的读音放置在同一个大码上。

4.8.2. 形联

字根大码形联,又称「大码形托」,是指在输入法中,部分字根通过其形态来联系起来,并赋予它们相同的大码。

如果相同大码上的所有字根都具有相似的形态,则称之为强聚类

辨析

早期的形码大多具有强聚类特性,因为他们都是基于字根的形态来设计的,将相似形态的字根放在同一个大码上,便于用户记忆。

方案举例

  • 郑码输入法:字根大码相同的字根大多具有相似的起笔形态,为强聚类。比如S大码的字根都具有「亠」的形态。
  • 宇浩输入法:部分形态相似的字根被聚类到同一个大码上。比如「方文夂攵亦亡亥豕」等字根的大码都是T
  • 天码输入法:字根大码相同的字根大多和此编码字母的形态有关,为强聚类。比如A大码的字根都具有三角形的形态,如「人八金又亽」等字根。

4.8.3. 义联

字根义联,是指在输入法中,部分字根通过其含义来联系起来,并赋予它们相同的大码。

方案举例

字源输入法:部分含义相关的字根被聚类到同一个编码上。比如「士民大夫人欠」等字都和「人」相关,它们的编码都是S

4.9. 音托

音托,又称「小码音托」,是指形码输入法中,字根的小码和字根的读音有所关联。

如果小码的选取的一致性较强,比如只取声母或者只取韵母,则称之为强音托

辨析

「托」字有「凭借、依靠」的意思,在输入法领域,通常引申为「提示」义。依靠拼音字母,可以方便用户迅速掌握小码,避免额外的学习成本。

方案举例

  • 徐码:副根小码大部分取声母,小部分取韵母,主根取vu。因此它具有音托属性。
  • 虎码:小码大部分取声母,小部分取韵母。因此它具有音托属性。
  • 卿云:小码取声母,因此它具有音托属性。

4.10. 形托

音托,又称「小码形托」,是指形码输入法中,字根的小码和字根的形态有所关联。

方案举例

郑码:「辛」字根的大码为 S,因为它的下半部分具有「十」的形态,因此小码选用「十」字根的大码E。辛字根的编码故而为 Se

4.11. 乱序

乱序字根,是指在输入法中,字根的部分编码的选取同字根的音、形、义无关,即无理码。

乱序字根一般由计算机根据指标优化生成。

4.11.1. 单乱序字根

单乱序字根,是指字根中的某一个编码字符采取乱序方式生成。

方案举例

蓝宝石输入法:单编码字根,其字根编码是乱序的。

虎码输入法:双编码字根,其字根大码是乱序的。

4.11.2. 双乱序字根

双乱序字根,是指字根中的两个编码字符采取乱序方式生成。

方案举例

云码输入法:双编码字根,其字根大码、小码都是乱序的。

吉旦饼输入法:双编码字根,其字根大码乱序,小码分情况而定。对于使用频率排名前50的字根,小码是乱序的;对于其他字根,小码是音托。

4.11.3. 三乱序字根

三乱序字根,是指字根中的三个编码字符采取乱序方式生成。

方案举例

松烟输入法:三编码字根,其字根三码都是乱序的。

4.12. 单字编码

单字编码,是指一个汉字的编码。它通常是由一个或多个编码字符组成的字符串。

对于音码而言,单字编码通常是汉字的音素对应的编码按一定规律组合而成的字符串。 对于形码而言,单字编码通常是汉字的字根对应的编码按一定规律组合而成的字符串。

辨析

单字编码不一定需要取其所有元素。

单字编码不一定需要所取元素的完整编码。

单字编码不一定需要按照元素的顺序进行组合。

4.13. 词语编码

词语编码,指的是一个词语或短语的编码。它通常是由一个或多个编码字符组成的字符串。

辨析

一般而言:

  • 当涉及「编码」概念时,「词语」取狭义,即只指多字词的编码。
  • 当涉及「分词」概念时,「词语」取广义,即包含单字词和多字词。
  • 当涉及「词频」概念是,「词语」应当取广义,即包含单字词和多字词。但也可以只取狭义,此时,词频指的是条件词频。

4.14. 全码

全码,指的是一个汉字或词语依据输入法的编码规则构成的完整编码。

辨析

全码具有确定性,也就是说,衹要知道输入法的字根编码编码规则,以及任何汉字的拆分方式,就能唯一确定它的全码。

一般地,输入法的理论全码不包括分隔符号。实际输入中,为了消除歧义,可能会在全码后添加分隔符号(如空格键)。我们也可以认为这些分隔符号是全码的一部分。

4.15. 简码

简码,又称「简快码」,指的是一个汉字或词语的编码的简化形式。它通常是由一个或多个编码字符组成的字符串。简码的长度小于该字全码的长度。

简码的设置方式有多种,常见的有:

  1. 简码截取全码的前几个字符。
  2. 简码截取全码的前几个字符和后几个字符。
  3. 简码取该汉字的其他信息。
  4. 简码取无理码。

辨析

简码不具备确定性,也就是说,即使知道输入法的字根编码编码规则,以及任何汉字的拆分方式,也不能确定它的简码,必须特别记忆。

一般地,输入法的理论简码不包括分隔符号。实际输入中,为了消除歧义,多数情况下会在键码后添加分隔符号或选重符号,我们也可以认为这些分隔符号是简码的一部分。

方案举例

五笔字形:简码截取全码的前几个字符,比如「国」的全码是LGYi,简码是L

宇浩日月:简码截取全码的前几个字符和末根韵码,比如「你」的全码是WMLXi,简码是Wi

宇浩日月:简码取该汉字的其他信息,比如「的」的全码是KBHND,简码是e,取该字拼音韵母。

五笔字形:简码取无理码,比如「我」的全码是TRNT,简码是Q

4.15.1. 一级简码

一级简码,指的是长度为一的简码。对应的字称为「一级简码字」,对应的词称为「一级简码词」。

辨析

由于分割符号的必要性,一级简码的实际编码长度一般为二。因此,对于四码定长方案,一级简码节约的编码长度为2。

方案举例

五笔字形:横区和竖区十键上的一级简码字为「一地要在工,上是中国同」。

4.15.2. 二级简码

二级简码,指的是长度为二的简码。对应的字称为「二级简码字」,对应的词称为「二级简码词」。

辨析

由于分割符号的必要性,二级简码的实际编码长度一般为三。因此,对于四码定长方案,二级简码节约的编码长度为1。

4.15.3. 三级简码

三级简码,指的是长度为三的简码。对应的字称为「三级简码字」,对应的词称为「三级简码词」。

辨析

由于分割符号的必要性,三级简码的实际编码长度一般为四。因此,对于四码定长方案,三级简码不节约的编码长度。

4.15.4. 简码字

简码字,指的是一级简码字、二级简码字、三级简码字等设置了简码的单字的统称。

4.15.5. 简码词

简码词,指的是一级简码词、二级简码词、三级简码词等设置了简码的多字词的统称。

4.15.6. 多重简码

多重简码,指的是一个编码位置上设置了多个简码的情况。

多重简码形成编码冲突,需要进行选重操作。

多重简码是人工设置的简码冲突,其排序方式固定,因此选重符号实际上构成了简码编码的一部分。此时,编码冲突可以得到解决。

辨析

如果简码码位本身具有全码,则简码可能在此全码字前,或者在此全码字后。

多重简码的选重符号是无理码。

4.15.7. 简码覆盖率

N级简码覆盖率,指的是码长为N的简码和全码在某一文本空间下的出现频率。它符合以下公式:

N=i(Ni×i)

辨析

一般地,二十六键四码定长方案的二级简码覆盖率约在70%左右。

一般地,一级、二级简码的覆盖率和平均码长呈反比。

4.15.8. 简码效率

简码效率,指的是字频加权下的简码节约编码长度,其公式如下:

=i(i×i)

辨析

由于各个方案的全码长度不同,因此,简码效率相对较高,不代表平均码长较低。

4.15.9. 全简一致性

全简一致性,又称「全码简码编码一致性」,指的是输入方案的简码设置方式是截取全码的前几个字符。

辨析

全简一致只对理论简码有效,实际简码可能会因为分隔符号(如空格)的存在不具有全简一致性。

方案举例

郑码输入法:当第一根为副根时,简码可能会跳过此副根的小码(位码),而取第二根的大码(区码)。因此,郑码输入法不具有全简一致性。

宇浩日月:本方案有两类简码。一类简码为全码前几码加末根韵码,因为韵码具有分隔符号作用,因此其理论简码和实际简码一致,不具有全简一致性。另一类简码为全码前几码,需要空格分隔符,因此其理论简码具有全简一致性。

4.15.10. 字词一致性

字词一致性,又称「字词编码一致性」,指的是输入方案的词语编码是截取其中单字全码的前几个字符并且串联起来。

方案举例

郑码输入法:当一个词语中的某个字的第一根为副根时,词语编码可能会跳过此副根的小码(位码),而取此字第二根的大码(区码)。因此,郑码输入法不具有字词一致性。

4.16. 无理码

无理码,指的是输入法中,某些编码字符不对应汉字的任何属性或特征。

4.17. 兼容码

兼容码,指的是输入法中,某些汉字或词语有多个编码选项。

兼容码往往来自于汉字某些特征的多态性。比如:

  1. 音码输入法中,因为某些汉字有多个读音,因此它们有多个编码选项。
  2. 形码输入法中,因为某些汉字有多种字形,因此它们有多个编码选项。
  3. 形码输入法中,因为某些汉字有多种拆分方式,因此它们有多个编码选项。

4.18. 难字码

难字码,指的是对于某些复杂的、琐碎的、拆分复杂的汉字部件,使用特定的编码字符来表示。

方案举例

仓颉输入法:使用(对应编码为X)来表示一些复杂的部件,比如「身」字的编码为竹難竹

4.19. 回头码

回头码,又称「首根小码后置」,指的是某些形码输入法的首根小码后置到字词编码的末尾。

方案举例

徐码:如果一个字的首根为副根且字根数大于一,则此字的编码第四码必为该字首根的小码。如此,编码的第二码保证为次根的大码。

宇浩星陈:如果一个字的编码不足4,则在末尾补充首根的小码。

天码:如果一个字的编码不足4,则在末尾补充首根的小码(小码为v的不用补充)。

4.20. 结构码

结构码,指的是输入法中,将汉字的结构信息映射到一个或多个编码字符的过程。

结构包括并不限于:

  • 上下结构
  • 左右结构
  • 包围结构
  • 半包围结构
  • 独立结构

4.21. 选重码

选重码,指的是输入法中,对于同一个汉字或词语的多个编码选项,使用特定的编码字符来进行区分。

辨析

选重码是无理码。

选重码可以出现在编码的任意位置。

方案举例

仓颉输入法:使用(对应编码为Z)来区分同一个编码对应的多个汉字。一般地,选重码赋予字频较低的汉字。选重码出现在编码的开头。

比如:「知」「佑」的编码都是人大口OKR),此时,在低频字「佑」的编码前添加选重码,使得「佑」的编码也可以为重人大口ZOKR)。

4.22. 识别码

识别码,指的是输入法中,为了更精确地识别和定位汉字而添加的一个或多个编码字符。识别码往往取用额外的信息,比如结构、末笔、读音、含义等。

方案举例

五笔字形:识别码采用汉字的末笔和结构双重信息。当根据字根映射形成的单字编码长度不足4时,会使用结构信息和末笔信息的结合来补充一码用于进一步识别该字。比如:「和」字拆分为「禾口」,对应编码是TK,不足4码,故而补充一码识别码。这一码取结构信息(左右结构)和末笔信息(横)的组合,为G(11键)。因此它的全码为TKG

徐码:当字的第一根为副根,且该字编码不足4时,会使用首根的小码作为识别码。

4.23. 补码

补码,指的是对于某些汉字或词语,在特定的条件下,使用特定的编码字符来补充其完整编码。

辨析

补码可以是无理码,可以是有理码,可以是结构码,可以是识别码,可以是选重码。

补码的目的可以是为了补充编码的长度,也可以是为了补充编码的特征从而降低编码冲突可能性。

4.24. 繁简通打

繁简通打,指的是输入法中,同一个汉字的繁体和简体版本,大部分情况下使用不同的编码。

辨析

繁简通打可以是主动设计(分离繁简字根),也可以是被动设计(提取汉字特征)。

纯粹的音码输入法不具备繁简通打的特性。

方案举例

仓颉输入法:繁简通打。因为它的拆字方式是通过切割和提取汉字特征,因此可以被动地离散繁简字编码。

徐码输入法:繁简通打。因为它将对应的繁简字根安排在不同的大码上。

宇浩输入法:繁简通打。因为它对于繁简混合字频进行优化。

天码输入法:繁简通打。因为它字根安排在和键位拉丁字母相似的按键上,因此可以被动地离散繁简字编码。

5. 输入相关

5.1. 连打

连打,又称「整句输入」,指的是在输入法中,连续输入多个汉字或词语的编码字符,并正在之后通过特定的方式将陆续或一起上屏。

5.2. 联想

联想,指的是在输入法中,输入软件根据统计模型或语言模型,对用户输入的编码分割、编码对应的字词、错误输入进行及时调整。

5.3. 预测

预测,指的是在输入法中,输入软件根据当前输入的编码字符,预测用户可能输入的下一个汉字或词语。

5.4. 模糊键

模糊键,指的是在输入法中,对于某些编码字符的输入,允许用户输入一个特定的编码字符来匹配多个可能的汉字或词语。

5.5. 出简让全

出简让全,指的是在输入法中,当一个汉字存在简码时,且它的全码出现编码冲突时,将这个字后置到其他后选项之后。

5.6. 出简不出全

出简让全,指的是在输入法中,当一个汉字存在简码时,删除它的全码,仅保留简码。

5.7. 繁简转换

繁简转换,指的是在输入法中,将输入的繁体字或简体字转换为对应的简体字或繁体字。

5.8. 上屏方式

5.8.1. 整句上屏

整句上屏,是指输入法在用户输入多个汉字后,将这些汉字一起上屏。

随著信息技术的不断发展,整句上屏往往配合输入联想功能,通过隐马尔可夫链、LLM等技术,实现对整句的预测。

5.8.2. 唯一上屏

唯一上屏,指的是当前输入的编码可以唯一确定为一个汉字(候选项为一)时,直接上屏该汉字。

唯一上屏的触发条件一定是内生的。也就是说,它不依赖下一个汉字的编码来确定当前汉字编码的结束。它包括:

  1. 当前编码的长度达到最大长度;
  2. 前缀码最后一码的编码字符出现。
  3. 虽然存在后续编码空间,但已无其他汉字在预测区。

举例

一个输入法的编码最大码长为4,当用户输入的编码为abcd,且这个编码对应了唯一字符(如),则直接上屏

方案举例

三码郑码(六码除重模式)。该模式下,编码为不定长状态。当用户输入的单字编码构成唯一的汉字候选项且无后续预测(未成词),则直接上屏;当用户输入的单字编码参与了后续预测(成词),则不直接上屏,而是等待用户输入更多的编码字符判断是否上屏词语或是单字。

5.8.3. 空格上屏

空格上屏,是指在编码后添加空格键,表示当前编码已经完成,并将首选项上屏。

空格键本身不上屏任何符号,而是将一个方案的实际编码转换为前缀码。因此,空格上屏可以视为一种特殊的「唯一确定上屏」。

5.8.4. 选重上屏

选重上屏,是指在用户输入编码后,通过选择候选字来确定上屏的汉字。

选重键本身不上屏任何符号,而是将一个方案的实际编码转换为前缀码。因此,选重上屏可以视为一种特殊的「唯一确定上屏」。但这种所谓「唯一确定」是在实际输入过程当中及时更新的,不具备通用的预见性。

5.8.5. 延迟上屏

延迟上屏,又称「顶字上屏」,是指在用户输入编码且达到唯一分割条件时,不立即上屏,而是等待用户继续输入更多的编码字符后再上屏。

延迟上屏时,候选项可能唯一,也可能不唯一。

延迟上屏的触发条件可以是内生的,也可以是外生的。也就是说,它既可以不依赖下一个汉字的编码来确定当前汉字编码的结束,比如:

  1. 当前编码的长度达到最大长度;
  2. 前缀码最后一码的编码字符出现。

它也可以依赖后续汉字的编码来确定当前汉字编码的结束,比如:

  1. 当前编码匹配某一模式,因此可以确定前续汉字编码的结束。

辨析

延迟上屏可以防止用户输入全码后自动上屏,从而避免输入错误无法回改的情况。

顶功上屏是特殊的延迟上屏(顶字上屏),但延迟上屏不一定是顶功上屏。

方案举例

RIME 输入法将 auto_select 设置为 false,则在输入编码后不会立即上屏,而是等待用户继续输入一个字符后上屏前字。

5.8.6. 顶功上屏

顶功上屏,是指在用户输入编码时,前若干码可以确定为唯一分割,则直接上屏其对应的候选汉字,并且保留剩余编码在输入区。

顶功上屏时,唯一确定的编码分割所对应的汉字可以是唯一候选,也可以是多个候选。但一般顶出首选。

顶功上屏的触发条件一定是外生的。也就是说,它必须依赖下一个(或几个)汉字的编码来确定当前汉字编码的结束。它包括:

  1. 当前编码的字符集合的组合模式达到了唯一编码分割,可以确定一个汉字编码的结束;
  2. 当输入某一编码时,本编码的所有后缀都不在合法的编码空间中,则立刻上屏前续编码对应的首选(包括预测项),且保留最后一码。

辨析

顶功上屏是特殊的延迟上屏(顶字上屏)。

5.8.7. 符号上屏

符号上屏,是指在输入编码后输入标点符号,将当前第一候选字和符号同时上屏。

符号键本身不仅上屏前字,同时也上屏了符号本身。因此它可以根据具体情况视为以下上屏方式的一种特例:

  1. 如果前续编码已经形成唯一分割,则符号上屏可以视为「延迟上屏」的一种。
  2. 如果前续编码未形成唯一分割,则符号上屏可以视为「顶功上屏」的一种。此时,符号键会将实际编码转换为具有顶功属性的编码,实现了顶功输出。

6. 编码冲突

6.1. 重码

重码,又称「编码冲突」,是指两个或多个汉字的编码相同。

6.2. 离散

离散,又称「编码离散水平」,指的是输入法避免编码冲突的程度。离散水平越高,表示编码冲突的可能性越低。

辨析

离散水平有多个层级,比如避免完全相同的拆分、将容易形成相似组合的字根分散到不同的编码位置、在原始编码后添加额外信息作为识别码等。

6.3. 选重

选重,是指在输入法中,当用户输入的编码对应多个候选汉字时,通过选择候选汉字来确定上屏的汉字。选重方法包括数字选择、符号选择、鼠标选择等。

6.4. 单字静态重码数

单字静态重码数,又称「绝对重码数」「静重」「静重」,指的是在一个字符集中,编码完全相同的汉字的数量。它不包含关于字频的信息,因此,静态重码只关注编码的唯一性。

注意,静态重码必须依赖于某一字集,字集的不同会导致静态重码数的不同。

静态重码数的计算公式和代码

假设 Z 为一个汉字的集合,M 为一个编码的集合。汉字 zij 定义为编码为 mi 的第 j 个汉字,顺序随机。那么,静态重码数可以表达为:

Ns=∣{zia,zib if M(zia)=M(zib) for all a,bJi and iI}.

以下为 Python 代码示例,使用 numpy 包计算静态重码数:

python
import numpy as np
import typing
import numpy.typing as npt

def get_static_dup_rate(
    char: npt.NDArray[np.dtype("<U1")],
    code: npt.NDArray[np.dtype("<U4")],
    charset: typing.Sequence,
) -> int:
    """计算某个字集内的静态重码数

    Args:
        char (npt.NDArray[np.dtype): 元素为汉字。
        code (npt.NDArray[np.dtype): 元素为编码。
        charset (typing.Sequence): 字集。元素为汉字。比如通规汉字或 GBK.

    Returns:
        int: 静态重码数:
    """
    idx_char_in_scope = np.isin(char, charset)
    _, dup_counts = np.unique(code[idx_char_in_scope], return_counts=True)
    return dup_counts[dup_counts > 1].sum()

6.5. 单字静态重码组数

单字静态重码组数,指的是在一个字符集中,编码完全相同的汉字组数

由于部分编码可能对应超过两个汉字,因此以下不等式成立:

×2

6.6. 单字静态选重数

单字静态选重数,指的是在一个字符集中,编码完全相同、且不为首选的汉字数量。以下等式成立:

=

6.7. 单字静态选重率

单字静态选重率,是指在一个字符集中,编码完全相同、且不为首选的汉字数量字集包含字数之比。它可以表达为:

=

6.8. 单字动态选重率

单字动态选重率,又称「动重」「动态重码率」「字频加权选重率」,是指编码完全相同、且不为首选的汉字的出现频率。它可以表达为:

=i(i)

辨析

「动态」一词在输入法领域内共识性地表达了「加权」的含义。它与「静态」的区别在于,动态选重率考虑了汉字的出现频率,而静态选重率则不考虑。

动态选重率的计算公式和代码

假设 Z 为一个汉字的集合,M 为一个编码的集合,p:Z[0,1] 为汉字到其出现频率的映射。用编码和字频对汉字排序,使汉字 zij 是编码为 mi 的第 j 个汉字,iI, jJi, 且满足 ab 时,f(zia)f(zib)。 动态选重率可以表达为:

Nd=iI,jJi/{1}p(zij).
python
def get_dynamic_dup_rate(
    code: npt.NDArray[np.dtype("<U4")],
    freq: npt.NDArray,
    idx_sorted_freq: npt.NDArray[np.dtype("i")],
) -> float:
    """计算字频加权选重率(动态重码率)

    Args:
        code (npt.NDArray[np.dtype): 元素为汉字对应的编码。
            宇浩输入法编码不超过四位,所以编码的格式是 4 个 Unicode 组成的字符串。
        freq (npt.NDArray): 元素为汉字对应的字频。
        idx_sorted_freq (npt.NDArray[np.dtype): 根据字频进行降序排列的索引。
            一般的:idx_sorted_freq = np.argsort(-freq)
            因为这一项操作只需要进行一次,故而不需要放入函数中循环。
    Returns:
        float: 字频加权选重率。
    """
    # 字频降序后的编码和字频列表
    code = code[idx_sorted_freq]
    freq = freq[idx_sorted_freq]
    # 得到第一个非重复的编码的索引
    _, idx_unique_freq = np.unique(code, return_index=True)
    # 生成一个掩码层,将重复的编码筛出
    duplicated_mask = np.full(freq.shape, True)
    duplicated_mask[idx_unique_freq] = False
    # 重复的编码,就是需要选重的字
    # 将这些重复的编码所对应的字频进行求和
    return freq[duplicated_mask].sum()

6.9. 词语动态选重率

词语动态选重率,又称「词重」「词语重码」「词频加权选重率」「词语动态重码率」「理论词语选重率」,是指在某一词语集合内,编码完全相同、且不为首选的词语的理论出现频率。它可以表达为:

=i(i)

随著词语集合(词库)的缩小,词语动态选重率会逐渐接近单字动态选重率。因此,以下关系成立:

=lim0

6.10. 多字词动态选重率

多字词动态选重率,有时也简称为「词重」「词语重码」「理论词语选重率」,可以完整称为「词语条件概率加权理论选重率」。它是指在某一词语集合内,编码完全相同、且不为首选的多字词语的理论出现频率。它体现为词语动态选重率的条件概率。可以表达为:

=ii

下不等式成立:

随著词语集合(词库)的增大,多字词动态选重率会逐渐接近词语动态选重率。因此,以下关系成立:

lim=lim

辨析

多字词动态选重率和词语动态选重率往往都简称为「词重」,然而两者所反映和测量的维度并不相同。因为给定任意文本,无法将其分为只包含多字词的序列。因此:

  1. 词语动态选重率,包含单字词(汉字)和多字词,可以反映词语出现频率的绝对情况。如果两个方案的词语动态选重率呈倍数关系,则可以认为实际选重率也呈倍数关系。
  2. 多字词动态选重率,仅包含多字词,反映词语出现频率的相对情况。如果两个方案的多字词动态选重率呈倍数关系,只可以判断实际选重率大致的相对大小。

例如:A 方案的词语动态选重率是 1%,B 方案的词语动态选重率是 2%,则可以认为 B 方案的实际选重频率是 A 方案的两倍。

A 方案的多字词动态选重率是 1%,B 方案的多字词动态选重率是 2%,则只能认为 B 方案的实际选重频率多数情况下大于 A 方案的实际选重频率,但无法确定两者的实际选重频率之比。

6.11. 实际词语选重率

多字词动态选重率和词语动态选重率都是给定某一词语集合的理论值。实际词语选重率,则是指在实际使用中,根据人工的分词情况,呈现出的实际选重频率。

如果用户人工分词的结果和词语集合完全一致,则实际词语选重率和多字词动态选重率相等。

如果用户人工分词的结果较词语集合保守(使用很少的多字词),则实际词语选重率会接近单字动态选重率。

因此,以下关系成立:

lim=lim0=

一般的,由於单字动态选重率小于词语动态选重率,因此有以下关系:

举例

假设一个词语集合中所有的词语(单字词和多字词)出现频率都相等。考虑以下句子:

「请用大约十句话来描述你所居住城市的历史的来龙去脉。」

情况一:如果词库为中等大小,换言之,分词比较适中,我们对这句话进行如下分割:

「请·用·大约·十句·话·来·描述·你·所·居住·城市·历史·的·来龙去脉。」

我们得到了 14 个词语,也就是说,用户要输入 14 次全码。假设「请」和「描述」发生了重码,那么我们输入这 14 个词,就要选重一次。这句话的词语动态选重率就是 1 / 13 = 7.1%。

情况二:如果词库为超大词库,换言之,分词比较激进,我们对这句话进行如下分割:

「请用·大约·十句话·来·描述·你所·居住·城市·历史的·来龙去脉。」

我们得到了 10 个词语,也就是说,用户要输入 10 次全码。假设「请用」和「描述」发生了重码,那么我们输入这 10 个词,就要选重一次。这句话的词语动态选重率就是 1 / 10 = 10.0%。

情况三:如果词库为精简词库,换言之,分词比较保守,我们对这句话进行如下分割:

「请·用·大约·十·句·话·来·描述·你·所·居住·城市·历史·的·来·龙·去·脉。」

我们得到了 18 个词语,也就是说,用户要输入 18 次全码。假设「请」和「描述」发生了重码,那么我们输入这 18 个词,就要选重一次。这句话的词语动态选重率就是 1 / 18 = 5.56%。

从上例可以看出,词语的实际重码数据依赖于用户的人工分词和统计数据中的词语的一致性。在以下条件全部满足时,实际动态选重率等同于理论词语动态选重率:

  • 用户只打词频表中出现的词。如:词频表中若无「我们」,那么用户只打「我·们」。
  • 用户必定打长度较长的词。如:出现「电视机」时,必定打「电视机」,而不是「电视·机」或「电·视·机」。这一条也意味着,一个多字词若在字频表中,那么用户绝对不会打成单字。

这两个条件一般不会实现,很多时候,用户会将某些词频表中的多字词分为单字词输入,这意味着:

实际输入时的动态选重率,应介于「单字动态选重率」和「词语完美动态选重率」之间。依照用户习惯:

  • 如果一个人偏好打单字,那么动态选重率更偏向「单字动态选重率」(更低)。
  • 如果一个人偏好打词语,那么动态选重率更偏向「词语动态选重率」(更高)。

宇浩输入法官网