LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2359|回复: 5

浅谈输入法的码表种类及特性

[复制链接]
发表于 2007-7-14 08:04:17 | 显示全部楼层 |阅读模式
说到输入法,想来大家都了解。但对于输入法平台,相信多数人不甚了然,或有一个模糊的认识,但对其细节的认识却可能并不准确。
    自然,我个人认识甚浅,只因发现这儿关于输入法本身的贴子较少,故此抛块陋砖,望引来高人落玉,自是幸事。
    现在不少的人对输入法有着较深的认识,但苦于不会编程,因此,空有好想法却做不出真正的输入法。而输入法平台,就是给输入法码表提供支持,使其升变成能用的输入法。这样打个比方,即输入法码表像手机卡,而输入法平台则像手机本身,当较准确。
    由上可见,输入法平台,核心就是对码表的支持能力,然后是依此而来的各种外延功能。因此,当说一下输入法的码表种类及特性。依个人浅见,从输入法平台的角度,输入法码表可分为以下几种:
      
    一、按单字的全码码长,可分为单字全码码长固定类型、单字全码非固定类型。
    (一)单字全码码长固定类型的,典型的便属传统五笔,传统五笔的单字全码码长是四(也有少数字是三,如“去”这样非字根且取码信息量少的)。单字固定码长的,基本是单字全码为四。但在词上,则又可分为词码长固定与非固定类型。
    1、词码长固定类型。较典型的也是传统五笔。传统五笔的词码长也是四码。这样字词全是四码的类型的特点往往是单字能力较出色,至于在词量上则或中型或小型。但就此种码表的特点来说,字词能力还是较均衡的,总的来说是字重于词。
    2、词码长非固定类型。
    此种又可分为每个字词皆打空格确定型和前部连续四码连打型。
    a、每个字词皆打空格确定型。因为词码长不固定,因此“连累”了1类中单字能四码直接上屏的功能不能实现,因此,需要每打一个字或词,都得用空格或别的键确定。这种类型的码表是支持的词能力大大增强,单字的能力也能得到一定的保证。总的来说是词重于字。
    b、有人由于看到了a中模式中需要按大量的空格(对于熟手来说,空格也是累赘),因此,提出连续打时,前部四码自动一切分,遇到超过四码的词后,即打空格确定。此即“超级字词”模式。比如说自然码中有此模式,酷极有此模式。这种模式可能理解的人不多,我便举个例子说一下:
    比如说有以下几个字词:
    abcd 甲字(单字)
    ef 乙字(单字)
    efgh 乙词(词)
    abcde 丙词(词)

    若你按的码是abcd时,提示行上出现的是四码中的甲字,再接着打e,出现的是abcde代表的丙词——似乎没什么出奇的?再接下来打f,提示行上出现的却是“甲字”和“乙字”的组合,即因为是空码,因此自动四码一切分了。再打gh,即你打的码是abcdefgh,则你应该能推算出,提示行中是abcd甲字和efgh乙词的组合了。
    这种模式的好处很明显,即相当于在过去的四码字词一顶的基础上,加入了长码词空格送出的功能。但损失了单字的一级简码的自动顶功能——这不出奇,没有无副作用的东西的。
    (二)单字全码码长非固定类型
     单字全码码长不固定类型的,最典型的自然是全拼,全拼单字的全码码长少则一,多则六。现在来说,单纯打全码的全拼已经基本没有了,因为本身的码表的效率过低,因此往往以简拼及智能性作弥补。我觉得作为输入法平台来说,不宜搞全拼的,虽然用者最众,但毕竟先天效率低下(就算加了智能亦如此,即只能在闲聊时能应付,别的方面实在不行),因此,对全拼,只是这样提一下,不再多讲。
     单字全码码长不固定的还有别的类型的,比如说声笔码(包括声笔飞码),这个留待下边讲,因为这种编码有其特殊性。
    二、按码表是否含“顶功”特性,可分为传统式码表和顶功码表。传统式码表,上面说的都是,不再多讲,这儿就说一下一种新型的码表,即顶功式码表。
    所谓顶功,就是打了上字的码,不用空格送出,就可以直接打下边的码,从而上字的码被顶出,所谓“顶”功。
    就技术来讲,顶功就是通过“空码时自动截空码前的内容”来实现的。就编码手段来说,顶功是通过分离出若干字母不参与正常编码,而作为一种特殊的小规则,并结合设定正常码自动截断的码长,来实现的。这样说,估计很多人看不明白,还是举例吧:
    比如说上面说的“声笔飞码”,它是分离出aeiou五个字母作为笔画码,并设定正常的码两码一截(它的正常码的结构是“声母”+“部首”+“笔画”+“笔画”……)。举例:“夫”,声笔飞码中是“fa”(a为横),打fa后,再打“人”的第一码“r”,因为aeiou不作为正常编码,即这几个字母的后面不能跟正常的码,因此打r后,“夫”直接上屏,无须再打空格送出。还有,由于在正常编码方面设定的是两码一截(即不能连续打三个正常码),因此,打了两个正常码后,再打正常码,就会将前字顶出,无需空格。这样的好处是很明显的,即可以弄出来大量的一级简码(声笔飞码中是五百来个),从而使得打普通的文本时,由于五百个常用字的覆盖面已经相当大,因此纯单字的平均码长的很低的(大概能比五笔的单字码长短上35%左右)。不好处也是很明显的,即由于正常的码两码一截,因此使得编码空间过小,不是很常用的字的码长就有很长的,编码长短不大均衡,而且词能力基本没有了。当然,由于纯单字码长已经够短,再加上单字的确定性远比词好,因此,声笔飞码的效率还是很高的。
    我自己做的“丁丁码”也是顶功特性的码,不同的是丁丁是用的eiaov来作为五个笔画码,正常码是三码一截,正常码也不是用的部首,而是用的按笔顺来的前两个部件。和声笔飞码比,不好处是很明显的,即一级简码的数量大为降低(一百来个),打普通的文字时,纯单字的码长略有降低。好处也是很明显的,即二级简码的数量大为增强,使得多数字都是三码打出的,码长的规律均衡性更好(不会出现一个还算较常用的字需要打四码以上才能出来),词能力也增强了很多(当然,还是不能和传统的编码比的)。
    由此可见,顶功的码表都是在纯单字上很强,但在词能力上则削弱了很多,总的效率和传统的码表各有千秋,但确实是一种别样的体验。
    先说这些吧,匆忙间,漏的肯定不少,欢迎指正。
 楼主| 发表于 2007-7-14 08:13:57 | 显示全部楼层
