{*******************************************************}
{ 汉字-->拼音声母处理 }
{ Developed by cyw(QQ: 26890954) }
{ 2010.1.16 All Right Reserved. }
{*******************************************************}
本人免费维护本单元,若使用过程中发现问题,请QQ联系,谢谢!
注意:本单元基于Delphi7开发,支持Delphi7-2007,暂不支持Delphi2009-XE!等我以后有空处理Unicode字符串后,才能支持。
{
一、特点:
1、支持多音字,支持所有中国汉字(共20336个),包括难字、僻字、广东白话字、繁体字等所有计算机能显示的全部汉字。
例如:镕、啱、揾、叻、嘅、咁、門、長、發財、車、冇乜嘢。
二、实现原理:
1、根据汉字的常用程度不同,划分了五个等级。一个汉字两个字节
,按照汉字编码规则,第一字节为区码(纵向),第二字节为位码(横向),
第一字节的范围是129-254,共126种,其中161-175段存放各种标点符号,254段为无效汉字,真正有效段为129-160,176-253,共110种。
第二字节的范围是64-254,其中127段为分隔符,不存在任何内容,真正有效段为64-126,128-254,共190种。
从常用程度来分级,一级汉字(区176-215,位161-254),二级汉字(区216-247,位161-254),三级汉字(区129-160,位161-254),
四级汉字(区129-160,位64-160[127除外]),五级汉字(区176-253,位64-160[127除外])。
2、按以上规则可生成五级的中国汉字字库,每个区码一行,每个位码一列。
3、对中国汉字字库中的每个汉字,扫描从互联网下载的较完整的<GBK汉字各种编码汇总.xls>拼音字库,找到每个汉字的全拼拼音(包括多音,一个汉字最多3种读音),并获取每个读音的声母(首字母),
生成汉字声母字典文件。
4、把声母字典文件中每个汉字的声母,按汉字字库的区位规则全部串在一起,由于一个汉字最多3种读音(有4种以上读音的仅有"竓qfzygs, 竕sfzyg, 竡ygsb"三个生僻字, 仅取前三个读音),
为每个汉字预留3个字节空间,生成汉字声母表,如本单元所定义的LevelTable1..LevelTable5常量。
5、查找原理:要查找一个汉字在声母表中的对应位置,应使用以下公式计算得:
汉字声母索引 = ((汉字区码 - 级别起始区码) * 位码长度 + 汉字位码 - 级别起始位码) * 3 + 1; //其中3表示每个汉字预留的3个字节空间
如汉字“啊”,其区位码分别是(176,161),根据上述第1点所定义,属于一级汉字,理应在常量LevelTable1中查找,
由于一级汉字的位码范围是161-254,横向长度是94,即一行(一个区)有94个汉字,所以“啊”在LevelTable1中的位置应该是:
((176-176) * 94 + 161 - 161) * 3 + 1 = 1,即LevelTable1[1] = 'ae ';
三、更新历史:
1、10.9.8 由于全拼输入法的拼音库太过全面,有部分多音字的第一个拼音却不是常用的拼音,导致汉字转声母有时不准确,
决定抛弃全拼输入法的拼音库,改为采用从互联网下载的较完整的<GBK汉字各种编码汇总.xls>拼音字库,重新生成汉字声母表。
2、10.12.27 上一次更新时是在Excel中编辑<GBK汉字各种编码汇总.xls>文件的,在Excel内替换右括号")"为空时,"Jun1)"替换后会变成"1-Jun",
Excel的奇怪现象,导致"军"字的声母变成数字"1",类似的情况还有很多。本次更新全面修正此类问题,并且经检测发现99.9%以上的
多音字最多只有三个读音,仅"竓qfzygs, 竕sfzyg, 竡ygsb"三个生僻字有4种以上读音, 故声母表全部由4个字节改为预留3个字节,
上述三个僻字仅截取前三个读音的声母。
}
======== 积分说明 =========
请下载后评论,在评论时点击四星或五星,积分会全额还给你,而且系统还会给你再加1分。
==========================
...展开收缩
评论共有5条