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. 自分割

自分割,又稱內頂內生性分割內向性分割,是指當前漢字的編碼自身編可以確定它的結束,而不需要看到後續漢字的有效編碼。

辨析

例如,某輸入法中的所有漢字編碼的最後一碼都必然是a,且a只作為末尾編碼,則它具有自分割屬性。當出現a時,就可以確定當前漢字編碼的結束。不需要看到後續漢字的編碼。

3.10.4. 前綴碼

前綴碼,又稱前置碼前綴無關碼。是指任何一個漢字的編碼都不是任何其他漢字編碼的前若干碼。

前綴碼是自分割的,它的編碼分割是內向性的,也就是説當前編碼自身可以確定它的結束,而不需要看到下一個有效編碼。

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

例如,假設存在兩個編碼字符集AB,它們的交集為空集,則前綴碼的一類編碼形態為:B, AB, AAB, AAAB, AAAAB,以此類推。如此,觀察到B集合的字符時,便可以確定當前漢字編碼的結束。

另一類編碼形式為:BBA, ABBA, AABBA, AAABBA,以此類推。如此,觀察到BBA模式時,便可以確定當前漢字編碼的結束。

辨析

如果一個方案中所有的編碼都是以空格鍵結尾的,且空格鍵只作為結尾,則它具有前綴碼屬性。

前綴碼具有分割唯一屬性。

任何定長碼或變長碼,如果在其編碼後附加額外的分隔符號(如空格),則其編碼具有自分割的前綴碼屬性。此時,空格可以看作它實際編碼的最後一碼,出現空格時,就可以確定當前漢字編碼的結束。

舉例:一個前綴碼方案中,「日」的編碼爲ri,則不存在任意一個字,它的前兩碼是ri。當你看到ri時,就可以確定當前漢字編碼的結束。

方案舉例

注音輸入法:如大千注音輸入法。由於注音符號的最後一碼是聲調符號,被分配在一個單獨的編碼字符集合中,因此它具有前綴碼屬性。

帶調拼音輸入法:如地球拼音輸入法。由於拼音的最後一碼是聲調符號,被分配在一個單獨的編碼字符集合中,因此它具有前綴碼屬性。

宇浩日月:純形碼。將字根的最後一碼設計為字根元音在五個元音字母aeiou上的映射,這樣當出現元音字母時,就可以確定當前編碼的結束。

松煙:純形碼。將字根的最後一碼設計為集合aeiouv中的字母,這樣當出現該集合字母時,就可以確定當前編碼的結束。

3.10.5. 頂功碼

頂功,是指一類可以通過匹配後續漢字編碼字符集合的組合模式而達到唯一編碼分割的編碼方式。

頂功碼的編碼分割是外向性的,也就是説需要看到下一個漢字的有效編碼才能確定當前編碼的結束。

頂功碼的任意數量的編碼模式的貫序連綴,不可以等同於其他任意數量的編碼模式的貫序連綴。

辨析

頂功碼具有分割唯一屬性。

頂功碼不是自分割的。

頂功碼不是前綴碼。

「頂功」的「頂」字可以表現出它的編碼分割外向性,通過匹配後續編碼的模式確定前序漢字編碼的結束,從而將前續漢字「頂」上屏幕。同時,「頂」字也表達出了**延遲上屏(頂字上屏)**的屬性。

部分編碼分割可能同時展現出前綴(内生分隔)和頂功(外生分割)的特徵。但由於頂功的編碼分割是外向性的,在排除頂功前,無法確定當前編碼是當前漢字的編碼還是前序漢字的後續編碼。因此,頂功屬性高於前綴屬性,此類輸入法依舊是頂功碼。

任何定長碼或變長碼,在未達到其最大長度時,如果在其編碼後附加額外的分隔符號(如空格)或標點符號(如句號),則其編碼具有頂功碼屬性。此時,分隔符號(如空格)可以看作下一個空白字符的實際編碼;標點符號(如句號)可以看作下一個標點符號的實際編碼。當出現分隔符號或標點符號時,就可以確定當前漢字編碼的結束。

舉例一:某方案中,一個漢字的第一個編碼,被設計為左手的按鍵,而剩余的編碼被設計在右手上。這樣的編碼是否具有頂功屬性?

這樣的編碼方式具有頂功屬性。因為每當看到左手的按鍵時,就可以確定這是一個新漢字的開始碼。

舉例二:某方案中,一個漢字的前兩碼都是輔音字母,而剩余的編碼是元音字母 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.6. 定長

定長,指的是每個漢字的編碼最大長度固定。也就是説,無論輸入什麼漢字,編碼的最大長度都是一樣的。當出現一個新的漢字時,它的最大長度是確定的。

辨析

定長碼不一定具有「分割唯一」的屬性。

定長碼通過添加分隔符號(如空格),可以在實際編碼中達到「分割唯一」的屬性。

方案舉例

五筆字形:全碼最短編碼長度為3,最長編碼長度爲4。 倉頡:全碼最短編碼長度爲1,最長編碼長度爲5。 宇浩日月:全碼最短編碼長度為2,最長編碼長度為5。前綴碼,兼具前綴特徵和定長特徵。

3.10.7. 絕對定長

絕對定長,是指編碼的長度在所有情況下都是固定的。也就是説,無論輸入什麼漢字,編碼的長度都是一樣的。

方案舉例

雙拼輸入法。

辨析

絕對定長碼具有「分割唯一」的屬性。

3.10.8. 變長碼

變長碼,又稱「不定長碼」,指的是編碼長度不固定的輸入法。也就是説,輸入不同的漢字,編碼的最大長度可能會有所不同。當出現一個新的漢字時,它的最大長度是不確定的。

方案舉例

筆劃輸入法、山人全息碼。

辨析

變長碼不一定具有「分割唯一」的屬性。

變長碼通過添加分隔符號(如空格),可以在實際編碼中達到「分割唯一」的屬性。

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%。

從上例可以看出,詞語的實際重碼數據依賴於用戶的人工分詞和統計數據中的詞語的一致性。在以下條件全部滿足時,實際動態選重率等同於理論詞語動態選重率:

  • 用戶只打詞頻表中出現的詞。如:詞頻表中若無「我們」,那麽用戶只打「我·們」。
  • 用戶必定打長度較長的詞。如:出現「電視機」時,必定打「電視機」,而不是「電視·機」或「電·視·機」。這一條也意味着,一個多字詞若在字頻表中,那麽用戶絕對不會打成單字。

這兩個條件一般不會實現,很多時候,用戶會將某些詞頻表中的多字詞分爲單字詞輸入,這意味着:

實際輸入時的動態選重率,應介於「單字動態選重率」和「詞語完美動態選重率」之間。依照用戶習慣:

  • 如果一個人偏好打單字,那麽動態選重率更偏向「單字動態選重率」(更低)。
  • 如果一個人偏好打詞語,那麽動態選重率更偏向「詞語動態選重率」(更高)。

宇浩输入法官网