程序员改变世界:拼音输入法

输入法真是一个伟大的发明,尤其是非英语母语国家的输入法。以中文的拼音输入法为例,26 个英文字母组成了声母和韵母,而这些元素足够表示所有的汉字(当然,在编码允许的前提下)。

全拼:这是拼音输入法里最直白和古老的输入方式,虽然古老,但是极其有效。只要使用者学习过拼音,然后把字的拼写和键盘的字母对应即可。不过,全拼还有一些小插曲:汉语拼音里的「ü」在字母里似乎没有对应,聪明的程序员用同样在拼音里没有的「v」代替了;汉语拼音里还有叫做「整体认读音节」的东西,如「ian」,虽然它也是韵母,但和某些声母搭配会可能表示完全不同的两个字。打个比方,「西安」和「线」的拼音都是「xian」。然后,人们又发明了分词符,表示两个字的拼音用「'」分隔即可。西安——xi'an,线——xian。Bravo!

全拼虽然解决了人们输入汉字的问题,但擅于偷懒的程序员试图构造一种能够用更少的键代表更多的字母的方案。即,在原有的全拼编码基础上,对键盘上的字母进行二次编码。

简拼编码:在打字的过程中,如果只需要输入声母部分,输入法就能联想得到用户想要的结果。比如:输入「zhrmghg」可以表示「中华人民共和国」;「pysrf」可以表示「拼音输入法」;更有甚者,用户只需要输入「zhrm」,候选词中就已经有「中华人民共和国」。这种方案的基本思路是创建词库,也就是,把用户经常输入的字母和汉字单词进行映射。上面的「zhrmghg」和「中华人民共和国」就是一种映射关系。这种映射关系丰富到一定程度,就形成了类似字典的词库。现在主流输入法的智能联想、云联想原理相同。

双拼编码:虽然简拼允许人们输入更少的字母,但这种偷懒也需要付出代价,某些不常用的词语可能无法轻松地输出。如,地名,专业名词等。程序员决定回到原点,从全拼中寻找答案。既然拼音=声母+韵母,那为什么不用一个字母表示声母,一个字母表示韵母呢?双拼正是基于此原则,把汉语拼音里的声母和韵母均用一个字母表示。而且,这种编码方式,还解决了全拼中分词的困扰。以小鹤双拼为例,如果「xian」表示「西安」,输入「xian」即可,若表示「线」,则输入「xm」。一个汉字,两个字母,简单。

模式编码:现在主流输入法都引入一种叫做「模式」的功能,如「U 模式」,「I 模式」。简而言之,就是把全拼中不可能作为词的声母部分的字母,映射到一个功能键上。前面说的「U 模式」可能就是用来拆字的。按下 U 键 ,然后把不认识的字拆成认识的多个字拼写出来,输入法会匹配出该字。拿「垚」举例,我可能不认识这个字,但我认识「土」。我只需输入「u tu'tu'tu」,输入法可能就匹配出「垚(yáo)」来。模式作为输入法的拓展虽然很好用,但是在双拼编码里,又引入了不同的小插曲。「u」在小鹤双拼里表示声母「sh」,和「U 模式」的按键冲突了。我们看下万能的程序员是如何解决这个问题的——他们用大写的 U 表示「U 模式」,用小写的 u 表示双拼里的声母,再次 Bravo!

这篇小小的文章,无意表明拼音输入法和五笔输入法哪个更强大的立场,只是想说明程序员在创造拼音输入法那些精巧的设计。这些精妙的设计,可能正体现他们对已知事物强大的抽象能力,共勉。

你可能感兴趣的:(随笔)