汉字拼音首字母 简繁体等转换

来源:互联网 发布:mysql的安装和配置 编辑:程序博客网 时间:2024/06/10 06:27

汉字转拼音,汉字转首字母,这个问题在网上搜索了N多资料,发现没有一个可以做到毫不问题的转换,总是存在生僻字以及多音字转换失败等等问题.

第一部分介绍的是网上一个朋友的方案.这是微软官方的一个类库,但是毕竟是老外的东西,有些汉字依然转换拼音和首字母错误,而且不是生僻字.

怎么办呢?困扰我好久.解决方案我会在这篇文章的最后介绍.

昨天经过网友提醒,提取汉字拼音的方法可以使用微软的一个类库 Visual Studio International Pack ,今天试了一试,确实好用!下面分享下使用方法:

首先下载Visual Studio International Pack 1.0,官方下载地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=44CAC7F0-633B-477D-AED2-99AEE642FC10&displaylang=zh-cn。下载完毕后解压,解压后可以发现7个MSI安装文件,其中CHSPinYinConv.msi是汉字拼音组件,CHTCHSConv.msi是进行繁简体互转组件,安装这两个MSI就可以了 (x86操作系统上的默认安装目录是 C:\Program Files\Microsoft Visual Studio International Pack\) 。安装完毕后,需要在VS里添加引用,分别引用:C:\Program Files\Microsoft Visual Studio International Pack\Simplified Chinese Pin-Yin Conversion Library(拼音)下和C:\Program Files\Microsoft Visual Studio International Pack\Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool(繁简互转)下的dll 即可使用。

完成上面的工作后,使用方法就非常简单了,下面看代码:



using Microsoft.International.Converters.PinYinConverter;//导入拼音相关

namespace WebApplication2
{
    
public class Class1
    {   
        
/// <summary> 
        
/// 汉字转化为拼音
        
/// </summary> 
        
/// <param name="str">汉字</param> 
        
/// <returns>全拼</returns> 
        public static string GetPinyin(string str)
        {
            
string r = string.Empty;
            
foreach (char obj in str)
            {
                
try
                {
                    ChineseChar chineseChar 
= new ChineseChar(obj);
                    
string t = chineseChar.Pinyins[0].ToString();
                    r 
+= t.Substring(0, t.Length - 1);
                }
                
catch
                {
                    r 
+= obj.ToString();
                }
            }
            
return r;
        }

        
/// <summary> 
        
/// 汉字转化为拼音首字母
        
/// </summary> 
        
/// <param name="str">汉字</param> 
        
/// <returns>首字母</returns> 
        public static string GetFirstPinyin(string str)
        {
            
string r = string.Empty;
            
foreach (char obj in str)
            {
                
try
                {
                    ChineseChar chineseChar 
= new ChineseChar(obj);
                    
string t = chineseChar.Pinyins[0].ToString();
                    r 
+= t.Substring(01);
                }
                
catch
                {
                    r 
+= obj.ToString();
                }
            }
            
return r;
        }
    }
}
复制代码

 

调用方法:(注意先引用)

GetPinyin("风影");//获取全拼
GetFirstPinyin("风影");//获取首字母

 

是不是非常简单呢?有了这个类库就省事多了!顺便再补充一下繁简体互转的方法,某些时候可能会用到:

先导入

using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;

复制代码
        /// <summary> 
        
/// 简体转换为繁体
        
/// </summary> 
        
/// <param name="str">简体字</param> 
        
/// <returns>繁体字</returns> 
        public static string GetTraditional(string str)
        {
            
string r = string.Empty;
            r 
= ChineseConverter.Convert(str, ChineseConversionDirection.SimplifiedToTraditional);
            
return r;
        }
        
/// <summary> 
        
/// 繁体转换为简体
        
/// </summary> 
        
/// <param name="str">繁体字</param> 
        
/// <returns>简体字</returns> 
        public static string GetSimplified(string str)
        {
            
string r = string.Empty;
            r 
= ChineseConverter.Convert(str, ChineseConversionDirection.TraditionalToSimplified);
            
return r;
        }
复制代码
using Microsoft.International.Converters.PinYinConverter;//导入拼音相关

