編注:我們會(huì)不定期挑選 Matrix 的優(yōu)質(zhì)文章,展示來(lái)自用戶(hù)的最真實(shí)的體驗(yàn)和觀點(diǎn)。 文章代表作者個(gè)人觀點(diǎn),少數(shù)派僅對(duì)標(biāo)題和排版略作修改。
又名:為了不患腱鞘炎,我學(xué)了一個(gè)追求極致碼長(zhǎng)的小眾輸入法
如果您從未接觸過(guò)字形輸入法,可先閱讀北鸮的這兩篇文章:
嘗試了七種形碼輸入法后,我想聊聊在 2022 年用五筆這件事
為了打字更爽,我學(xué)了一個(gè)追求極致性能的小眾輸入法
本人去年的拙作 如何制作一款字形輸入法 里也作了簡(jiǎn)短介紹,朱宇浩所作瓊林?jǐn)X英亦可作為百科全書(shū)速查。
關(guān)于本人:聊天打字用星空鍵道,書(shū)面打字用日月,打單速度 80 字/分鐘。之前淺學(xué)過(guò)小鶴音形、倉(cāng)頡五代和虎碼,因需求不同而放棄。在轉(zhuǎn)日月之前已使用近三年徐碼,因手感(Z 鍵頻率)問(wèn)題放棄。
不使用空格鍵的兩種方式
以 86 五筆為例,單字全碼碼長(zhǎng)要么是三要么是四,在開(kāi)啟最大碼長(zhǎng)頂屏,關(guān)閉唯一候選自動(dòng)上屏時(shí),僅三碼字上屏需要空格。輸入法為提高效率還使用簡(jiǎn)碼,所有簡(jiǎn)碼上屏都需要空格。在只打一二簡(jiǎn)的情況下,使用北語(yǔ)邢紅兵教授的字頻表加權(quán) 86 五筆碼表,65%的情況需要打空格,即便只打一簡(jiǎn)也有高達(dá) 47%的情況,無(wú)疑對(duì)腱鞘炎患者非常不友好。
![]()
86 五筆平均四次擊鍵中有一次空格
那么,有沒(méi)有不需要空格的輸入法?2005 年,戴石麟帶著論文《漢字編碼輸入法研究》橫空出世,提出首款可脫離空格打字的頂功輸入法。
以聲筆簡(jiǎn)碼為例,頂功輸入法通常將常用于漢字編碼的 26 個(gè)字母分為兩個(gè)集合——B:{aeiou} 與 A:{bpmfdtnlgkhjqxzcsrywv}——即元音字母和輔音字母,并規(guī)定漢字編碼只能以 A 中字母開(kāi)頭,可表示為 A、AB、ABB、ABBB。當(dāng)用戶(hù)輸入 AA、ABA 等不存在的編碼時(shí),軟件就知道上一字已經(jīng)結(jié)束,自動(dòng)將其頂上屏。由于在輸入過(guò)程中消除了空格,漢字的實(shí)際編碼等同于原始編碼,這便是頂功碼的第一種定義。
![]()
聲筆系列碼宣傳圖
為什么是 21:5?漢字可表示為橫豎撇點(diǎn)折五種筆畫(huà),而字母中元音字母也有五個(gè),所以 21:5 是易學(xué)性最好的分類(lèi)法。當(dāng)然 20:6、16:12 的分割的頂功碼也是存在的,詳見(jiàn)頂功集萃。
如果我們將空格(后文表示為 _)視為 B 集合的唯一元素,即 B:{_}, A:{a-y},則五筆的實(shí)際編碼可表示為 AB、AAB、AAAB、AAAA。仔細(xì)觀察會(huì)發(fā)現(xiàn)任意編碼都不是其他編碼的前綴,像這樣的編碼我們稱(chēng)為前綴碼。而觀察前文聲筆碼的表示方式,可發(fā)現(xiàn)頂功碼并不滿(mǎn)足前綴碼的條件,故非前綴碼是頂功碼的第二種定義。
對(duì)于五筆這類(lèi) B 集合只含空格的前綴碼,又可稱(chēng)作空格前綴碼。由于空格前綴碼的簡(jiǎn)碼必帶空格,在優(yōu)化簡(jiǎn)碼效率的同時(shí),空格的頻率也會(huì)越來(lái)越高:以卿云為例,光只打一簡(jiǎn)就高達(dá) 67%,算上避重三簡(jiǎn)甚至能到達(dá) 90%!
![]()
卿云,越優(yōu)化越多的空格
有沒(méi)有通用的方法降低空格前綴碼的空格頻率?
一是整句輸入,又叫智能聯(lián)想。原理很簡(jiǎn)單,只要詞庫(kù)夠大,語(yǔ)言模型就能自動(dòng)分割人類(lèi)無(wú)法分割的編碼,相當(dāng)于外置大腦,目前市面上的主流輸入法軟件(某狗、某度)都自帶此方法。但對(duì)于 RIME 這類(lèi)離線輸入法,即便是打單用戶(hù)也要部署一個(gè)超大詞庫(kù)。
![]()
三碼整句
二是頂功化改造。我們觀察到二簡(jiǎn)的占空格頻率的 20 %,所以只要將其改造成二碼頂就可以大幅提高效率。此時(shí)編碼方式為 AA、AAAB、AAAAB,由于不存在 AAAAA 編碼,用戶(hù)每打出第五個(gè) A,前兩個(gè) A 的簡(jiǎn)碼字就會(huì)自動(dòng)上屏,相當(dāng)于用四根字的碼長(zhǎng)來(lái)?yè)Q取二簡(jiǎn)字碼長(zhǎng)。
![]()
徐碼五二頂
2025 年,朱宇浩提出了一個(gè)新想法:如果前綴碼的 B 集合不使用空格,改用與聲筆相同的 aeiou,同樣能滿(mǎn)足頂功碼的第一種定義,即無(wú)空前綴碼與頂功碼在數(shù)學(xué)上等價(jià),可視為廣義頂功碼。
優(yōu)勢(shì)與劣勢(shì)頂功分析
由于不用打空格,頂功碼的簡(jiǎn)碼效率(單字簡(jiǎn)碼縮減的實(shí)際碼長(zhǎng))比前綴碼要高一些:五筆實(shí)際碼長(zhǎng)恒定為四(四碼定長(zhǎng),以下簡(jiǎn)稱(chēng)四定),可得 25 個(gè)二碼上屏一簡(jiǎn)字所減短的實(shí)際碼長(zhǎng)為(4-2)x0.2590 = 0.518;聲筆簡(jiǎn)碼同為四碼定長(zhǎng),21 個(gè)一碼上屏一簡(jiǎn)字效率為 (4-1)x0.2381 = 0.7143。在缺少 4 個(gè)一簡(jiǎn)的情況下,聲筆的一簡(jiǎn)效率比五筆多 0.1963,這便是頂功的優(yōu)勢(shì)。當(dāng)然這是假定簡(jiǎn)碼只按字頻無(wú)理設(shè)置的情況,五筆的實(shí)際一簡(jiǎn)效率為 0.41,聲筆實(shí)際一簡(jiǎn)效率為 0.61。
![]()
注意:簡(jiǎn)碼效率(越大越好)只能在定長(zhǎng)輸入法之間比較,最大碼長(zhǎng)不同的輸入法之間須直接比較動(dòng)態(tài)碼長(zhǎng)(越小越好)。
爭(zhēng)議:空格鍵的輸入方式與其他按鍵不同——一是拇指不用移動(dòng),二是有拇指作為最有力的手指,敲擊速度也更快。空格鍵增加的實(shí)際碼長(zhǎng)與其他編碼增加的碼長(zhǎng)有極大的手感差異,故而頂功縮減碼長(zhǎng)帶來(lái)的好處并沒(méi)有數(shù)據(jù)那么大。
如此大的優(yōu)勢(shì),自然不會(huì)是天上掉下的餡餅。由于聲筆簡(jiǎn)碼的后三位編碼只能在 B 集合中取,聲筆簡(jiǎn)碼的可用全碼空間(可能的編碼組合)為 21x5^3=2625,就算加上簡(jiǎn)碼的 21+21x5+21x5^2 也只有 3276,連通用規(guī)范漢字表的 8105 個(gè)漢字都無(wú)法完全容納,重碼重上天!與之相對(duì),只要 ,五筆的全碼空間為 25^3+25^4=406250。如此懸殊的數(shù)據(jù)差距,注定聲筆簡(jiǎn)碼實(shí)際上無(wú)法打單,只能與簡(jiǎn)拼結(jié)合作為聲筆系列碼的入門(mén)方案。
注意到,B 集合是聲筆簡(jiǎn)碼輸入法空間如此之小的罪魁禍?zhǔn)祝砸黾尤a空間有幾種思路——擴(kuò)大全集 U(即 AUB)、擴(kuò)大 B 集合、減少編碼中 B 的數(shù)量、增加最大碼長(zhǎng)。
擴(kuò)大全集 U:讓更多的鍵位參與編碼,比如 30 鍵輸入法。
增加最大碼長(zhǎng):每加一位就乘五,力大磚飛。
擴(kuò)大 B 集合:編碼空間為 (26-B)x B^3,運(yùn)用高中數(shù)學(xué)知識(shí)可知編碼空間在 0-19 之間單調(diào)遞增。但此方法的問(wèn)題是易學(xué)性要降低,而且五筆畫(huà)把折拆成順時(shí)針和逆時(shí)針變成六筆畫(huà)就沒(méi)得再加了。
改變編碼方式:如果我們讓編碼第二位也能取 A,表示 AABB、ABBB 如何?25^2x5^2=15625,能容納所有的通規(guī)字,這便是聲筆飛單的編碼方式。
聲筆飛單的最短上屏碼長(zhǎng)為 2(即最后一個(gè) A 在編碼中的位置),稱(chēng)為二碼頂;同理,聲筆簡(jiǎn)碼為一碼頂。二碼頂能自動(dòng)上屏的無(wú)空最短編碼是 AA/AB,實(shí)際二簡(jiǎn)效率為 0.992,而五筆的實(shí)際一二簡(jiǎn)效率為 0.776,但聲筆使用特殊二簡(jiǎn) AB 的代價(jià)是簡(jiǎn)全不一(簡(jiǎn)碼不是全碼的前綴)。如果能接受再打 20% 的空格一簡(jiǎn),聲筆飛單最終的一二簡(jiǎn)效率為 1.4 左右。
![]()
有二碼頂自然就有三碼頂、四碼頂……但人的記憶力和簡(jiǎn)碼設(shè)置均存在邊際效應(yīng),一二簡(jiǎn)共 21x27=567 個(gè)簡(jiǎn)碼其實(shí)就是初學(xué)者的極限了。所以我們可以給出采用聲筆一二簡(jiǎn)的動(dòng)態(tài)碼長(zhǎng)公式 L-max(L-N,L-2)x0.2048-max(L-N,L-3)x0.2720-0.2240x(L-2) 可用全碼空間公式為 21^x5^{L-N},其中L=最大碼長(zhǎng),N=最短上屏碼長(zhǎng)。計(jì)算得出下表:
![]()
不難發(fā)現(xiàn),四定二碼頂就已經(jīng)滿(mǎn)足常用字集的最短上屏碼長(zhǎng),三碼頂雖然提升四倍的編碼空間,但碼長(zhǎng)由于 AA 二簡(jiǎn)要打空格反而下降,而這編碼空間依舊無(wú)法滿(mǎn)足全字集 101984 個(gè)漢字。
又因?yàn)樗亩崭袂熬Y的動(dòng)態(tài)碼長(zhǎng)在 3±0.1,六定三碼頂負(fù)收益首先排除,剩下的六定二碼頂 ABB 簡(jiǎn)相比五定三碼頂有更高的簡(jiǎn)碼效率,同時(shí)全碼空間也更大,六定二碼頂勝出。
結(jié)論:在 21:5 的分類(lèi)下,頂功要么是滿(mǎn)足常用字集的四定二碼頂,要么是滿(mǎn)足全字集的六定二碼頂。
本人用的鍵道就是六定二碼頂。
無(wú)空前綴分析
假定存在一個(gè)四定無(wú)空前綴碼,總編碼空間為 AAAA、AAAB、AAB、AB、B=243101,雖然只有空格前綴碼的一半空間,但對(duì)于目前漢字的總量已經(jīng)夠用,這就是宇浩靈明的編碼方式。當(dāng)然靈明由于取主副根,部分 AB 形式的編碼為全碼,實(shí)際為四不定(最大碼長(zhǎng)為 4 的不定長(zhǎng)編碼)。
雖然同最大碼長(zhǎng)的無(wú)空前綴比頂功重碼更低,但由于無(wú)空前綴碼在不打空格的情況下無(wú)法使用 AA 簡(jiǎn),必須記憶 AAB 形式的三簡(jiǎn),對(duì)人的記憶負(fù)擔(dān)較大。
可算出靈明的簡(jiǎn)碼效率為 0.320179+0.232354+0.133855=0.6863。但由于是四不定,靈明的全碼動(dòng)態(tài)碼長(zhǎng)約為 3.6,最后得出的實(shí)際動(dòng)態(tài)碼長(zhǎng)約為 3。
![]()
靈明簡(jiǎn)碼效率
由于前綴碼的簡(jiǎn)碼恒定為 B、AB、AAB,當(dāng)最大碼長(zhǎng) L 增大時(shí),需記憶的簡(jiǎn)碼更多,但動(dòng)態(tài)碼長(zhǎng)不會(huì)再提升,此處就不再列表作比。直接說(shuō)結(jié)論:不定無(wú)空前綴碼最大碼長(zhǎng)要么是四要么是五,優(yōu)化方向?yàn)闇p小需記憶的簡(jiǎn)碼量,優(yōu)化方法為設(shè)置主副根。
自無(wú)空前綴的概念問(wèn)世,目前已有日月(大亂小音托)、靈明(大亂小音托主副根)、松煙(純亂)、清韻(全音托主副根)四種方案,各位讀者如果對(duì)常見(jiàn)輸入法的空格占比有所顧慮,不妨一試。
不過(guò)頂功類(lèi)方案還有一個(gè)問(wèn)題:目前僅 RIME 能較好支持,如果日常打字環(huán)境不能裝就完蛋了。
閑話:輸入法宣傳之道
比如虎測(cè)評(píng)網(wǎng)的表里有個(gè)大跨排,因?yàn)榛⒋a算法專(zhuān)門(mén)優(yōu)化過(guò);
比如宇浩測(cè)評(píng)網(wǎng)表里有繁體數(shù)據(jù),因?yàn)橹挥兴谧龊?jiǎn)繁通打;
比如聲筆宣傳實(shí)際碼長(zhǎng)低得離譜,但是出滿(mǎn)二三簡(jiǎn)且不出全;
比如三鄭宣傳動(dòng)態(tài)選重率 0.15%,但其實(shí)智能選重誰(shuí)都能開(kāi)。
雖然之前曾說(shuō)一切需求不重要,但搞清數(shù)據(jù)的條件還是很重要的。
另:之前看到有人說(shuō)簡(jiǎn)繁通打要多記一倍字根,令人莞爾。實(shí)際上,以宇浩拆分為例,一共只有 22 個(gè)繁體專(zhuān)用字根(鳥(niǎo)烏魚(yú)馬風(fēng)來(lái)車(chē)長(zhǎng)門(mén)鬥齒飛見(jiàn)貝鹵僉韋咼黽)。
https://sspai.com/post/105111?utm_source=wechat&utm_medium=social
作者:JIgsaw
責(zé)編:廣陵止息
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.