字根意思还是容易学习容易记的,总比死记硬背强吧,谢山人的这个创意挺好的。
腆颜总结下。中文输入法有好多类型 ,大众主流用的有三种:
- 音码输入法,就是拼音输入法,最主流的当属全拼输入法(港台用注音输入法),全拼输入法往往结合简拼(也就是输入首字母就够了),其次不怎么知名的就是双拼输入法。 双拼输入法的键盘布局方案很多,出名的有自然码双拼、微软双拼、搜狗双拼、智能ABC双拼、拼音加加双拼、紫光双拼、小鹤双拼、星空键道。 小鹤双拼有进阶的小鹤音形输入法,可能因为这个原因更流行点。
拼音遇到不会读的字,有两种办法,用形码输入法比如最简单的「五笔画」输入法输入,或者用组成这个陌生字的字根读音输入,比如 ukoukou 得到「吅」。
- 形码输入法,最著名的就是大陆的王码五笔和港台地区的仓颉输入法,前者有 86、98、新世纪三个版本,用 86 版人最多,王码五笔官方推荐新人学新世纪版本。 仓颉输入法主要是五代和六代两个版本,六代据说只给机构用户用,并没公开出来,所以用五代的最多。
这两个形码最大的好处是操作系统支持很好,开箱即用。五笔输入法难点在于有些字的字根拆分莫名其妙,仓颉则是拆字从笔画中间劈开,我个人觉得匪夷所思,需要很好的想象力。。。
五笔的同一个字的简体、繁体是同一个编码,所以不算简繁通打,仓颉不确定是不是这样。
另一个很著名的形码输入法是郑码输入法,以前 windows 里内置,后来好像去掉了。现在有个人做了个八千多单字的三码郑码,主推提高单字打字速度。
其它的都很小众了,比如山人全息码,字根根据其含义和形状分类,便于记忆(也并不是很容易就记住了),字库很大。 比如徐码,支持简繁通打,支持整句输入,主页说了很多优点。
- 音形输入法。 就是先输入拼音首字母,然后输入笔画或者字根编码。 也有形音输入法,在形码的编码上加上拼音首字母帮助去重,由于形码一般重码率比较低,所以这种好像比较少。
音形就很多了,著名的有小鹤音形,然后就是漫山遍野的二笔输入法,这个真是明珠埋尘了,非常可惜。二笔输入法很容易上手,个别字不知道读音也可以输入(不知道怎么读也不知道怎么写那就没辙了)。代表性的二笔输入法有超强二笔、超强快码(他家的超强音形据说并不推荐),小兔两笔,哲豆音形,星空两笔。
上面提到的星空两笔和星空键道都是支持顶功的,也就是说,输入后一个字的编码时,在无歧义的情况下前一个字自动上屏。
说了这么多,你习惯全拼没觉得不爽的话,那就没必要折腾了,有空折腾的话可以每个都看看,反正不是特复杂的东西。
我在用超强两笔。 单字没问题,就是词少了点。
拼音选字烦了,想学五笔,看了下脑袋都大了,真佩服那些学五笔的人。然后看到郑码,学习成本很低,不过重码率也太高了。后来看到二笔,规则简单容易学,不过开始的版本都是拆字很难(最后一笔有的字要想半天)。后来出了个超强二笔(后来改名超强两笔),这才解决了拆字麻烦的问题。现在就一直用着。
仓颉的拆法是把字看成画,跟书写笔画关系不大,经常会有不一致的情况,顺序也不一定一样,尤其是帯戈的。习惯就好了。
其实不仅是简繁,同一个字有不同的写法(字形,不是简繁)都可以用不同的编码,比如很多旧字形和现行的简繁体都不一样,比如繁体的绞丝旁糹和糸,都是女戈火,不同的字体看起来是不同的。比如简繁同字的角,有的字形里面是手,有的字形里面是土,所以弓月土和弓月手都是可以的。不过确实有的是同字,有的是不同字,还有中日韩的不同,不过这是 unicode 编码问题,不是仓颉本身的问题。
我现在特别喜欢旧字形,感觉等别好看,然后找了好多旧字形玩。
统计了下几个输入方案的词表大小,徐码(xuma)和山人全息码(sunman)最夸张,不知道怎么能整理出这么多字的编码来。。。哲哲豆音形(zzdyx)和星空两笔(xklb)第二三不相上下,闻名遐迩的超强两笔(cqlb)、超强快码(cqkm)、超强音形(cqyx) 第四,小兔两笔(xtlb) 第五。 // 实际 xklb.superdz 是 u拼音拆分,所以不太算正常编码。
三码郑码的单字只有八千多字。
词表 个数 词长
xuma 96434 1
xklb.superdz 87870 1
sunman.words 87655 1
zzdyx_mofast 24258 1
zzdyx_perfect 24258 1
cqlb 21469 1
cqkm 21467 1
cqyx 21463 1
xtlb 21208 1
xklb.danzi 8206 1
sunman.phrases1 108481 2
sunman.phrases2 108480 2
zzdyx_perfect 66843 2
xklb.cizu 61417 2
xuma 55422 2
zzdyx_mofast 53574 2
cqlb 51535 2
xtlb 49666 2
cqyx 49559 2
cqkm 46750 2
xklb.duochong2 1020 2
sunman.phrases1 115961 3
sunman.phrases2 115961 3
xklb.cizu 15540 3
zzdyx_perfect 15423 3
zzdyx_mofast 15399 3
cqlb 12393 3
cqyx 11807 3
xtlb 10453 3
cqkm 9899 3
xuma 9512 3
sunman.phrases1 118392 4
sunman.phrases2 118392 4
zzdyx_perfect 24600 4
zzdyx_mofast 23676 4
cqlb 21811 4
cqyx 21164 4
xklb.cizu 20478 4
cqkm 18660 4
xtlb 15967 4
xuma 13496 4
sunman.phrases1 9717 5
sunman.phrases2 9717 5
zzdyx_perfect 1216 5
zzdyx_mofast 1171 5
xklb.cizu 1095 5
单字码长比较,星空两笔的码长真是叼破天际。。。。
CJK
sunman.words 20970 3.47768
xuma 20989 3.46948
xklb.superdz 20971 7.037
zzdyx_perfect 20903 3.75315
zzdyx_mofast 20903 3.75267
cqlb 20902 3.82294
cqkm 20902 3.91168
cqyx 20902 3.8303
xtlb 20889 3.81909
xklb.danzi 8079 3.93997
CJK_Ext_A
sunman.words 6582 4.1217
xuma 6592 3.93325
xklb.superdz 6582 6.97129
zzdyx_perfect 71 4
zzdyx_mofast 71 4
cqlb 82 3.87805
cqkm 82 3.97561
cqyx 82 3.87805
xtlb 55 3.89091
xklb.danzi 78 4.75641
CJK_Ext_B
sunman.words 42711 5.29894
xuma 42718 3.96262
xklb.superdz 42711 7.02566
zzdyx_perfect 2 4
zzdyx_mofast 2 4
cqlb 17 3.82353
cqkm 17 4.05882
cqyx 17 3.82353
xklb.danzi 37 4.45946
CJK_Ext_C
sunman.words 4149 5.2215
xuma 4149 3.95879
xklb.superdz 4149 7.01784
cqlb 44 3.95455
cqkm 44 4.02273
cqyx 44 3.95455
CJK_Ext_D
sunman.words 222 4.95045
xuma 222 3.95946
xklb.superdz 222 7.13063
cqlb 8 4
cqkm 8 4
cqyx 8 4
CJK_Ext_E
sunman.words 5762 5.30458
xuma 5762 3.96772
xklb.superdz 5762 7.02083
CJK_Ext_F
xuma 7473 3.96414
xklb.superdz 7473 6.97524
CJK_Ext_G
sunman.words 4939 5.16704
xuma 4939 3.96457
统计脚本:
#!/usr/local/bin/fish
echo CJK
for f in sunman.words xuma xklb.superdz zzdyx_perfect zzdyx_mofast cqlb cqkm cqyx xtlb xklb.danzi; echo -ne "$f "; perl -CSDA -lne 'BEGIN{ $a=$b=0} if ($ok) {@a=split; next unless @a > 1 && length($a[0]) == 1 && $a[0]=~ /\p{Block: CJK}/ && !exists $h{$a[0]}; $h{$a[0]}=1; $a+=length($a[1]); $b++;} elsif (/^\.\.\.\s*$/) { $ok=1} END { print $b, " ", $a/($b or 1)}' $f.dict.yaml; end | tabulate -f plain
echo
echo CJK_Ext_A
for f in sunman.words xuma xklb.superdz zzdyx_perfect zzdyx_mofast cqlb cqkm cqyx xtlb xklb.danzi; echo -ne "$f "; perl -CSDA -lne 'BEGIN{ $a=$b=0} if ($ok) {@a=split; next unless @a > 1 && length($a[0]) == 1 && $a[0]=~ /\p{Block: CJK_Ext_A}/ && !exists $h{$a[0]}; $h{$a[0]}=1; $a+=length($a[1]); $b++;} elsif (/^\.\.\.\s*$/) { $ok=1} END { print $b, " ", $a/($b or 1)}' $f.dict.yaml; end | tabulate -f plain
echo
echo CJK_Ext_B
for f in sunman.words xuma xklb.superdz zzdyx_perfect zzdyx_mofast cqlb cqkm cqyx xtlb xklb.danzi; echo -ne "$f "; perl -CSDA -lne 'BEGIN{ $a=$b=0} if ($ok) {@a=split; next unless @a > 1 && length($a[0]) == 1 && $a[0]=~ /\p{Block: CJK_Ext_B}/ && !exists $h{$a[0]}; $h{$a[0]}=1; $a+=length($a[1]); $b++;} elsif (/^\.\.\.\s*$/) { $ok=1} END { print $b, " ", $a/($b or 1)}' $f.dict.yaml; end | tabulate -f plain
echo
echo CJK_Ext_C
for f in sunman.words xuma xklb.superdz zzdyx_perfect zzdyx_mofast cqlb cqkm cqyx xtlb xklb.danzi; echo -ne "$f "; perl -CSDA -lne 'BEGIN{ $a=$b=0} if ($ok) {@a=split; next unless @a > 1 && length($a[0]) == 1 && $a[0]=~ /\p{Block: CJK_Ext_C}/ && !exists $h{$a[0]}; $h{$a[0]}=1; $a+=length($a[1]); $b++;} elsif (/^\.\.\.\s*$/) { $ok=1} END { print $b, " ", $a/($b or 1)}' $f.dict.yaml; end | tabulate -f plain
echo
echo CJK_Ext_D
for f in sunman.words xuma xklb.superdz zzdyx_perfect zzdyx_mofast cqlb cqkm cqyx xtlb xklb.danzi; echo -ne "$f "; perl -CSDA -lne 'BEGIN{ $a=$b=0} if ($ok) {@a=split; next unless @a > 1 && length($a[0]) == 1 && $a[0]=~ /\p{Block: CJK_Ext_D}/ && !exists $h{$a[0]}; $h{$a[0]}=1; $a+=length($a[1]); $b++;} elsif (/^\.\.\.\s*$/) { $ok=1} END { print $b, " ", $a/($b or 1)}' $f.dict.yaml; end | tabulate -f plain
echo
echo CJK_Ext_E
for f in sunman.words xuma xklb.superdz zzdyx_perfect zzdyx_mofast cqlb cqkm cqyx xtlb xklb.danzi; echo -ne "$f "; perl -CSDA -lne 'BEGIN{ $a=$b=0} if ($ok) {@a=split; next unless @a > 1 && length($a[0]) == 1 && $a[0]=~ /\p{Block: CJK_Ext_E}/ && !exists $h{$a[0]}; $h{$a[0]}=1; $a+=length($a[1]); $b++;} elsif (/^\.\.\.\s*$/) { $ok=1} END { print $b, " ", $a/($b or 1)}' $f.dict.yaml; end | tabulate -f plain
echo
echo CJK_Ext_F
for f in sunman.words xuma xklb.superdz zzdyx_perfect zzdyx_mofast cqlb cqkm cqyx xtlb xklb.danzi; echo -ne "$f "; perl -CSDA -lne 'BEGIN{ $a=$b=0} if ($ok) {@a=split; next unless @a > 1 && length($a[0]) == 1 && $a[0]=~ /\p{Block: CJK_Ext_F}/ && !exists $h{$a[0]}; $h{$a[0]}=1; $a+=length($a[1]); $b++;} elsif (/^\.\.\.\s*$/) { $ok=1} END { print $b, " ", $a/($b or 1)}' $f.dict.yaml; end | tabulate -f plain
echo
echo CJK_Ext_G
for f in sunman.words xuma xklb.superdz zzdyx_perfect zzdyx_mofast cqlb cqkm cqyx xtlb xklb.danzi; echo -ne "$f "; perl -CSDA -lne 'BEGIN{ $a=$b=0} if ($ok) {@a=split; next unless @a > 1 && length($a[0]) == 1 && $a[0]=~ /\p{Block: CJK_Ext_G}/ && !exists $h{$a[0]}; $h{$a[0]}=1; $a+=length($a[1]); $b++;} elsif (/^\.\.\.\s*$/) { $ok=1} END { print $b, " ", $a/($b or 1)}' $f.dict.yaml; end | tabulate -f plain
echo
星空两笔单字我记得最长是6码,然后字频加权平均才 2.3-2.4 。字词类的在词库命中情况不错时才能到 2.2 的样子。
二笔以前宣称的是1.8。
不知道你说的是官方的宣传的还是自己统计的?
xklb.superdz 是 u拼音拆字,所以码长很大。xklb.danzi 那个才是正常的。
官方说 2.x 大概是 1500 常用字?
不可能 1.8 啊,连双拼不考虑重码都已经 2 了,二笔是声母 + 笔画,至少 2 起步,就算一简也是要空格上屏。
一些人统计的和我自己统计大概也在这个数。
算码长要算字频的权重的。顶功的优势就是在常用字的码长上优势非常大。
星空两笔单字的编码单拿出来看,一般的内容通常比五笔之类的输入法用键更少。
不算 xklb.superdz 这个拼音拆字的码表,星空两笔只有八千多单字,只比 GB2312 多了一千多,离 unicode cjk 基本区两万多差太远了。据说星空两笔原作者已经不维护了,是爱好者在维护。
码长的话,你说的有道理,上面都没按词频统计,只能算定性从另一个角度看了,徐码和山人全息码很不错,一堆两笔输入法大概半斤八两。
今天刚知道声笔系列,https://sbxlm.gitee.io/ ,据说是顶功之父,简单试了下,有新意,但不太喜欢,而且不提供明文码表,作者好像是想商业化。
星空两笔不用据说,的确现在靠社区,最变态的是一群大佬纷纷魔改出了自己的版本,你要是有兴趣进群,就会发现有各式各样的版本。
如果觉得字的编码不够,其实可以自己编,不过两万其实没这必要(按顶功的逻辑,你六码的重码字会翻页翻到失去信心),因为常用字没这么多。除非你的工作是跟这方面相关,那你得去找其他的输入法方案,不然你会很痛苦
话说,rime 就这好处,你可以切换方案,用其他方案输入生僻字…
哲豆群不需要认证我就加群成功了,其它的要么收费要么要密码要么要管理员批准,我一个都没进成……
既然学个比音码难的音形码,自然是希望单字覆盖够大了,而且重码率尽量低了,据说顶功天生缺陷搞不了大的单字表。
目前看了一圈下来,综合人气、自身质量,哲豆音形和超强快码两个二笔输入法最好,码长小,覆盖字符集大,易学易用。
主流的仓颉和五笔不打算看了,后起之秀徐码和山人全息码更佳,而如果只打常用汉字,八千单字的三码郑码很不错。
我没太注意过码表有多大,因为日常用都没问题。单字的输入法有啥好维护的,除了编码编错的情况。
所以说是宣称的嘛。
不过不算空格上屏,还是有可能的。一般两个字的词打三下就出来了。
对比了下哲豆音形和超强快码的重码率,从下面的数据看:
- 二者收录的单字几乎一样,哲豆音形在二重、三重上的重码率明显高于超强快码。
- 哲豆音形比超强快码多收录了大约 3.5 万词条,在整个词表上看,这些多出来的词条主要集中在二重和三重位置上。
- 总的来说,超强快码的词表条目略少,重码率低,更适合盲打,而哲豆音形适合打字慢,希望词库更大,可以放弃盲打,接受用分号和单引号选二重和三重的用户。
单字:第二列是重码次数,比如 1 就是唯一编码,2 就是唯二编码,第一列是这类重码出现的次数。
哲豆音形 超强快码
17235 1 15902 1
2685 2 1297 2
1196 3 770 3
678 4 479 4
460 5 330 5
286 6 237 6
235 7 169 7
162 8 133 8
124 9 87 9
75 10 83 10
74 11 58 11
52 12 45 12
47 13 47 13
41 14 32 14
17 15 29 15
16 16 18 16
19 17 14 17
14 18 10 18
9 19 12 19
8 20 13 20
8 21 5 21
6 22 4 22
6 23 9 23
7 24 9 24
4 25 7 25
3 26 3 26
4 27 6 27
2 28 3 28
2 31 2 29
1 34 1 30
1 35 1 32
2 34
1 35
1 36
1 38
1 41
1 42
1 44
1 47
1 77
完整词表:含义跟上面一样,只取了前 20。
哲豆音形 超强快码
88763 1 92607 1
25401 2 1313 2
10378 3 769 3
2995 4 496 4
1357 5 358 5
613 6 232 6
415 7 174 7
231 8 129 8
164 9 96 9
94 10 90 10
81 11 53 11
68 12 55 12
49 13 46 13
57 14 31 14
21 15 35 15
18 16 17 16
22 17 13 17
18 18 14 18
12 19 9 19
12 20 12 20
很不错哈。
我更喜欢超强两笔,30个键的。快码也许更适合手机?
另外超强两笔的重码率应该更低一点?
超强两笔是 30 键,比 26 键天生重码率低一点,但是手机上很难用 30 键布局,而且超强两笔的单笔画都在 zxcvb 这行,感觉负担略重。
超强两笔开创了全分阴阳,是个很经典的二笔输入法,但付东升以及两笔之家 QQ 群普遍观点是首推超强快码,应该是比超强两笔又改进了。
话说,两笔用户真少……