尝试寻找大字集、无需选字的输入方案

大家好,

我正在尝试寻找一种大字集、无需选字的输入方案,并挂载于 Rime 或其它输入法引擎上。除了常见的拼音、五笔、仓颉等,搜索引擎还找到了许多我从前没有见过的输入方案。

我觉得我理想的输入方案可能是这样的:

  • 支持尽可能多的 Unicode 中日韩统一表意文字,因此可以无需切换而同时输入简化汉字及传统汉字,并且也可以输入日本、朝鲜半岛、越南等的表意文字。
  • 重码率尽可能低,或支持以尽可能有规律可循的方法筛选重码字,因此可以无需选字。
    • 例如,仓颉通过在字码前添加不同数量的字母「X」筛选重码字。虽然无法从一个字本身推导出所需的「X」的数量,但是特定数量的「X」总是返回特定的字,因此少量地死记硬背之后仍然可以实现不选字而直接输入想要的字。此外,也许另有其它更好的方法筛选重码字。
  • 通过固定码长或其它方式以少用空格,甚至不用空格。

这些理想当中,优先级最高的可能是「大字集」,其次是「无需选字」。最后的「不用空格」如果有的话是一个闪光点,但没有也没关系。

为了实现这些理想,牺牲其它方面也是完全可以接受的(在不考虑直接键入 Unicode 码等特殊方法的情况下),包括但不限于:

  • 学习难度高一些也没关系。
  • 能够输入单字即可,不一定需要输入词组(转念一想,其实没有词组或许反而会更加方便一些)。

我目前正在使用仓颉,并简单浏览了郑码的资料。仓颉和郑码看起来都支持 Unicode 中日韩统一表意文字,也支持部分扩展区的字,并且相对来说重码率也非常低。不过还是有下面一些因素让我想再试着探索探索其它的输入方案:

  • 仓颉字码最长有五个字母,并且需要用空格确认选字,看起来需要比很多其它输入方案按键更多次。
  • 郑码看起来可能使用左手的频率相对右手较高,并且可能需要频繁使用左手小指。
  • 仓颉偶尔有些字码匹配到过多重码字,无法使用字母「X」筛选,这种情况下看起来只能手动在候选列表中选字。
  • 郑码看起来可能暂时没有筛选重码字的方法,因此可能所有的重码字都需要手动选字。

通过搜索引擎,我得以找到许多从前没有见过的输入方案。这些输入方案的用户数量看起来要比拼音、五笔、仓颉等输入方案要少,但理论上,如果一个输入方案提供了可以用于 Rime 引擎的输入方案文件,那么就仍然可以很方便地使用。另一方面,在较为大众的输入方案当中,仓颉和郑码看起来已经是相对来说最接近我的理想的输入方案了。因此,我现在主要在尝试探索这些较为小众的输入方案。

在我所查阅到的一些输入方案当中,有些比仓颉或郑码的重码率更低,但字集相对较小,或主要用于输入一个地区的字,而输入其它地区的字需要付出额外的努力,例如手动切换简化或传统汉字、为简化汉字手动选重、为传统汉字键入更长的字码等。

我想可能确实有一种(也许较为小众的)输入方案可以更加接近我的理想,只是我暂时还没有找到,所以希望请教大家的帮助。


编辑:

多谢大家的启发,也许问题可以这样调整,分成几种情况:

  • 不依靠候选项顺序,仅通过一个字本身的特征(例如上下左右包围结构、声母韵母声调等)来筛选重码字的话,有哪些输入方案的重码尽可能少。
  • 依靠候选项顺序来筛选重码字,并且设计最初就确定了每组重码字的先后顺序的话,有哪些输入方案的重码尽可能少。
    • 这种情况如果想要不必选字,那么可能有时需要一些死记硬背。不过,它所需要的死记硬背可能通常比没有预定重码字顺序的情况(例如全拼)要少一些。此外,它筛选一个字所需的额外步骤理论上是由设计者统一固定好的。
      • 例如,仓颉添加的字母「X」的数量是设计最初就决定的。而全拼的候选项顺序则没有一个固定的标准。
    • 但是,相对来说,在这种情况下,任何人想要为字集添加新的字时,如果这个新字与其它已有的字重码,那么可能就无法很快决定这个新字应该在这一组重码字当中排在第几位。
  • 也许还有更多可能的情况。

