批馬拉錘「無頭倉頡」

2023年4月4日是一個重要的日子,這一天,愚蠢可笑的馬拉錘發表了他的傑作:無頭倉頡。

廢話警告

倉頡Rhapsody:不分割字首字身的倉頡

作者:馬拉錘

發表於:4-4-2023 22:38:53

文章地址:https://www.chinesecj.com/forum/forum.php?mod=viewthread&tid=195719

雖然普通人可能一無所知,但鄭碼在形碼輸入法界相當有名。

它之所以有名,是因為它首先采用了一種非常不同於其他輸入法的思路。

以「鵏」為例。

大易輸入法是這樣取碼的:
先取出「甫」,「甫」在「6」鍵。
再取出「鳥」,「鳥」在「H」鍵。
因此得出取碼「6H」。

五筆98是這樣取的:
先取出「甫」,「甫」在「S」鍵。
再取出「鳥去掉灬」,「鳥去掉灬」在「Q」鍵。
再取出「灬」,「灬」在「O」鍵。
最後,根據末筆筆形和字形結構補一識別碼。
得出取碼「SQOY」。

但鄭碼輸入法是這樣取的:
先取出「甫」,「甫」雖然在「F」鍵,但是需要用「FB」代表「甫」。
再取出「鳥」,「鳥」雖然在「R」鍵,但是需要用「RZ」代表「鳥」。
得出最終取碼:「FBRZ」。

最後還想提關於五筆86的一些設計。
一些人在學習五笔86時,抱怨為何五笔86的字根要「缺胳膊少腿」。例如,Q鍵上的一些字根就非常典型,「犭」沒了「丿」,「鱼」沒了「一」。
看了上面的幾樓,大家不妨考慮一下這樣設計的理由。假如這些字根不「缺胳膊少腿」,那麼「猎」和「䱜」和「𱇷」、「狗」和「𬶋」和「鉤」、「钓」和「魡」和「𬶄」、「鯉」和「鲤」和「狸」和「锂」和「鋰」…都會重碼

所以,五筆86通過「缺胳膊少腿」的方式,在這幾個部首上模擬了雙編碼。儘管五筆86是公認的單編碼輸入法,但在這幾個部首上卻有雙編碼的特性。

因此,現在
「鲤」取「QGJF」。
「鯉」取「QOJF」。
「锂」取「QJFG」(G為識別碼)。
「狸」取「QTJF」。

但是,由於五筆本質仍然是單編碼輸入法,所以「鋰」和「锂」仍然是要重碼的。

這種設計同樣是有缺點的。因為五筆86打二字詞取每個字的前兩碼,所以「狡猾」、「狼狈」、「狐狸」等字都是「QTQT」,造成大量的重碼。也就是說,在這裏,王永民為了打單字時的方便,捨棄了打詞時的一些方便。

雙編碼的設計,包括倉頡的隱式雙編碼同樣不是完美的,存在一些缺點。這些,也許下次再聊。

蘋果在20世紀末,通過引入NeXTSTEP系統,將其完全定製成Mac OS 9的模樣,作為測試版發佈出來,這個Rhapsody,就是OS X的前身,可以說是一次徹底的改變。

因此,我在這裏也想借用Rhapsody(狂想曲)的名稱,來命名這個倉頡,它就叫倉頡Rhapsody,或倉頡狂想曲。

有些人會感到很奇怪,為什麼要給一個字根兩個編碼,這不是徒增煩惱嗎?

感到疑惑的大家不妨考慮這種情況,如果我們把「礻」和「衤」都放到倉頡的「L」鍵上,會出現什么結果?

很顯然,大量的字會出現重碼,例如
LSH:「𥘉」、「初」
LLWL:「神」、「𫋵」
LG:「社」、「𬡃」
LL:「祌」、「衶」
LOII:「𮁣」、「袊」
………

我們稱這種重碼為「結構性重碼」。

