在好例子网,分享、交流、成长!
您当前所在位置:首页Pascal 开发实例Pascal编程基础 → 获取汉字拼音声母(PYIndexUnit.pas)

获取汉字拼音声母(PYIndexUnit.pas)

Pascal编程基础

下载此实例
  • 开发语言:Pascal
  • 实例大小:0.14M
  • 下载次数:11
  • 浏览次数:130
  • 发布时间:2020-12-22
  • 实例类别:Pascal编程基础
  • 发 布 人:cywyes
  • 文件格式:.pas
  • 所需积分:10
 相关标签: 获取 拼音 汉字

实例介绍

{*******************************************************}
{              汉字-->拼音声母处理 v4.0                 }
{           Developed by cyw(QQ: 26890954)              }
{           2013.9.13 All Right Reserved.               }
{*******************************************************}


{
一、特点:
1、支持多音字,支持所有中国汉字(共20902个),包括难字、生僻字、广东白话字、繁体字等所有计算机能显示的全部汉字。
   例如:镕、啱、揾、叻、嘅、咁、門、長、發財、車、冇乜嘢。
2、同时支持Unicode和ANSI字符集。
3、支持Delphi6至DelphiXE系列的所有Delphi版本(最后一次测试是XE4)。

二、实现原理(Unicode):
1、根据汉字的编码规则,汉字在Unicode的编码范围为$4E00至$9FA5(即:19968至40869, 共20902个汉字)。
2、对中国汉字字库中的每个汉字,扫描从互联网下载的较完整的<GBK汉字各种编码汇总.xls>拼音字库,找到每个汉字的全拼拼音
   (包括多音,一个汉字最多4种读音),并获取每个读音的声母(首字母), 生成汉字声母字典文件。
3、把声母字典文件中每个汉字的声母,按汉字字库的Unicode编码规则全部串在一起,由于一个汉字最多3种读音(有4种以上读音的
   仅有"竓qfzygs, 竕sfzyg, 竡ygsb"三个生僻字, 仅取前三个读音),为每个汉字预留3个字节空间,生成Unicode汉字声母表,
   如本单元所定义的PartUnicode常量。
4、查找原理:要查找一个汉字在声母表中的对应位置,应使用以下公式计算得:
       汉字声母索引 = (汉字Unicode编码 - 19968) * 3 1;  //其中19968是指Unicode字符集中的第一个汉字位置; 3表示每个汉字预留的3个字节空间

三、实现原理(ANSI):
1、根据汉字的编码规则,第一字节为区码(纵向),第二字节为位码(横向),
   第一字节的范围是129-254,共126种,其中161-169段存放各种标点符号,254段为无效汉字,真正有效段为129-160,170-253,共116种。
   第二字节的范围是64-254,其中127段为分隔符,不存在任何内容,真正有效段为64-126,128-254,共190种。
   排除无效字符及标点符号后,有效的汉字库分为三部分:
   1)第一部分(区:129-160 位:64-254[除127])                     32*190 =6080
   2)第二部分(区:170-253 位:64-160[除127], 区253位156-160留空)  84*96-5=8059
   3)第三部分(区:176-247 位:161-254, 区215位250-254留空)        72*94-5=6763
                                                                  合计: 20902个汉字
2、按以上规则可生成三个部分的中国汉字字库,每个区码一行,每个位码一列。
3、同二(2)。
4、同二(3),如本单元所定义的Part1..Part3常量。
5、查找原理:要查找一个汉字在声母表中的对应位置,应使用以下公式计算得:
       汉字声母索引 = ((汉字区码 - 段落起始区码) * 位码长度 汉字位码 - 段落起始位码) * 3 1;  //其中3表示每个汉字预留的3个字节空间
   如汉字“啊”,其区位码分别是(176,161),根据上述第1点所定义,属于第三部分汉字,理应在常量Part3中查找,
   由于第三部分的位码范围是161-254,横向长度是94,即一行(一个区)有94个汉字,所以“啊”在Part3中的位置应该是:
   ((176-176) * 94 161 - 161) * 3 1 = 1,即Part3[1] = 'a';

四、更新历史:
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个字节,
             上述三个僻字仅截取前三个读音的声母。
3、12.2.14 之前的版本按常用程度分为五个级别,但却漏了(区:170-175 位:64-160)一段汉字,合计漏了6*96=576个汉字未处理。今改为按汉字编码
           分布规则,划分为三个部分(三段),共计20902个汉字,是迄今为止史上最完整的汉字字库。据此生成的Part1、Part2、Part3三个声母
           常量也是最完整的汉字声母表。另外,从该版本起,开始支持Delphi2007-DelphiXE系列。
4、13.9.13 针对Unicode的编码规则,生成全新的Unicode原生汉字声母表,放弃以前把String转换为AnsiString的方法,由于少了转换步骤,所以理论上
           在Delphi2009(或更高版本)时算法速度更优更快。同时使用编译指令兼容Delphi6-2007的非UniCode开发环境,这部分保留以前的算法。
5、16.4.11 更正“身”字的拼音声母。因为原来的字典是shen1,juan1,经查百度,确认拼音只有shen。故修正声母为s。
}

标签: 获取 拼音 汉字

实例下载地址

获取汉字拼音声母(PYIndexUnit.pas)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警