建议楼主说明一下您需要什么平台(或者说,运行在什么操作系统)上的输入法,这样也更方便大家推荐。

黄狗输入法
pc
支持五笔,拼音
支持最新unicode 15.1
https://www.cnprint.org/bbs/thread/197/328367/

首先拼音类的,就不要看了,只能从形码选。

仓颉、郑码、五笔,都是很成熟的输入方案。

它可以是任何平台的,因为我正在尝试借助 Rime 引擎使用它。看起来我可以用「输入方案」这个词代替「输入法」。

小众有一款,看起来似乎能实现你的部分需求

不过有个缺点:

請問樓主所說的「大字集」,大到一種甚麼程度呢?

是unicode cjk基本區 20902字,還是要加上ext-A,或者還要加上ext-BCDEFGHI呢?

虎码应该可以, 虎码支持多大的字集,定位是怎样的?虎码支持 UTF-8 范围内,汉字全字集,近10W字。
凪,哛,在知乎找到一篇越南语,很多方框,就不挑选字了

1 Like

短期来看,也许支持 Unicode 中日韩统一表意文字的基本区即可。

因为理论上,它可能已经涵盖了各个不同地区的表意文字的大部分构字部件。如果确实如此,那么即使还有一些扩展区的字暂时没有正式分配字码,未来理论上也仍然可以让任何人推导出字码。


编辑:不过,另一方面,如果一个输入方案在最初设计时就采取了更大的字集,那么理论上,设计者也许就有更大的可能参照着这个大字集来设计这个输入方案的细节部分,从而尝试在更大的字集范围内减少重码。

那麼倉頡已經實現了在unicode cjk基本區20902字的絕對無重。

但是不能用官方「前置X」的辦法,官方的這個辦法是非常low的,原因有二:

1.你不知道它有重碼,當你知道時,可能就要清空重打。

比如「亮毫」重碼,當你想打「毫」字,按了「yrbu」,這時你才知道它不是首選。

2.它只能處理兩三個重碼

如果像「uu出艸岀乢屾」這麼多的重碼,前置X根本處理不過來,難道要「XXXXX」才能打出「屾」?

所以,倉頡官方發明的「前置X排重法」,實在是low。

你好,樓主說的「大字集」指的是unicode cjk 20902字範圍,在此範圍,倉頡已經做到了絕對無重。

樓主說:

與此同時,我不認為手上持有一個可以輸入擴展區的漢字的碼表是一件好事,原因很簡單:重碼大增,又完全用不到。

官方的前置X既然已被我吐槽,我當然就不會去套用了。

後綴1234的問題在於,它用到數字鍵,跨度太逺,按不準。跟台灣注音一樣了。

一種聲稱無重的編碼方案,它不僅要有規律,且不應用到26字母以外的鍵。

不過話說回來,按以上標準,官方前置X的辦法,也確實沒有用到26字母以外的鍵。它的問題在於,它並沒能做到。

你把問題想簡單了。如果「uua」本身也是另一個字的編碼,那豈不是又會形成新的重碼?

如果「uua」因為有新的重碼而跳到「uub」,那還有何規律可言?一千五百多個重碼,難道都要人工躍遷?

在「有規則」的前提下,不能形成新的重碼,你去給鄭碼也來個「unicode cjk 20902字絕對無重」的方案,我來高山仰止。

常用字完全可以自己根据现有的方案来制定三码方案
其中涉及到1简、2简,还有一些二简词

「無需選字」這個要求太高了,倉頡和鄭碼都算為大字集而設計的輸入法,重碼率都還算可以。

鄭碼跟倉頡是完全不一樣的理念。

鄭碼是定長四碼,在cjk 20902字範圍內,好像只有三四個全碼是三碼的,比如「巡」。

鄭碼的簡碼,有時是123,有些是124,毫無規律可言,只能死記硬背。好在大多數是123。

鄭碼的這種特性,決定了鄭碼不可能做到在cjk 20902字內絕對無重。

