输入法真是一个伟大的发明,尤为是非英语母语国家的输入法。以中文的拼音输入法为例,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!原理
这篇小小的文章,无心代表拼音输入法和五笔输入法哪一个更强大的立场,只是想说明程序员在创造拼音输入法那些精巧的设计。这些精妙的设计,可能正体现他们对已知事物强大的抽象能力,共勉。程序