- 浏览: 7331003 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在项目中使用汉字转换拼音,别人写的代码,不知道部分算法,在google查看一些东东,看一下大致明白为什么这样计算了,算法重重之重呀。
1 引言
应用系统中涉及大量数据字典的检索问题,数据字典检索一般方式包括:按编码检索、按汉字检索、按汉字拼音声母检索和直接列表选择等方式。其中,按汉字拼音声母进行检索具有易用、方便的特点,与使用编码检索方式比较具有易记忆的优点,与使用汉字检索方式比较具有输入简单、方便、快捷的优点,是一种符合汉语使用习惯的较综合性、折中的字典检索方式。要使用汉字拼音声母进行字典检索,关键问题是需要在建立数据字典时,根据用户输入的中文信息自动计算出对应的声母,即自动进行汉字对应声母的编码,以透明的方式提供这一转换过程。
2 实现思路
2.1计算汉字的ASCII码
汉字字符在操作环境下是以Unicode双字节编码方式存在,每个汉字字符对应一个整数,在C# 中已经没有直接计算汉字ASCII码的函数,需要通过利用Encoding类的GetBytes进行间接计算:如下:
重点原理必须知道的东东!!!!
Byte[] b=Encoding.Default.GetBytes(“啊”)
b[0]: 176
b[1]: 161
ASCII码的函数获取ASCII的方法:将汉字转换为直接数组时,将第一位字节数值乘以256加上第二个字节数减65536即的ASCII码的函数值:(备注256*256等于65535)
int i=b[0]*256+b[1]-65536
2.2根据汉字字符编码国标GB2312-80规则确定ASCII码对应的声母
GB2312-80《信息交换用汉字编码字符集 基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。
一级字计算根据汉字ASCII码值可以方便地计算出来:其中
声母A对应ASCII码范围是:-20319至-20284
声母B对应ASCII码范围是:-19775 至-19219
……
声母Z对应ASCII码范围是:-11055 至-10247
二级字计算通过编码为固定的声母字符串,当汉字ASCII码值>-10079时,通过对应字符串获取。
3 实现方法
3.1 定义
引用命名空间:System.Text
定义类:Encoding
自定义方法:
(1)计算字符ASCII值函数:Asc
参数:pStr, 字符串型
返回值:Int,字符的ASC码
(2)计算汉字声母函数:Hzpy
参数:pStr,字符串型
返回值:String, 转换后的汉字声母字符串
3.2 算法流程图
3.3 算法描述
(1)判断输入参数字符串是否为空,若为空,则结束。
(2)初始化局部变量。
(3)使用For循环,逐字符进行计算。
(4)利用Asc函数计算当前字符的ASCII码。
(5)根据ASCII值分别计算字符的声母,其中:ASCII值在-10247到-20319,属于一级字库,按拼音顺序排列,可以通过判定值直接得到声母;ASCII值大于0,则取字母“A”到“Z”;ASCII值在0到-10079之间,则从预定义的声母表中获取。
3.4 主要程序段
//计算字符串首字符的ASCII码值
public int Asc(string pStr)
{ int _i=0;
if (pStr.Length > 0)
{ string _s = pStr.Substring (0,1);//取首字符
byte[] _b = System.Text.Encoding.Default.GetBytes (_s); //计算字符的Unicode码
if (_b.Length == 1)
_i = _b[0]; //西文ASCII
else
_i = _b[0]*256+_b[1]-65536; //汉字ASCII-65536 }
return _i; }
//计算字符串对应的声母
public string Hzpy(string pStr)
{ if (pStr.Length == 0){ return "" ;}//参数是空串
string sResult = ""; //定义返回字符串变量
int t; //字符的Ascii码
string gH0="";
gH0 = InputAscii2();//从文件中加载二级字库汉字声母表
pStr = pStr.ToUpper ();
for (int i = 0 ; i < pStr.Length; i++)
{ t = Asc(pStr.Substring (i, 1));
if (t < 0)
{ if ( t >= -10079) //计算二级字库汉字声母
if (gH0.Length > 10079+t)
sResult = sResult + gH0.Substring (10079 + t,1);
else
sResult = sResult + " ";
else //计算一级字库汉字声母
{ if (t>=-20319 && t<=-20284) sResult = sResult + "A";
else if (t>=-20283 && t<=-19776) sResult = sResult + "B";
else if (t>=-19775 && t<=-19219) sResult = sResult + "C";
else if (t>=-19218 && t<=-18711) sResult = sResult + "D";
else if (t>=-18710 && t<=-18527) sResult = sResult + "E";
else if (t>=-18526 && t<=-18240) sResult = sResult + "F";
else if (t>=-18239 && t<=-17923) sResult = sResult + "G";
else if (t>=-17922 && t<=-17418) sResult = sResult + "H";
else if (t>=-17417 && t<=-16475) sResult = sResult + "J";
else if (t>=-16474 && t<=-16213) sResult = sResult + "K";
else if (t>=-16212 && t<=-15641) sResult = sResult + "L";
else if (t>=-15640 && t<=-15166) sResult = sResult + "M";
else if (t>=-15165 && t<=-14923) sResult = sResult + "N";
else if (t>=-14922 && t<=-14915) sResult = sResult + "O";
else if (t>=-14914 && t<=-14631) sResult = sResult + "P";
else if (t>=-14630 && t<=-14150) sResult = sResult + "Q";
else if (t>=-14149 && t<=-14091) sResult = sResult + "R";
else if (t>=-14090 && t<=-13319) sResult = sResult + "S";
else if (t>=-13318 && t<=-12839) sResult = sResult + "T";
else if (t>=-12838 && t<=-12557) sResult = sResult + "W";
else if (t>=-12556 && t<=-12081) sResult = sResult + "X";
else if (t==-12080) sResult = sResult + "H";
else if (t>=-12079 && t<=-11848) sResult = sResult + "X";
else if (t>=-11847 && t<=-11056) sResult = sResult + "Y";
else if (t>=-11055 && t<=-10247) sResult = sResult + "Z";
}}
else //字母和数字
{ if (t>=65 && t<=90|| t>=48 && t<=57)
sResult = sResult + pStr.Substring (i, 1); } }
return sResult; }
4 实现结果
输入:Hzpy(“ab”) , 输出:“AB“
输入:Hzpy(“我们”),输出:“WM”
输入:Hzpy(“驽一孥”),输出:“NYN”
5 小结
通过这种方法计算汉字对应声母,其中一级字库近7000个汉字,只需要通过条件判断语句即可计算出来,二级字库3000多个汉字通过预编码,直接一一对应产生。与过去通过一个汉字对应一个字符的方式相比,这种方法不需要专门的数据文件进行存储,不仅大大提高了计算速度,而且十分容易在不同的开发语言中进行移植,具有非常显著的实用性。
发表评论
-
[转] J2EE集群原理
2013-07-23 09:57 4531J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念 ... -
[转]J2EE 中间件 JVM 集群
2013-07-23 09:51 25211 前言越来越多的关键任务和大型应用正运行在J2EE平台上,象 ... -
[转]通过 Terracotta实现基于Tomcat的Web应用集群
2013-07-23 09:45 5133转载自: http://blog.csdn.n ... -
Terrocotta - 基于JVM的Java应用集群解决方案
2013-07-23 09:47 2502前言 越来越多的企业 ... -
Quartz与Terracotta的集成
2013-07-22 20:39 2782Quartz与Terracotta的集成 • 综述 • 配置 ... -
Terracotta服务器的不同配置方式
2013-07-22 20:37 2152Terracotta Server有4类配置方式:1、单机,无 ... -
Terracotta 3.2.1简介 (一)
2013-07-22 20:25 2482Terracotta开源项目以及Terracotta公司 ... -
Jvm级别的集群(转)
2013-07-22 20:14 2330Java的垃圾回收机制( ... -
【转】java并发编程-Executor框架
2012-11-28 13:20 3732转载自 http://www.iteye.com/topic ... -
【转】互联网常见Open API文档资源
2012-07-17 17:22 2413原文出处:http://www.williamlong.i ... -
最近项目开发中遇到几个问题
2011-11-25 18:49 18261.JDK1.60安装之后与Apache CXF开发WebSe ... -
Java 文件合并功能
2011-08-25 08:44 3761在项目中在一个文件目录中存放多个临时文件合并文件功 ... -
Java 分割功能实现
2011-08-25 08:39 2793在项目针对比较大的文件需要文件的分割功能,特意写了一个 ... -
在JVM关闭的时候线程该怎么关闭呢
2011-08-21 13:11 2207在编写线程类的时候设置一个标志,用于表示是否开始执行 ... -
Java获取系统IP地址
2011-08-21 13:01 6037在一个项目中如果你想获取系统的ip地址那么可能许多同 ... -
java 网络编程,RMI,EJB之间那些屁事(二)
2010-12-12 14:40 1912使用RMI和EJB的童鞋,都知道EJB有客户端 ... -
java 网络编程,RMI,EJB之间那些屁事(一)
2010-12-12 14:18 3035在java的开发中不可避免的遇到java ... -
JMX 和系统管理
2010-12-04 16:03 5622检测 ... -
关于JDK1.5不支持创建泛型数组的解决方案
2009-12-05 14:59 3825在项目中需要 ... -
JDK1.5中的打印服务
2009-12-01 13:23 2585package com.unutrip.print; imp ...
相关推荐
4. **自动化处理**:在易语言中,可以编写函数或过程来封装以上操作,使得用户可以方便地调用,自动取汉字声母。 在实际开发中,这类源码可能会提供一个接口,接受汉字字符串作为输入,返回对应的声母字符串。使用...
- 汉字是中国的主要文字系统,而拼音是根据汉语拼音方案为汉字注音的一种方法,主要由声母、韵母和声调组成。 - 在计算机处理汉字时,有时需要将汉字转换为拼音,以便进行搜索、语音合成或自然语言处理等操作。 2...
在实现中文自动检索拼音的过程中,主要涉及到以下几个关键知识点: 1. 汉字转拼音库:通常会使用预构建的汉字转拼音库,如pypinyin、xpinyin等Python库,这些库包含了大部分常用汉字的拼音信息,能够快速将汉字转换...
汉字是中文的书写形式,每个汉字都有其对应的拼音,拼音由声母、韵母和声调组成。例如,“汉”字的拼音是“hàn”,“字”字的拼音是“zì”。在计算机编程中,我们需要处理这种映射关系,以便将汉字转换成拼音。 ...
4. 机器学习法:通过训练模型,如神经网络,让系统自动学习汉字与拼音的对应关系。这种方法适用于处理大量数据,但需要大量标注好的训练数据和计算资源。 三、数组实现“数据库” 在编程中,我们可以通过数组或...
通过各种工具和库,开发者可以轻松地将汉字转化为便于计算机处理的拼音形式,从而实现各种功能,如搜索优化、语音识别、自动文本摘要等。对这个领域的深入理解和掌握,将极大地提高我们在中文信息处理方面的技术能力...
这个任务的主要目的是将汉字转换成对应的汉语拼音,以便计算机能够更好地理解和处理中文信息。以下将详细介绍汉字转拼音的不同形式及其应用。 1. **大写(默认)**:在大多数情况下,当我们说“大写”时,是指将...
在中文中,每个汉字都有一个或多个对应的拼音,这些拼音由声母(如b、p、m等)和韵母(如a、o、e等)组成。为了在VB中实现汉字转拼音首字母,我们可以利用预先整理好的汉字拼音库。这个库通常包含大部分常用汉字的...
在信息技术领域,理解和掌握汉字转拼音的原理与实现方法对于开发和优化涉及中文处理的软件至关重要。 首先,汉字转拼音的基本原理基于汉字与汉语拼音的对应关系。每个汉字都有一个或多个标准的汉语拼音,这些拼音...
本文将深入探讨这一技术,并基于提供的压缩包文件"DXHanZiToPinYin"来讲解实现汉字转拼音的原理、方法及其实现。 1. 汉字转拼音的基本原理: 汉字转拼音主要依赖于汉语拼音库,它包含了大量的汉字与其对应的拼音...
汉字是中文的基本单位,每个汉字都有其特定的发音,这通常由声母、韵母和声调组成。拼音是根据汉字的发音规则将其转换成拉丁字母的表示方法,比如“你好”转换为“nǐ hǎo”。拼音不仅帮助非中文使用者读写汉字,还...
- **中文输入法**:在中文输入法中,用户可以通过输入拼音快速选择对应的汉字,这就需要将用户输入的拼音转换成对应的汉字。 - **自然语言处理**:在进行中文自然语言处理时,常常需要将汉字转换为拼音来进行语音...
ACLL是对每个字符进行标记的过程,这些标记可以包含字符的类别、属性等信息,例如在中文文本中,可以用来标识汉字的声母、韵母、声调等。这种标注对于语音识别、文本分类和语义分析等任务有着重要作用。 在MATLAB中...
在描述中提到,“输入字符串直接获得汉字全拼”,这意味着该方法可以接收包含多个汉字的字符串,并将其转换为对应的全部拼音。而“如果需要简拼自己用Left(xxxx,1)获得”,则是指如果只需要每个汉字的首字母作为简拼...
汉字是中文的主要书写系统,而拼音则是以拉丁字母表示汉语的一种方式,主要基于普通话的发音。拼音分为声母、韵母和声调三个部分,例如“zh”是声母,“ang”是韵母,“第一声”代表了声调。这个工具能够准确地识别...
这些库能将汉字转换为对应的拼音字符串,包括声母和韵母。 下面是一些关键步骤: 1. **拼音转换**:在用户输入字符时,获取输入字符的拼音。如果输入的是汉字,可以通过上述库进行转换;如果输入的是拼音,可以...
每个汉字都对应一组拼音,由声母、韵母和声调组成,例如“你好”对应的拼音是“nǐ hǎo”。 二、KTestpinyin.exe的工作原理 KTestpinyin.exe工具采用了高效的汉字拼音库,该库包含了大量汉字的拼音信息。当用户...
汉字转拼音就是将汉字转换成其对应的汉语拼音,包括声母、韵母和声调。例如,“你好”转换后为“nǐ hǎo”。 《实用汉字转拼音 V4》的特点在于其批量处理能力。传统的汉字转拼音方法可能需要逐个字符操作,而这款...
本主题“实用汉字转拼音”将深入探讨这一技术,包括它的原理、实现方法以及相关的应用。 首先,汉字转拼音,也称为汉语拼音化,是将汉字转化为汉语拼音的过程。汉语拼音是根据普通话音系,采用拉丁字母来表示汉语的...
对于拼音搜索,相关度计算可能涉及到词语的共现频率、语义相似度以及拼音与汉字的对应关系。 6. **用户体验优化**: 为了提升用户体验,拼音汉字搜索结果通常会提供动态更新和自动补全功能,即用户在输入拼音时,...