奇怪,段首的空格怎么显不出?
回复 支持 反对

使用道具 举报

发表于 2007-7-14 11:49:45 | 显示全部楼层
呵呵,谢谢,来听课补习一下

看来输入法的开发可以在这里讨论,或者建一个子版就行了,不用跑google group那么老远了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-14 19:20:05 | 显示全部楼层
“上课”什么的不敢当。

我发这样的贴子是因为此地关于输入法本身的贴子少了些,算是加点吧。

输入法并不是只会编程就能做好的,再好的程序员,如果对输入法本身没有深入的认识,也是做不好的。

希望关心输入法本身的人也多一些。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-14 19:28:01 | 显示全部楼层
做输入法软件,必要做能盲打的类型(盲打是软件和码表双方面的“功劳”)。盲打,并不是为了快,更重要的是一种自由感。实际上也是很简单能做到的,完全不像好多人想的那样难。我先后换用了不少种输入法,哪种都是月内盲打(除了第一种输入法自然码用的时间多些,但我是什么时候能盲打的,倒也是记不清了——开始用它是十一年前的事了,确实记不清了。这种不算吧),都没专门练。
   我觉得多数人做不到盲打,一方面是因为选用的输入法不对,他(她)用的输入法本身就是不能盲打的(如各种全拼),一方面是方法有问题(此处排掉键盘熟不熟的因素),即对输入法的规律尚不明了。当然,要做到快速盲打,输入法的规律性、效率如何,也是很重要的。
回复 支持 反对

使用道具 举报

发表于 2007-7-20 15:32:58 | 显示全部楼层
svn抓了个不全的源码,重下了个.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表