漢字部首繁多,不同的字可能像上例一樣,擁有不同的部首,但其餘部分完全一样。這給輸入法的設計帶來了很大的挑戰。因為,不同的部首,尤其是下轄的字特別多的部首如果放到同一鍵,很容易「撞車」,出現「結構性重碼」。

很不幸的是,美式鍵盤上的拉丁字母只有26個,即使把數字和符號鍵利用於輸入,也只有40多個鍵。但是根據《康熙字典》,漢字有214個部首。假如把這些部首都放到鍵盘上,結構性重碼豈不得上天?即使捨棄掉一些部首,常見的部首仍然非常之多,非常容易撞車。

那怎麼辦呢?

鄭碼採取了一種非常聰明的方法。部首可以在同一鍵上,這個鍵被稱作「區碼」。比如在鄭碼中,「礻」和「衤」都在「W」鍵上。
為了區分它們,鄭碼給它們增加了一個「位碼」。「礻」的位碼是「S」,而「衤」的位碼是「T」。
所以,「初」的完整編碼是「WTYD」,而「𥘉」的編碼是「WSYD」。因此,雖然「礻」和「衤」同佔一鍵,重碼被完美地離散開來。

所以,鄭碼用1至2碼來代表一個部首,這做法相當於模擬了26*26鍵的鍵盤,在這個鍵盤中,組字能力強的部首可以找到它們的去處,不用再撞到一起去了。這種設計被稱為「雙編碼」。

這種設計是非常高明的。因為,這樣設計意味着簡繁部首有區分開來的可能。對於普通的輸入法而言,「設」和「设」幾乎必定重碼,但雙編碼的輸入法則有可能不重碼。只要給「言」和「讠」不同的位碼,它們就可以被區別開來。

雖然鄭碼在設計時並未認真考慮離散簡繁這一點,但是後來許多輸入法借鑒了鄭碼並做出了改進,如徐碼。

有人可能會想到,倉頡輸入法在手冊裏並沒有這樣規定,那麼倉頡是單編碼輸入法嗎?

和表面上看起來的不同,倉頡也是一種雙編碼輸入法。

我們可以想一想我們是怎麼取碼的。首先,我們要先一刀割出字首。儘管字首不等於部首,但是字首經常是一個部首。

然後,我們給字首取碼,最多兩碼。
例如,「課」的字首是「卜口」(YR)。
再例如,「课」的字首是「戈女」(IV)。

我們很容易發現,「言」在作字首時會有兩碼,而且和「讠」不同。
對比鄭碼,我們會發現倉頡雖然沒有作出雙編碼的規定,但一個部件在字首和字身時往往會取固定的編碼,如果把這些編碼列出來,就非常類似於鄭碼的字根表。只不過,這並不要求任何的記憶。倉頡以小字根、字首字身這種很靈活的方式實現了雙編碼。

倉頡的做法有其優點。

通過這種做法,學習倉頡時只要記憶一個很小的字根表就夠了,不用記憶龐大的雙編碼字根表。而且,區分字首字身意味着檢索上有其優勢。例如,字身為「HAF」的字很可能就是帶「鳥」的字。

但是,這種做法同樣有其劣勢。
當一個字為上下形字時,字首字身的划分顯得很麻煩。 例如,「玄」是組合字就很容易令人感到迷惑。
再例如,細微的字形變化也可能導致字首字身出現改變,「無」就是一例。

為了解決這個問題,蒼頡檢字法規定上下型字僅在幾種特殊情況下當成組合字,否則一律作為整體字。但這種做法也有缺點,因為漢字實在太複雜了,幾種特殊情況何時適用又會造成爭議。

不能採用大字根是這種方案的優勢,也是劣勢。因為細微的字形變化就可能導致取碼改變,由此導致重碼增加。

由此,我生出一種想法,即利用鄭碼的規則,但將字根表中的區碼-位碼換成倉頡的頭尾碼。