namespace WebApplication2
{
    
public class Class1
    {   
        
/// <summary> 
        
/// 汉字转化为拼音
        
/// </summary> 
        
/// <param name="str">汉字</param> 
        
/// <returns>全拼</returns> 
        public static string GetPinyin(string str)
        {
            
string r = string.Empty;
            
foreach (char obj in str)
            {
                
try
                {
                    ChineseChar chineseChar 
= new ChineseChar(obj);
                    
string t = chineseChar.Pinyins[0].ToString();
                    r 
+= t.Substring(0, t.Length - 1);
                }
                
catch
                {
                    r 
+= obj.ToString();
                }
            }
            
return r;
        }

        
/// <summary> 
        
/// 汉字转化为拼音首字母
        
/// </summary> 
        
/// <param name="str">汉字</param> 
        
/// <returns>首字母</returns> 
        public static string GetFirstPinyin(string str)
        {
            
string r = string.Empty;
            
foreach (char obj in str)
            {
                
try
                {
                    ChineseChar chineseChar 
= new ChineseChar(obj);
                    
string t = chineseChar.Pinyins[0].ToString();
                    r 
+= t.Substring(01);
                }
                
catch
                {
                    r 
+= obj.ToString();
                }
            }
            
return r;
        }
    }
}
复制代码

 

调用方法:(注意先引用)

GetPinyin("风影");//获取全拼
GetFirstPinyin("风影");//获取首字母

 

是不是非常简单呢?有了这个类库就省事多了!顺便再补充一下繁简体互转的方法,某些时候可能会用到:

先导入

using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;

复制代码
        /// <summary> 
        
/// 简体转换为繁体
        
/// </summary> 
        
/// <param name="str">简体字</param> 
        
/// <returns>繁体字</returns> 
        public static string GetTraditional(string str)
        {
            
string r = string.Empty;
            r 
= ChineseConverter.Convert(str, ChineseConversionDirection.SimplifiedToTraditional);
            
return r;
        }
        
/// <summary> 
        
/// 繁体转换为简体
        
/// </summary> 
        
/// <param name="str">繁体字</param> 
        
/// <returns>简体字</returns> 
        public static string GetSimplified(string str)
        {
            
string r = string.Empty;
            r 
= ChineseConverter.Convert(str, ChineseConversionDirection.TraditionalToSimplified);
            
return r;
        }
复制代码

该类库的功能概述

