您的位置:首页 > 编程语言 > C#

.net/C# 实现汉字到拼音转换

2010-07-22 09:24 330 查看
在进行语料库的制作过程中,一项繁琐的工作便是将已有的汉字手动转换为拼音,格式如下:

Sentence m39C1041 :制约俄国、巩固西方在东欧的立足点,

Sentence spell:Zhi4 yue1 e2 guo2 gong3 gu4 xi1 fang1 zai4 dong1 ou1 de0 li4 zu2 dian3

Sentence m39C1042 :避免东欧发生逆转,

Sentence spell:Bi4 mian3 dong1 ou1 fa1 sheng1 ni4 zhuan3 (来自863语料库)

当我们已知汉字的时候何不自动完成汉字到拼音的转换,我们项目中对语料没有音调的要求,所以“他、塔、榻”所对应的拼音都是“ta”。

这里我们采用了一个工作量巨大的方法,在GB 2312编码中,每一个汉字的编码都是唯一确定的,汉字编码与音节之间存在多对一的关系,通过对汉字编码的总结,得到如下汉字编码—音节对应表,如表1所示。通过对汉字编码—音节对应表的查找,即可实现汉字到音节的转换。例如“帮”字的GB 2312编码为6182,对应的音节即为“bang”。

表1. 汉字编码—音节对应表

汉字编码

音节
6325|6436|7571|7925
a
6263|6440|7040|7208|7451|7733|7945
ai
……
……
5815|7294|7840|8341
zhao
5826|6531|6571|7859|7903|8361
zheng
对于中文操作系统,系统默认编码方式即为GB 2312编码,所以.net中,Encoding.Default 对应于用户在控制面板中区域和语言选项中的默认编码方式。

取得汉字编码的代码实现为:

byte[] ascii = Encoding.Default.GetBytes(strInput);//string为输入的单个汉字

if (ascii.Length == 1)//如果不是汉字而是窄字符

{

return strInput;

}

else

{

int codeNo;

codeNo = (ascii[0] - 0xa0) * 100 + ascii[1] - 0xa0;//最高位*100+最低位就是汉字编码

}

效果演示:



需要源代码请留下你的邮箱!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: