首页 > > > 11017 五笔与四角号码重码统计
最近在知乎上看到有人讨论为什么「四角号码」没能成为主流的形码输入法,这勾起了我的回忆。
我是在九十年代末,从对门爷爷家的一本词典中接触到「四角号码」检字法的。它的原理是,观察汉字左上、右上、左下、右下四个角处的笔形(横、竖、框等),并把它们编码成四位数字;也可以在右下角的上方再取一个「附角」,编成五位编码。在当时我觉得,四角号码检字法比常用的部首检字法方便多了:用部首检字法,需要先很费劲地数出待检字的笔画数,然后再在一大堆笔画数相同的字中找到待检字;而四角号码则可以直接读出编码来。后来就再没见过带四角号码索引的词典了,感觉很遗憾。
前一阵子在值乎上,有人让我破译一段数字密码。密码是五位一段的,其中还有不少 0。我的第一反应就是四角号码,在线查询了一下发现果然是。但在查询的过程中,我惊奇地发现不少编码对应着很多个汉字,需要根据上下文来确定到底是哪一个。四角号码这种「重码率高」的缺点,是我之前没有意识到的,而它可能恰恰就是制约四角号码从检字法发展为输入法的重要因素。
为了了解四角号码的重码现象到底有多严重,我用程序做了一个统计。对照组就选用我常用的五笔输入法。
我用的四角号码码表,是从这个论坛帖子的 3 楼下载的。四角号码有过若干个版本,通过与维基百科上几个例字的对比,我发现它采用的是《四角号码新词典》中的新版本。在统计过程中我发现了一个明显的错码「癯 21221」,我把它纠正为「00115」。
五笔码表则来自这个网站。五笔同样有若干个版本,我选用的是 86 版。
上面两份码表所收字数分别为 7180 字和 6765 字,均为简体字,五笔码表收字是四角号码码表收字的子集。五笔码表所收的字中,除去「镕」「珮」两字,剩下的恰好是 GB2312 字库中一级汉字与二级汉字的全体(共 6763 字),所以我就把这 6763 字作为统计范围。
五笔编码有全码与简码之分。为了减少重码,我仅考虑全码,其长度为 3~4 个字母。同样,对于四角号码,我也仅考虑长度为 5 个数字的全码。
五笔码表中包含和单字编码和词组编码,我仅考虑单字。
先看「对照组」五笔的重码情况:
无重码字:6253个(92.5 %)
2字重码: 240组
3字重码: 6组
afff 葑鞋鞲
aftj 著蓍鞒
dnv 万尢尤
fcu 云去支
lhng 囗四皿
tmgt 微徵徽
4字重码: 3组
bnh 了凵卩阝
qgjf 鲁鲣鲤鲥
ynky 嬴羸蠃赢在 GB2312 范围内,五笔的重码率仅为 7.5%;重码最严重的情况,也只是四字重码。三、四字重码都很罕见,其中「万尢尤」「云去支」「微徵徽」「鲁鲣鲤鲥」「嬴羸蠃赢」这几组,在我日常打字的过程中,早就熟记于心了。
而四角号码的重码情况是这样的:
无重码字:2869个(42.4 %)
2字重码: 732组
3字重码: 275组
4字重码: 96组
5字重码: 69组
6字重码: 34组
7字重码: 25组
8字重码: 5组
27227 仍侈俑肾角躬鸬鸺
27627 够邰郇郜鄱鸲鸹鹄
27720 勾匈岣峋峒幻饲饷
40227 内南巾布希有肉肴
47920 杓构枸柳栩桐棚榈
9字重码: 11组
00212 充兖庀庇庑庖竞竟鹿
17127 弱玛琊邛邳邶郅鄄鹉
17620 司矽砌硐硼碉酌酮醐
22200 例侧俐倒刎制刿劓爿
27120 匀约纫纲绚绷绸鲫鲷
32100 业丬冽洌洲测浏涮渊
44112 地埴范茈茳荭菹蔬蕴
44407 孝孽芟芰茇荸莩菱蔓
47227 帑犸猾胬郁郗郝鹤鹳
57020 扪抑拘拥掏掬搁搠韧
80732 会公兹衾铉铱锿镶食
10字重码: 7组
00112 疣疮疱疵疽痉痖瘟瘥瘪
28240 仵做傲儆微徵徼徽攸敫
44904 某橥茶荣荼菜蓁蕖藁蘖
57027 扔扬挪捅捣掷揶搦畅邦
60227 吊呙囫囿圃圊易禺罱胃
64027 叻呐呦唏唠喃嘞噶嚆瞒
67027 吗呜哆哪啷嘟嘱眵瞩鸣
11字重码: 6组
10227 万丙两丽甭而雨雳需霄鬲
34127 沩泐洧浠涝淆渤滞满潇潸
37127 写冯汤泻涌溺滑漏邺闯鸿
44127 勤坳垮翥茑荡药莺蒲蓊蓦
77212 兕兜尼屁甩胞胫脆见阻陉
87720 钓钔钢钥钧钩铆铜锎锏镧
12字重码: 4组
30227 宥宵寓寡帘房扁扃扇甯窝肩
36100 汨汩泅泗泪洄洇洳涠涸湘溷
47927 杨杩桶桷梆椰榍榔橘郴鸫鹩
77227 局屑属肠臀邪阝骨鸦鹏鹘鹛
13字重码: 3组
00127 疖疗疠疡疬病痈痛痨痫瘠瘸鸾
00732 亵哀玄衣衮衰衷袤裒裹褒襄饔
88227 笏笫第筋筒筛筲简箐箫篇篙篱
14字重码: 2组
37120 凋汐沏沟泖洞洵润涧淘湖溯潮澜
67020 叨叩叼吻响哟唧啁啕嗍嘲昀明晌
15字重码: 3组
17227 乃帚弼甬粥胥邴郦鄹鬻鸸鹂鹨鹬鼐
27220 仞们仰伺佝佣侗倜勿匍向彻徇御豹
44212 兢芫苊苋苑茺荒荛莞莸菀蔸薨藐麓
16字重码: 1组
77220 冂冈卩同周月朋朐用网罔胴胸脚阴陶
20字重码: 1组
00227 商市帝席庸廊廓斋方旁离肓育脔腐膏膺裔高鹰
26字重码: 1组
44227 带幕棼艿节芬芮芳芴芾苈苘茼荫莆莠莴菁萧葡蒂蒡蒿蓠蔺薷有没有被吓到?在 GB2312 范围内,四角号码的重码率竟高达 57.6%,多字重码十分常见,最严重的一组竟有 26 字重码!
从编码空间大小上来看,五笔编码由三或四个字母组成(字母 z 不用),可以有 25 ^ 3 + 25 ^ 4 = 406250 种编码;而四角号码编码由五位数字组成,可以有 10 ^ 5 = 100000 种编码。五笔的编码空间大小是四角号码的 4 倍。但是,四角号码的编码空间小并不是它重码多的主要原因,因为本文考虑的 6763 字远远占不满 100000 种编码的空间。
我认为,四角号码重码多的主要原因,在于很多常见的偏旁,要占用两位甚至三位编码,编码效率太低。从上节的统计结果也能看出来,许多组多字重码,都是同一偏旁的字。按偏旁位置分类分析如下:
更有甚者,还有「疒」(001xx)、「辶」(3x30x)这种占用三个主角(即非附角)的偏旁,以及「匚」(7171x)这种把四个主角全都占满的偏旁。好在「囗」部有特殊规则处理,左下、右下、附角按被包围的内部来取,否则「围」「国」等字的编码就全都成了 60000 了。
还有些时候,仅仅一个笔画就能占用三位编码。比如「27220 仞们仰伺佝佣侗倜勿匍向彻徇御豹」这一组重码,这些字的最右侧一笔都是「横折钩」,然而这一笔就占用了右上、右下、附角三位编码,完全遮盖了汉字内部的形状,可谓「一叶障目,不见森林」。在上文列举的多字重码中,有相当比例的编码是以 20 或 27 结尾的,其中大多数字的最右侧或右下角笔画都是横折钩。
与此相比,上面列出的偏旁在五笔中都只会占用一位编码(个别其它偏旁,如「犭」,会占用两位),而「横折钩」这个笔画都不一定单独成为字根。这就大大降低了重码率。
经过上述分析,我觉得,四角号码作为检字法还是不错的,因为在检字的时候,从几个甚至十几个重码中找到待检字并不算费劲,至少比部首检字法强。但要作为输入法,50% 以上的重码率就会严重影响输入效率了。
「重码多」还只是四角号码的缺点之一。四角号码还有其它缺点,比如有些字的编码模棱两可,以及没有词组编码规则,这些都制约了四角号码成为输入法。
原文作者:;如有侵权,请联系管理员删除。