Microsoft Visual Studio International Pack 1.0版 包括以下功能:

  • East Asia Numeric Formatting Library - 支持将小写的数字字符串格式化成简体中文,繁体中文,日文和韩文的大写数字字符串。
  • Japanese Kana Conversion Library - 支持将日文假名(Kana)转化为另一种日文字符。
  • Japanese Text Alignment Library - 支持日文特有的一种对齐格式。
  • Japanese Yomi Auto-Completion Library - 类库支持感知日文输入法的输入自动完成和一个文本框控件的示例。
  • Korean Auto Complete TextBox Control - 支持韩文输入法的智能感知和输入自动完成的文本框控件。
  • Simplified Chinese Pin-Yin Conversion Library - 支持获取简体中文字符的常用属性比如拼音,多音字,同音字,笔画数。
  • Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool - 支持简繁体中文之间的转换。该组件还包含一个Visual Studio集成开发环境中的插件(Add-in)支持简繁体中文资源文件之间的转换。

     

    Visual Studio International Feature Pack 2.0 是对 1.0 版本的扩展,包含一组控件和类库:

    • Yomigana Framework 包含了类库和控件。
      • 类库:Yomigana 类库容许对串(string)类型加注 Yomigana,同时也支持对一般类型的注解功能,任何实现了IEnumerable接口的对象都可以被串类型和泛型的实例注解。为了简化复杂的注解字符串比较特设计了支持各种日文比较选项的比较类型。
        • 通用的一些类,用泛型实现对一个可枚举的类型注音。
        • 特殊目的的一些类,用以上泛型实现对一个字符串用某种类型中注音。
        • 特殊目的的一些StringAnnotation 类,用以上泛型实现对一个字符串用字符串注音,包括解析和格式化功能。
        • 一个比较器类,使用以上类实现比较字符串。
        • 一个实现了 IEnumerable <string> 的数据结构,把一个字符串分成枚举的字符串段,并用 IEnumerator <string> 输出。
      • 控件:
        • 增强的Ajax/WPF/WinForm 文本框(TextBox)控件 用来根据用户的输入捕获读音。
        • 一个增强的使用Ruby标签的ASP.NET Label控件。
    • Chinese Text Alignment Class Library and TextBox Controls 包含支持简体中文文本对齐的WinForm 和 WPF 的TextBox控件, 以及供帮助开发人员很容易地按中文文本对齐显示字符串的一个类库。
    • Chinese Auto Complete Class Library and TextBox Controls 包含支持感知简体中文和繁体中文输入法并自动完成的WinForm 和 WPF 的TextBox控件, 以及供开发人员很容易地向标准控件添加感知输入法并自动完成功能的一个类库。
    • Korean Auto Complete Class Library and ComboBox Controls 包含支持感知韩语输入法并自动完成的WinForm 和 WPF 的ComboBox控件, 以及供开发人员很容易地向标准控件添加感知输入法并自动完成功能的一个类库。
    • Numeric Formatting Class Library 包含支持五种语言的数字格式化成文字的类, 2.0 版支持格式化阿拉伯数字为阿拉伯文字。


    可见,这个类库在开发国际化程序时是非常实用的。 


    using Microsoft.International.Converters.PinYinConverter;//导入拼音相关

    namespace WebApplication2
    {
        
    public class Class1
        {   
            
    /// <summary> 
            
    /// 汉字转化为拼音
            
    /// </summary> 
            
    /// <param name="str">汉字</param> 
            
    /// <returns>全拼</returns> 
            public static string GetPinyin(string str)
            {
                
    string r = string.Empty;
                
    foreach (char obj in str)
                {
                    
    try
                    {
                        ChineseChar chineseChar 
    = new ChineseChar(obj);
                        
    string t = chineseChar.Pinyins[0].ToString();
                        r 
    += t.Substring(0, t.Length - 1);
                    }
                    
    catch
                    {
                        r 
    += obj.ToString();
                    }
                }
                
    return r;
            }

            
    /// <summary> 
            
    /// 汉字转化为拼音首字母
            
    /// </summary> 
            
    /// <param name="str">汉字</param> 
            
    /// <returns>首字母</returns> 
            public static string GetFirstPinyin(string str)
            {
                
    string r = string.Empty;
                
    foreach (char obj in str)
                {
                    
    try
                    {
                        ChineseChar chineseChar 
    = new ChineseChar(obj);
                        
    string t = chineseChar.Pinyins[0].ToString();
                        r 
    += t.Substring(01);
                    }
                    
    catch
                    {
                        r 
    += obj.ToString();
                    }
                }
                
    return r;
            }
        }
    }
    复制代码

     

    调用方法:(注意先引用)

    GetPinyin("风影");//获取全拼
    GetFirstPinyin("风影");//获取首字母

     

    是不是非常简单呢?有了这个类库就省事多了!顺便再补充一下繁简体互转的方法,某些时候可能会用到:

    先导入

    using Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;

    复制代码
            /// <summary> 
            
    /// 简体转换为繁体
            
    /// </summary> 
            
    /// <param name="str">简体字</param> 
            
    /// <returns>繁体字</returns> 
            public static string GetTraditional(string str)
            {
                
    string r = string.Empty;
                r 
    = ChineseConverter.Convert(str, ChineseConversionDirection.SimplifiedToTraditional);
                
    return r;
            }
            
    /// <summary> 
            
    /// 繁体转换为简体
            
    /// </summary> 
            
    /// <param name="str">繁体字</param> 
            
    /// <returns>简体字</returns> 





            public static string GetSimplified(string str)
            {
                
    string r = string.Empty;
                r 
    = ChineseConverter.Convert(str, ChineseConversionDirection.TraditionalToSimplified);
                
    return r;
            }
    复制代码

    现阶段能在网上找到的资料我大体已经找过了,分为以下几类:

    1.很多网站提供了这样的页面,允许汉字转换为pinyin或者首字母,发现准确性很高,但是没有对外公布的接口

    2.很多网上的朋友是通过asic编码去匹配汉字,然后来找拼音,两个数组的方式.

    3.微软企业服务 部门的朋友在网上搜索了一个解决方案,是在sqlserver中做一个函数,这个方案大家可以很容易在网上搜索到.

    依然存在很多问题.不能精确定位导致转换的汉字依然不够多,不准确等等

    怎么办呢?

    想了一个最本的办法:找到一个汉字与拼音的键值对库,在数据库中做一张汉字拼音表.然后去数据库查询,当然多音字需要单独处理,具体可以大家按照各自的需求自己来就还.

    这个笨方案的缺点:汉字太多,如果是专业的团队,专门处理汉字与拼音的,而且会处理很多很多生僻字、多音字等等,那么需要找一个或者买一个很好的库。

    优点:对于普通的程序,汉字转拼音是没有问题的。我的表里面有两万多的汉字。基本覆盖了GBK里的汉字,拼音也已经经过抽样校验无误。

    个人使用了五万的姓名进行教研,发现没有错误。因为是后台程序处理,所以多音字我就默认了一个。不再人工处理。

    如果有需要这个拼音库的,可以留言联系我。

    我觉得我这个方案虽笨,但是没有的汉字我可以在后台管理添加。而且汉字库对于普通处理已经够了。

    算是我这两天的劳动成果吧。






  • 0 0
    原创粉丝点击