另,據我所知,鄭碼就是在正常編碼的情況下,也有少量的無理碼,比如「去云」。倉頡在cjk 20902字,乃至ext-ABCDEFGHI擴展區,都沒有無理碼。

下面說倉頡為何能做到在cjk 20902字內絕對無重。原因很簡單,倉頡是不定長

據我統計,目前最好的倉頡碼表,它的不定長分布情況如下:

一:33
二:550
三:2865
四:10665
五:6789

上面統計的意思是,有33字是一碼全碼,550字是二碼全碼,依此類推。

同時,倉頡還有另一個鄭碼不具備的優點,那就是倉頡的正常編碼中,都沒有用到Z鍵。X鍵也只在整個碼表中出現了三百多次(其它鍵都是兩千到四千)。

這樣一來,倉頡就能在五碼之內,在26字母以內,套用一個規則,實現UNICODE CJK 20902字絕對無重

事實上倉頡已經做到了,我現在手上用的就是這個碼表。

我做了一個js小工具,把碼表扔進去就能自動生成無重碼表。

據我所知,目前只有倉頡可以做到在unicode cjk 20902字的範圍內絕對無重。

我並不把「簡碼」視為「不定長」,我們一般說的不定長指的就是全碼。原因很簡單,鄭碼不保證每個字都有簡碼。

你說鄭碼有很多的字,全碼是三碼甚至兩碼,這與我以前的認識不太一致。據我所知,鄭碼官方是盡可能的把編碼湊成四碼,以頂字上屏,免按空白鍵。所以鄭碼會有aavv這種主根加v的規則。

所以我猜測,你所說的「鄭碼也是不定長」,應該是把簡碼也算了進去。

鄭碼的簡碼是無規律的,是人工編的,因此我建議此話題討論暫時先不管簡碼。

不過,如果你想說,全碼所形成的重碼,都能依靠簡碼避重,這倒是一個有趣的想法。問題是是否能夠做到(在unicode cjk 20902字範圍內絕對無重)。


你說的加後綴Z就等同於選重,我同意你的說法。但是這並沒有違背我說的「在26字母內套用一種規則實現絕對無重」。為甚麼鄭碼或其它輸入法都做不到呢?

你可能也不喜歡按數字鍵,實際上形碼的唯一優點就是少按或不按數字鍵,否則跟拼音有何區別?乾脆直接用拼音算了,還有簡拼或雙拼,還能整句連打。

我舉個例子,在倉頡中,「文头达」是一組重碼,那麼我的避重方案是:

1.yk文头达
2.ykz头
3.ykzz达

這跟按數字鍵選重有何不一樣呢?當然不一樣,它們是當成普通編碼來打的,沒有超出五碼。形碼是有頂字上屏功能的,全碼沒有重碼才能頂上去。實現絕對無重,那就能使所有字都能有機會出現在首選。

當然這個方法不是強制的,你可以yk3輸入「达」,也可以ykzz輸入「达」。據我個人體驗,無論是手機,還是電腦,都是後者更舒適,因為3實在是太難按了。

如果你仍覺的加後綴Z就等於是按數字鍵選重,我還是那個問題:為甚麼鄭碼或五筆都做不到呢?

我補充一點,這種加後綴z的方案不存在「死記硬背」,因為當你打出「yk」時,「文头达」三個字是都顯示出來的,你的眼睛看到了「达」在第三個。這時你就知道加zz能打出「达」,不存在「死記硬背」。

倉頡官方的「前置X」才需要死記硬背。

鄭碼的規則是不可能有一碼和二碼全碼的,因為當你打一個主根,或兩個主根成字,那就需要填v直至四碼。這是鄭碼官方規則。

你應該還是把簡碼跟全碼混淆了,是否可以舉些例子?

如果能給出官方手冊的鏈接就更好了。

也有可能你用的是民間改良版碼表。鄭碼有一種碼表叫強制簡碼,當年我有聽說,但沒用過。

鄭碼官方不僅有手冊,還提供了官方碼表。我當年就保存有,後來不用就扔了。這跟倉頡不同,倉頡官方不提供碼表。

據我所知,鄭碼只有三個左右全碼是三碼,比如「巡」是其中一個,原因是「主根+副根」正好成字,這種情況極少見。