例如,「贝」在鄭碼中取「LO」,但倉頡頭尾碼是「BO」。
「足」在鄭碼中的區位碼是「JI」,但倉頡頭尾碼是「RO」。
通過這種置換,倉頡字根表退化為一種助記方式,鄭碼也套上了倉頡的皮。
由於鄭碼不用分割字首字身,所以這種方式製造出來的「倉頡」也不用劃分字首字身了。

於是,我通過修改鄭碼的字根表,自動編碼後得出了以下的編碼:

個 owjr
倌 ojrr
倍 oyr
倎 obtc
倏 olki
倐 olhf
們 oan
倒 omln
倓 off
倔 osuu
倖 ogtj
倗 obb
倘 ofb
候 olso
倚 okmr

可以看到,上述的編碼和倉頡原編碼有很大的相似度。

通過這種方式,原倉頡用戶可以很快地學會這種方案。

但是,我又發現鄭碼的一些編碼方式,尤其是在三基根字中可能會造成比較嚴重的繁簡重碼,與原版倉頡也相差較大。

例如,按鄭碼規則,

「測」→「氵貝刂」,如果套用倉頡的頭尾碼,全碼會是「E BC LN」,簡省後是「EBLN」(水月中弓)。

「测」→「氵贝刂」,如果套用倉頡的頭尾碼,全碼會是「E BO LN」,簡省後是「EBLN」(水月中弓)。

兩者出現重碼,也和原版倉頡有一些差異。

但如果修改成三基根字取頭+頭尾+尾的話,就會是「EBCN」(水月金弓)和「EBON」(水月人弓)了,不仅和原版倉頡一致,還避開了重碼。

按這種規則,上述示例的編碼是:

個 owjr
倌 ojrr
倍 oytr
倎 obtc
倏 olki
倐 olhf
們 oan
倒 omin
倓 off
倔 osuu
倖 ogtj
倗 obb
倘 ofib
候 olso
倚 okmr

 

尹評

命名

首先評論它的命名,馬拉錘把它命名為「倉頡Rhapsody、倉頡狂想曲」,這符合了馬拉錘一貫的搞笑風格,但不太好記。既然馬拉錘宣稱這是一個不用分割字首字身的倉頡,那麼往下我將把它稱作「無頭倉頡」。

最大的問題

無頭倉頡最大的問題就是:它並沒有做出來,而是只寫了篇語氣活潑的介紹文章。這篇文章也是戛然而止,我們怎麼知道他的這個想法到底能否實現呢?

依馬拉錘這種有好東西就願意分享,以顯示自己高明的性格,如果馬拉錘有做出來的話,他一定會第一時間分享出來的。他既然沒有分享,可能就是在製作過程中遇到了難題,最終沒有做出來。

所遇難題

那麼馬拉錘到底遇到了哪些難題呢?下面我們來分析一下。

首先,馬拉錘如果要把鄭碼的字根置換成倉頡的,那他就必須首先拿到鄭碼的「字根對應表」,即每個字的取碼所對應的字根。

問題是,這個東西是否存在?馬拉錘有沒有拿到?

其次,鄭碼規則不是馬拉錘想像的那麼簡單,鄭碼還有主根,副根,有二字母詞組,有三字詞,某些字根還是三編碼。這些都不是普通的「雙編碼」,無法簡單置換。

再者,鄭碼的某些雙編碼字根,很可能在倉頡中已經是一個字元了,比如「衤」。到底是要把它分成兩碼還是仍然保持不變,難以抉擇。

因此,馬拉錘要把鄭碼改編成「無頭倉頡」,就會遇到很多無法克服的困難。

「無頭倉頡」還是要背字根的

「無頭倉頡」並不像馬拉錘所宣傳的那麼美好。比如,當我們用「無頭倉頡」要打出「焉」字時,雖然不需要再劃分字首了,但是卻出現了一個更大的難題:「正」是不是鄭碼的字根?

