Skip to the content.

宇浩輸入法開發思路

1. 初衷

2021年底,我开始用中國大陸《古籍通規》標準的繁體字創作一部長篇小説。小説中有大量的文言段落、文白夾雜的對話,以及詩詞。因此,我發現重碼太高的拼音輸入法無法滿足我的需求。我急需一款能够具有高度確定性的輸入法。

我之前使用過五筆字形,但它是對於簡體優化的,字根太散,不適用於繁體輸入。倉頡輸入法雖是繁簡通打,但它是五碼定長,没有簡碼和詞語輸入,適合檢字,但不適合打字,也被排除。之後我又瞭解了鄭碼,發現它雖然字根分佈有規律,但全簡不一致,且在繁體字集上的重碼和五筆其實没有多少區别。再後來,我瞭解到三碼鄭碼,喜歡它規則的簡單,但它只適合簡體字集,繁體輸入需要轉換,所以不滿足我的需求。最後,我瞭解到了徐碼輸入法,它的繁簡通打的特性十分吸引人,並且在簡、繁、簡繁混輸的場合下,徐碼的重碼都是最低的,堪稱業界天花板。

綜合比較各個輸入法的重碼,和各方面的情况。我意識到,如果需要繁體輸入,選項只剩下了徐碼和倉頡。因爲倉頡不是四碼定長,最終我選擇了徐碼。

在一年多的使用中,我用徐碼打了近百萬字的繁體小説,日常生活也用它的簡體輸入,享受了他的低重碼、繁簡通的特點,也感受到了它取回頭碼、Z鍵頻率太高的不便之處。這一年裏,我還拆分了CJK的全部漢字,瞭解了其它的新的輸入法,對評價輸入法各個維度有了更深入的瞭解,慢慢,明白了自己到底需要什麽。最重要的三個心得是:

在使用形碼創作的過程中,我發現我是一個鍵盤派,一個頻率派,一個字根派:

因此,我製作了這款新輸入法,我的初衷是:世面上的輸入法都有自己的優點,但也有自己的痛處。優點和缺點都比較極端。我的目標是將其它輸入法的主要痛點加以避開或減輕,同時儘量保持其優勢。追求平衡感,包括:

根據以上目標,我在常用繁簡字集上(GB2312 + 國字常用字 + 大陸繁體字形)進行了優化,同時考慮了靜態重碼和動態重碼。最後,它便形成了「宇浩輸入法」。它在各方面的指標都都達到了一種平衡。

這裏列出各維度上同其它四碼定長輸入法之間比較,排名越靠前越好:

維度 第一 第二 第三 第四 第五 第六  
簡體靜態重碼重碼數量 宇浩 ~ 徐碼   五筆98 虎碼 五筆86 鄭碼  
簡體動態重碼率 虎碼 ~ 宇浩   徐碼 虎碼 五筆86 五筆98 鄭碼
常用字簡繁通打靜態重碼重碼數量 徐碼 宇浩 虎碼 鄭碼 五筆98 五筆86  
常用字簡繁通打動態重碼率 宇浩 ~ 徐碼   五筆86 五筆98 鄭碼 虎碼  
大字集重碼數量 徐碼 宇浩 五筆98 五筆86 鄭碼 虎碼  
字根設置整體性 鄭碼 徐碼 宇浩 虎碼 五筆    
鍵盤區位聚合度 五筆   宇浩 鄭碼 徐碼 虎碼  
編碼規則簡易度 虎碼 宇浩 鄭碼 ~ 五筆     徐碼  
全簡一致(簡碼、詞語編碼) 五筆=徐碼=虎碼=宇浩         鄭碼  
Z 鍵使用 五筆=宇浩     虎碼 鄭碼 徐碼  

2. 評價輸入法各個維度的討論

這一章我討論評價一款輸入法的各個維度,引出我製作這個輸入法的動機和目標。

2.1. 關於重碼

本着實用主義現實主義原則,我將漢字的輸入分爲打字和檢字兩部分:

基於這個理念,我的目標是:

  1. 常用繁簡通字集上低重:GB2312和通規共有字 + 國字常用字 + 大陸古籍規範漢字常用字。繁簡聯合 < 1000 個重碼字,繁簡聯合動態重碼率 < 0.10%
  2. 簡化字字集低重:GB2312 ~ 300 個重碼字,動態重碼率 < 0.10%
  3. 繁體字字集低重:國字常用字 ~ 200 個重碼字
  4. 大字集:GBK 字集重碼字 ~ 5000
  5. 部分有若幹形態的部首進行歸併。

附其它方案重碼數據以參考,按照發明時間順序排序。

形码方案 GB2312 国字 常用繁简 GBK GB2312选重率 常用繁简选重率
五笔86 537 357 1741 6582 0.34% 2.74%
郑码 563 311 1809 6590 0.59% 2.92%
五笔98 515 329 1679 6368 0.38% 2.77%
徐码 318 127 488 2902 0.11% 0.15%
虎码 532 238 2076 7687 0.05% 4.00%
宇浩 309 216 614 4966 0.05% 0.14%

2.2. 關於編碼規則

編碼的規則應該足够簡單和直觀,避免太多的判斷和回改。以下是關於編碼規則的部分偏好:

對於編碼規則,一個從容易到困難的排序是:

  1. 無結構碼和首根小碼(三碼鄭碼、虎碼)
  2. 無結構碼,首根小碼只在不足四碼時使用(宇浩)。
  3. 分爲取三根和四根,首根小碼緊跟首根大碼(鄭碼)。
  4. 結構碼(五筆)。
  5. 分爲取三根和四根,首根小碼後置佔位(徐碼)。

我的方案採取第二種,這是因爲首根小碼可以允許繁簡通打,如果完全不加,那麽卽使在GB2312下重碼也非常高。

宇浩輸入法的規則如下:

2.3. 關於字根分佈

對於字根分佈,有幾個維度。一者,字根是否按橫豎撇捺分區排布;二者,一個鍵上的字根是否具有相似的屬性;三者,是按照鍵盤分區(打字主義,單映射),還是按字母表分區(檢字主義,雙映射);四者,如果有小碼,小碼是如何決定的。

目前的常見輸入法,一個從容易到困難的排序是:

  1. 字根大碼按鍵盤分大區,大區内比較隨機。字根無小碼。(五筆)
  2. 字根大碼按字母分大區,大區内完全有字形規律。字根小碼用字形提示。(鄭碼)
  3. 字根大碼按字母分大區,大區内比較有字形規律。字根小碼用拼音提示。(徐碼)
  4. 字根大碼完全隨機,小碼用拼音提示。(虎碼)

宇浩輸入法的字根排布,融合了五筆和徐碼的特點。

2.4. 關於拆分規則

優先級:

少 順 散 連 交 斷 美 大

直觀的意思:

變形幅度在直觀的範圍内。這一點無法完全量化,畢竟文字是藝術。所以,我也增加了兼容碼。

2.5. 字形

某些字形在常用字集内没有區分,或者共用 Unicode 碼位。真正的字形區分往往在 CJK 拓展區,屬於檢字範疇。爲了不增加判斷難度,因此: