繁体中文
设为首页
加入收藏
当前位置:输入法介绍首页 >> 输入法杂谈 >> 码表应优先按字频排序(附GBK字集综合频度表)

码表应优先按字频排序(附GBK字集综合频度表)

2008-04-16 11:15:51  作者:转hoss好贴  来源:五笔爱好者网站  浏览次数:119  文字大小:【】【】【
简介:一直以来,字频对于码表排序的作用不会引起输入法制作者的多大重视,原因是大部分形码本来就以低重码率为目标,偶有重码时发现重码字的先后次序不理想才凭主观印象稍作调整。反观早已摆脱纯码表形式的拼音输入法一贯强调智能调整字词频度,由周有光提出的“高频先见,用过提前”即高度概括了拼音输入法在这方面的表现。“高频先见”是指事先根据现代汉语字词频度安排的静态次序,“用过提前”则是根据用户在输入过程中选择的累计次数动态调整次序。 然而使用数字小键盘输入的形码如五笔画和四角号码都面对大量重码,因此根据字频的高低对码表的重码字排序就显得意义重大了。我曾根据龙文输入法平台所提供的四角号码码表按字频筛选出多级简码,当时并未意识到整理出来的码表已暗含字频排序,倒是发现龙文本身就有一套字频和词频数据,其中规定词频小于10初次不能用形码输入,待完成逐字输入后由系统通知自动加词。
关键字:码表 字频排序
码表应优先按字频排序(附GBK字集综合频度表)

一直以来,字频对于码表排序的作用不会引起输入法制作者的多大重视,原因是大部分形码本来就以低重码率为目标,偶有重码时发现重码字的先后次序不理想才凭主观印象稍作调整。反观早已摆脱纯码表形式的拼音输入法一贯强调智能调整字词频度,由周有光提出的“高频先见,用过提前”即高度概括了拼音输入法在这方面的表现。“高频先见”是指事先根据现代汉语字词频度安排的静态次序,“用过提前”则是根据用户在输入过程中选择的累计次数动态调整次序。

然而使用数字小键盘输入的形码如五笔画和四角号码都面对大量重码,因此根据字频的高低对码表的重码字排序就显得意义重大了。我曾根据龙文输入法平台所提供的四角号码码表按字频筛选出多级简码,当时并未意识到整理出来的码表已暗含字频排序,倒是发现龙文本身就有一套字频和词频数据,其中规定词频小于10初次不能用形码输入,待完成逐字输入后由系统通知自动加词。

三码问题

数月前在尝试把原本四码的简体大易压缩为三码时发现,尽管实现过程只是一瞬间的事,但要真正完善三码输入法还需要一些后续工作。首先,由于四码字压缩为三码字无疑增添许多重码,例如原本不重码的“葜羹”经过压缩后,不只两个字重码了,连原本三码字的“美”也多了两个重码。经过统计,在7000多字的范围内,原本重码只有400多对的四码输入法压缩为三码后,重码竟然暴增1700多对,正好翻了四倍。

其次,一些四码字设计了容错码,一旦压缩为三码字,部分容错码变成冗余码,例如“梁”字除了正规码xn8i,另有容错码xn.i,但在压缩为三码后同样编码xni,导致冗余码的出现。

冗余码数量极少,这个问题容易解决。然而暴增后的重码所带来的问题并非重码太多,引起频繁选字,而是重码的先后次序未经优化,导致首选字往往被不常用字所占用。如上述“葜美羹”三个重码字,由于原码表按四码排序,“葜”字被安排在“美羹”两字前面,压缩为三码后次序仍不变。显然,“葜”字被安排在“美羹”前面是不妥当的,这里就很有必要根据字频做出调整,否则四码改编为三码输入法的实用价值不高。

码表格式

在进入根据字频调整码表之前,我们先来看看现有码表格式。实际上,早在Windows 95中文版问世以前,由当时新天地(中文之星)专门为Windows3.2中文版开发的输入法生成器首创汉字在先编码在后的码表格式,一反当时沿用DOS中文平台的编码在先汉字在后的码表格式,令人耳目一新。如今很多输入法工具提供所谓的Win码表和极点码表的格式转换,指的就是上述两种码表格式,但何者为优,相信即使开发者也说不出更多的道理来。印象中xml00大师曾论证过从码表文件大小来讲,编码在先汉字在后的极点码表格式占有优势,原因是同码字可归并于同一行。故极点中文平台另提供码表优化工具,专门用于归并同码字。反观汉字在先编码在后的Win码表格式不具备归并同码字的特性,倒是允许可有可无的构词码。

经过多年的实践,我终于发现汉字在先编码在后的Win码表格式具备了按字频排序的特性,这无疑比编码在先汉字在后的极点码表格式仅仅节省文件大小空间的优势更重要。由于Win码表格式单字成行,因此易于标注其字频,并根据字频排序结果输出,可直接用于码表。极点码表格式在解除优化后虽然同样可以标注字频,但输出结果不能直接用于码表,其最终码表也不能直观看出字频排序的作用。这是由码表以编码为主轴的格式所决定的,作为编码对象的字词条无法集中体现本身的序性,只能在“字里行间”窥出端倪。

综合字频

我曾经在网上搜集了五份字频表,当时并没有比较它们的不同,只选择了一份最全的GBK字频表作为参考。这次重新打开这五份字频表,竟然发现其中三份GB2312字频表是相同的,而且都是源自那一份GBK字频表。较后更发现龙文输入法平台的字频数据也与此同源(难道“天下字频一大抄”?),不禁感叹兜了一大圈子,要找的字频表早已存在电脑中。唯独一份7000字字频表属于完全独立的字频统计数据,其参考价值也更高。

我在《经修订完整四角号码问世 采用龙文平台含简码词汇·关于简码及词汇》一文中曾指出,“经过实践反馈,其中三个一级简码做了调整:业→这、国→是、人→个……”显然,当时所用的GBK字频表存在误差,于是找出7000字字频表来对照,正好印证了上述调整的合理性。这三组字在GBK字频表与7000字字频表的序号如下:

GBK字频表 7000字字频表
业/这 20/25 310/10
国/是 2/12 95/3
人/个 3/23 9/8


当我进一步把这两份字频表用于大易三码码表排序时,发现所有GBK字频表不理想之处在7000字字频表都有了合理的安排。以下是3500常用字范围的GBK字频表与7000字字频表的序号对比:

GBK字频表 7000字字频表
资/次 91/115 567/156
邀/迫 1101/1446 1572/1176
诣/谐 2336/2381 3172/2509
评/讲 546/662 1044/552
覆/飘 1574/1762 1496/1484
璞/瑛 1764/3086 3469/3347
米/八 309/536 891/376
鳖/爹 2560/2850 3729/1833
跻/蹄 2532/2888 3736/2692
企/促 174/795 1261/1190
贷/俩/侠 986/2031/2789 2307/1673/2120
例/倒 729/1007 877/505
售/倍 646/1065 1768/1361
估/舍 1245/1280 1628/1048
晖/晕 2146/2275 2731/2181
运/远 258/520 416/317
扩/扎 882/1522 1638/1340
励/厉 856/1802 1816/1304
厕/刷 1584/1627 2775/1756
衷/哀 1804/1818 1959/1615
竞/祝/亮 834/903/1015 1384/1362/683
敦/敲 1487/1959 1870/1657
辨/辩 1919/2104 1724/1617
娅/妍 2834/3184 3440/3301
窜/帘 2941/3223 2518/2111
赠/宿/赌 1360/1631/2219 2009/1413/1737
贬/赈/账 2271/2355/2533 2795/3742/2340
宵/霄 2256/3433 2738/2652
鱼/刀 892/1567 1059/934
饥/饶 2562/2611 2267/2099
饺/馒 2791/2959 3861/3353
弦/弥 2132/2320 2106/1762
录/攻 592/853 1023/973
支/友 381/568 497/401
党/觉 604/815 830/312
菌/茵 1518/2415 2886/2571
薪/蒂 1543/2471 2440/1723
莘/萃 2441/2534 4036/3221
苦/若 883/1053 543/432
水/又 131/292 167/125
沪/鸡 1130/1184 3316/1391
沈/沉 1081/1187 1207/742
涨/艰 1181/1330 1961/1689
熔/炯 3170/3172 3405/2890


即使3500常用字范围以外的字,7000字字频表似乎也比GBK字频表更合理:

GBK字频表 7000字字频表
簟/睾 6067/6180 5180/4997
簋/箧 6069/6082 5640/4808
蟑/蟀 4056/4590 4836/4368
珩/珂 3460/3661 4310/3526
胰/胯 3083/4991 4452/4204
馑/馐 5422/5423 5511/4806
饕/囔 5429/6703 4952/4378
嗲/吩 3895/4302 5005/2598
喱/喔 4292/6726 5895/3387
嗨/咚 3795/3802 3830/3154
匝/帚 3901/4738 3864/3805
颟/荚 4528/4613 6118/4711
憩/舔 2921/3734 3850/3783
汨/汩 4097/6381 4703/4014
潢/滇 2873/3175 4028/3619
熵/焙 6316/6321 4674/4535


至此,我们可以确定7000字字频表优于GBK字频表,那么要怎样综合利用这两份字频表呢?理想的字频表应该是以7000字字频表为主,再把GBK字频表中与7000字字频表交集的字删掉,然后把其补集与7000字字频表合并,这样就得到一份具有代表性的GBK字集综合频度表了。

在TextPro中可以这样处理:首先要把表中的序号和频度数据删除,其中GBK字频表还混合了部分全角符号,一概都要删除,然后设置“自定义替换表”,把7000字字频表选中,打开GBK字频表,通过如下替换得到其补集:

查找:(\c)
替换:\T{\1}

再把空行删除(查找“^$”替换为空),把补集合并到7000字字频表后面,加上序号,也就完成了GBK字集综合频度表。

标注字频

有了上次利用Excel按字频筛选各级简码的经验,这次当然也是想到利用Excel的VLookup函数对码表单字标注字频。这时候刚好看到五笔爱好者论坛有一位Vu大师提出TextPro可标注字频,正好启发了我利用TextPro解决字频标注问题。其实解决这个问题的方案,TextPro的自定义替换表比Excel的VLookup函数更容易理解。且让我们比较两者的不同之处:

TextPro通过设置“自定义替换表”把字频作为要替换汉字的数据,其格式安排如下:
的        1
一        2
是        3
了        4
不        5
在        6
有        7
个        8
人        9
这        10
……

接下来,打开输入法单字码表,通过替换对话框输入正则表达式如下:

查找:(\c)\~f+
替换:&\t\T{\1}

完成替换后,码表的单字和编码后面就附上了字频数据,中间用跳格符隔开。这比Excel在A列贴出按字频排列的汉字,B列贴出码表的汉字,C列贴出编码,然后D列使用函数:
        =vlookup(a1,b:c,2,false)
从A列字频找出B列汉字并贴出C列编码,明显干净利落多了。

这项工作的最后目标是码表单字按字频排序,可惜TextPro不具备排序功能,当然交给Excel处理最好不过了。如果没有Excel,我们还可以用Word来排序:在Word打开经过TextPro标注字频的输入法单字码表,选择全文,选择表格中的“文字转换成表格”,最后选中第二列进行排序,并将“表格转换成文字”即可。如果机器条件较差,“文字转换成表格”可能需时较久,但排序往往是十几秒的事。如果发生内存不足,建议重启系统完成上述工作。

责任编辑:scichen


相关文章
 

最新文章

更多

· 四角号码系列输入法将使...
· 推荐 码表应优先按字频排序(...
· 原创 论汉字属性、编码、检索...
· 千军万码,符合社会发展...
· 原创 千军万码,谁能为全汉字...
· 推荐 键盘输入与语音、手写输入
· 转贴 理想输入法探讨
· 转贴 有没有更好的输入法效率...
· 转贴 关于输入法的字根记忆量诌议
· 转贴 警觉拼音输入法对运用汉...

推荐文章

更多

· 四角号码系列输入法将使...
· 推荐 码表应优先按字频排序(...
· 原创 论汉字属性、编码、检索...
· 千军万码,符合社会发展...
· 原创 千军万码,谁能为全汉字...
· 推荐 键盘输入与语音、手写输入
· 转贴 理想输入法探讨
· 转贴 有没有更好的输入法效率...
· 转贴 关于输入法的字根记忆量诌议
· 转贴 警觉拼音输入法对运用汉...

热点文章

更多

· 四角号码系列输入法将使...