再如「甄」字,「垔」並不是一個常見的部首。如果要用無頭倉頡來為這個字取碼,那就需要知道「垔」是不是鄭碼字根,如果不是,那就要把「覀」視為它的字首!還不如倉頡原來的劃分字首呢!

也就是說,雖然無頭倉頡不需要劃分字首了,但是卻要背下更為繁雜的鄭碼字根

雙編碼的缺點

馬拉錘在他的文章中,對鄭碼的「雙編碼」大為贊賞。

那麼雙編碼真的有那麼好嗎?其實不然,所有的雙編碼形碼,都有一個重大缺陷,那就是字根數量爆表。比如鄭碼和徐碼。

雙編碼好在哪裡?

實際上馬拉錘並不真正理解雙編碼的好處,而我用過鄭碼兩年,因此我十分了解雙編碼的優點。

鄭碼的精髓其實在於簡碼與全碼的分離,所有單字的全碼是四碼,這樣一來,所有的高頻字、常用字就可以通過人工簡碼(單編碼)編進前三碼中。

所以當我們用鄭碼打字時,會有一種非常舒適便捷的感覺,打一篇兩千字的文章,幾乎都可以用簡碼完成,可能只有幾個字是用到全碼的。

五筆和倉頡也是雙編碼?

馬拉錘聲稱,五筆和倉頡也是雙編碼。

實際上,五筆和倉頡只是有部份特性與鄭碼相似,但有更多的不同。

首先,「雙編碼」就真的要為一個字根編區位碼了,而五筆和倉頡並未像鄭碼一樣,為兩百餘個副根都編固定的兩個碼。

對於五筆而言,它只有極少數的字根算是雙編碼,比如「犭鱼马牜」,但除此之外就都是單編碼了。

對於倉頡而言,它只有「字首取兩碼且字首是一個部首」時,才能說它雙編碼。比如「訁」開頭的字,你可以說倉頡的「訁」就像是區位碼,編作「卜口」。然而,倉頡還有大量的字,字首只取一碼。更不用說倉頡還要劃分次字首了,取碼規則完全不同。

所以,倉頡和五筆並不是雙編碼,只是有少部份的字跟鄭碼相似而已。馬拉錘這次丢臉丢大了。

倉頡的字首劃分挺好

馬拉錘不知道的是,實際上倉頡的字首劃分,是一個比雙編碼更為聰明、偉大的發明。

再拿「甄」為例,如果要用雙編碼,則你需要記得「覀」是不是一個字根,而倉頡根本不需要記,只需要直接劃分字首之後取首尾碼即可。

因為劃分字首,就不必去記那麼多的字根了,極其簡單方便。

而馬拉錘之所以會把「不用分割字首字身」說成是一個「優點」,是因為倉頡有少量漢字的字首劃分存在爭議。但那些存在爭議的畢竟是極少數,就如同變性人和同性戀在人群中是極少數一樣。

馬拉錘給跪了

馬拉錘搞不懂我以上說的這些道理。他作為大馬倉友的管理員,以及各種倉頡社區都混上了領導,竟然贊美鄭碼,貶低倉頡,那他為何不直接去用鄭碼呢?

馬拉錘的這種做法,就如同《變形金剛•起源》中的元祖金剛,向五面怪下跪。

總結

馬拉錘作為倉頡社區目前的實際領導人之一,名不副實。他做了很多無恥的事,說了很多不好的話。只要是他發表的理論,都是漏洞百出,經不起推敲。

自我認識馬拉錘開始,我就知道他是一個不踏實的人。老是談些很奇怪很可笑的議題。名利心強,心態差,脾氣差。陳強勤把這種人設為管理員,實在是倉頡輸入法的劫難。

希望倉頡民衆能硬氣起來,採取行動,不要再讓馬拉錘這種沒有道德的人再做管理員了,他這樣只會鬧更多的笑話。


本文自豪的使用【哈哈倉頡】輸入漢字,哈哈倉頡——完全不改變任何取碼規則的四碼倉頡。

Leave a Comment