Skip to main content Link Menu Expand (external link) Document Search Copy Copied

宇浩輸入法設計哲學

目录
  1. 初衷
  2. 評價輸入法各個維度的討論
    1. 關於重碼
    2. 關於編碼規則
    3. 關於字根分佈
    4. 關於拆分規則
    5. 字形

初衷

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

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

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

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

  1. 鍵盤派和字典派的區别。鍵盤派,希望字根分佈按照鍵盤分區,上手容易;相對的,字典派的字根分佈使用字典順序,在鍵盤上顯得反而成了亂序。
  2. 頻率派和低重派的區别。低重派,目標是一字一碼,儘可能在大字集上低重,注重大字集靜態重碼;頻率派,目標是在常用字集上低重,將字的權重納考量,注重常用字集動態重碼。
  3. 字根派和規則派的區别。字根派,目標是通過字根的分佈,有時候加以亂序,來減少重碼。規則派,目標是通過規則的複雜度來減少重碼。

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

  1. 我希望同筆畫的字根在鍵盤上集中分佈。
  2. 我還希望在常用繁簡漢字(10000個左右)上減少選字的頻率。而在大字集上,我不追求極端低重,而是以方便檢字爲宗旨,例如,「虎字頭」在大字集中有若干變化形態,如果我們將它們拆得太細,的確會減少重碼候選,但同時我們也很容易查不到字,不如將所有的變形全部視爲「虎字頭」,雖然重碼候選增加,但檢索起來更加快捷。
  3. 我更希望規則上不要太複雜,防止打字的時候思路被打斷,比如判斷主副根、判斷取不取次末根、字的結構是上下還是左右等。

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

  • 避免五筆的結構碼,但發揮它字根按鍵盤分區的優勢。
  • 避免鄭碼的全簡不一致,但發揮它雙編碼的特徵。
  • 避免徐碼的取回頭碼的特點,但發揮它繁簡通打的優勢。
  • 避免亂序字根,但發揮它規則簡單和動態重碼低的優勢。
  • 避免鄭碼、徐碼判斷取兩根還是三根的問題,以及取倒數第二根的特點。
  • 避免徐碼Z鍵頻率過重的特點,發揮五筆不用Z鍵的優勢,以及它的手感(按鍵頻率向中間靠攏)。

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

这里总结一下「宇浩输入法」对若干痛点的解决方法:

  • 宇浩输入法使用了和五笔一样的分键盘区域随机排布字根的方式。横区在键盘中排左侧,竖区在键盘中下排右侧,撇区在键盘上排左侧,捺区在键盘上排右侧,折区在键盘下排左侧。字根较为随机,这个考量是为了降重,同时不增加规则的复杂度。实际使用的时候,字根可以短时间内熟练,但规则的复杂度带来的痛苦是长久的。分区域分布,这是为了降低使用者上手的困难度。
  • 宇浩输入法部分借鉴了徐码的首根小码后置(回头码)的特点,但徐码的副根字无论在任何情况下都要回头,这等同于在输入单字的时候一直判断取三根还是四根,容易出错。宇浩输入法只有在编码不足四码(双根字)的情况下才需要补上首根小码。
  • 宇浩输入法使用了和五笔一样取一二三末根。而不是郑码和徐码那样,有时候取一、二、次末、末,有时候取一二末。这样选择,是因为倒数第二根的判断比较困难,打字的时候容易卡壳。

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

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

關於重碼

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

  • 打字,指的是對於常用字的輸入。這要求確定性,保證在最常見8000個繁簡漢字混合狀態下,大多數碼位不存在重碼字,可以進行盲打。如果有重碼,也可以通過簡碼規避。
  • 檢字,指的是生僻字輸入,要求輸入方案提供包括CJK的全部漢字。這部分的輸入不需要過分追求低重碼,因爲對於一個生僻字,就算輸入法低重,你也肯定要看一下屏幕進行確認。相反地,應該以便捷爲主,部首的變化形態應當進行歸併,而不是爲了規避重碼而強行分開。當然,儘量保證 GBK 字集下單個碼位的重碼數量不超過5個,防止過度翻頁。

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

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

關於編碼規則

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

  • 字根取一、二、三、末,優於取一、二、次末、末。這是因爲倒數第二根需要進行一些判斷,不够直觀。
  • 字根分開,不如字根靠攏。舉例爲,「襄」拆成「衣口口一龷」,不如「亠口口一龷𧘇」直觀。「衍」拆成「行氵」不如「彳氵亍」直觀。
  • 字根是獨體,勝過字根是其他字根的組合。避免音,比,羽等字根,這樣會造成判斷上的困難。如果有,也應當儘量讓它們的大碼相同。如,髟、镸、長的大碼應該在同一個位置上。
  • 分主副根,不如不分。因爲主副根需要進行一次判斷,以決定到底第三個根取「次末」還是「末」。
  • 無結構碼,比有結構碼好。因爲結構碼需要判斷字的構架。
  • 首根小碼不後置,比後置好。因爲後置首根小碼,會擠佔一個主根的大碼或末根的小碼,如果判斷首根失誤,會造成回改。

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

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

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

宇浩輸入法的規則如下:

  • 取一、二、三、末根大碼
  • 不足四碼時,補上末根小碼
  • 仍然不足四碼時,補上首根小碼(如果是v不用補)

關於字根分佈

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

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

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

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

  • 大碼按鍵盤分大區。(分區上YHN三鍵和五筆不同)
  • 大區内比較亂序。
  • 字根小碼用拼音提示。(某些字根用v鍵)

關於拆分規則

優先級:

少 順 散 連 交 斷 美 大

直觀的意思:

  • 包圍不拆散,比如昜。
  • 豎變斜是變形。

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

字形

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

  • 冫和ㄑ都拆成二
  • 日曰除卻「曰汩㫚」外都一併爲「日」
  • 木朩𣎳字源不同,但已經混同,术朮亦同。故而不作區分。