昨天经过网友提醒,提取汉字拼音的方法可以使用微软的一个类库 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(0, 1);
                }
                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 版支持格式化阿拉伯数字为阿拉伯文字。

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

汉字转拼音貌似一直是C#开发的一个难题,无论什么方案都有一定的bug,之前使用了两种方案。

1.Chinese2Spell.cs 一些不能识别的汉字全部转为Z

2.Microsoft Visual Studio International Feature Pack 1.0  连"广"、“区”都不能转,很让人失望。

这些都是2010年以前的方案,至少还有大侠在为汉字转拼音不断努力着,目前发现最完美的就是NPINYIN,在googlecode可以看到它的开源项目,http://code.google.com/p/npinyin/

不能识别的字很少,而且还在不断维护更新,日趋完美,推荐大家使用。

下载地址

dll:http://files.cnblogs.com/files/guohu/NPinyin-0.2.4588.20158-bin.zip

源码:http://files.cnblogs.com/files/guohu/NPinyin-0.2.x-source_code.zip

v0.2.x的变化

  • 1、增加对不同编码格式文本的支持,同时增加编码转换方法Pinyin.ConvertEncoding
  • 2、重构单字符拼音的获取,未找到拼音时返回字符本身.

汪思言 2012年7月23日晚

将中文转换成拼音全文和首字母的.net 组件。示例:

using System;
using System.Collections.Generic;
using System.Text;
using NPinyin;namespace NPinyinTest
{class Program{static void Main(string[] args){string[] maxims = new string[]{"事常与人违,事总在人为","骏马是跑出来的,强兵是打出来的","驾驭命运的舵是奋斗。不抱有一丝幻想,不放弃一点机会,不停止一日努力。 ","如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭", "懦弱的人只会裹足不前,莽撞的人只能引为烧身,只有真正勇敢的人才能所向披靡"};string[] medicines = new string[] {"聚维酮碘溶液","开塞露","炉甘石洗剂","苯扎氯铵贴","鱼石脂软膏","莫匹罗星软膏","红霉素软膏","氢化可的松软膏","曲安奈德软膏","丁苯羟酸乳膏","双氯芬酸二乙胺乳膏","冻疮膏","克霉唑软膏","特比奈芬软膏","酞丁安软膏","咪康唑软膏、栓剂","甲硝唑栓","复方莪术油栓"};Console.WriteLine("UTF8句子拼音:");foreach (string s in maxims){Console.WriteLine("汉字:{0}\n拼音:{1}\n", s, Pinyin.GetPinyin(s));}Encoding gb2312 = Encoding.GetEncoding("GB2312");Console.WriteLine("GB2312拼音简码:");foreach (string m in medicines){string s = Pinyin.ConvertEncoding(m, Encoding.UTF8, gb2312);Console.WriteLine("药品:{0}\n简码:{1}\n", s, Pinyin.GetInitials(s, gb2312));}Console.ReadKey();}}
}

运行结果

UTF8句子拼音: 汉字:事常与人违,事总在人为 拼音:shi chang yu ren wei , shi zong zai ren wei

汉字:骏马是跑出来的,强兵是打出来的 拼音:jun ma shi pao chu lai de , qiang bing shi da chu lai de

汉字:驾驭命运的舵是奋斗。不抱有一丝幻想,不放弃一点机会,不停止一日努力。 拼音:jia yu ming yun de duo shi fen dou 。 bu bao you yi si huan xiang , bu fa ng qi yi dian ji hui , bu ting zhi yi ri nu li 。

汉字:如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭 拼音:ru guo ju pa qian mian die dang de shan yan , sheng ming jiu yong yuan zh i neng shi si shui yi tan

汉字:懦弱的人只会裹足不前,莽撞的人只能引为烧身,只有真正勇敢的人才能所向披靡 拼音:nuo ruo de ren zhi hui guo zu bu qian , mang zhuang de ren zhi neng yin w ei shao shen , zhi you zhen zheng yong gan de ren cai neng suo xiang pi mi

GB2312拼音简码: 药品:聚维酮碘溶液 简码:JWTDRY

药品:开塞露 简码:KSL

药品:炉甘石洗剂 简码:LGSXJ

药品:苯扎氯铵贴 简码:BZLAT

药品:鱼石脂软膏 简码:YSZRG

药品:莫匹罗星软膏 简码:MPLXRG

药品:红霉素软膏 简码:HMSRG

药品:氢化可的松软膏 简码:QHKDSRG

药品:曲安奈德软膏 简码:QANDRG

药品:丁苯羟酸乳膏 简码:DBQSRG

药品:双氯芬酸二乙胺乳膏 简码:SLFSEYARG

药品:冻疮膏 简码:DCG

药品:克霉唑软膏 简码:KMZRG

药品:特比奈芬软膏 简码:TBNFRG

药品:酞丁安软膏 简码:TDARG

药品:咪康唑软膏、栓剂 简码:MKZRG、SJ

药品:甲硝唑栓 简码:JXZS

药品:复方莪术油栓 简码:FFESYS

C#汉字转拼音(支持多音字)

阅读目录

  • 首先在nuget引用对应的包
  • 简单的demo
  • 汉字转拼音类封装
  • 源码分享

  之前由于项目需要,中间需要一个汉字转拼音和首拼的功能来做查询,感觉这种功能基本已经成熟化了,于是查找了相关的代码,首先引入眼帘的是下面两篇文章

     1.C# 汉字转拼音(支持GB2312字符集中所有汉字)

     2.【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法

  感谢两位博主,写的比较全也很详细,都有提供源码,大家可以参考下。

  由于考虑到接口的需要,于是参考了 第一篇,文章中作者的源码基本能满足汉字转拼音的需要,对于其他特殊的字符,也可以在进行添加补充,不足之处就是不支持多音字,由于需要支持多音字的查询,所以后面有查了下其他的文章,发现还没有现成的文章(也可能本人的搜索水平比较水)。后来查找发现对于汉字转拼音,原来微软已经提供了 Microsoft Visual Studio International Pack ,而且很强大。于是试了一下

首先在nuget引用对应的包

查找 PinYinConverter

回到顶部

简单的demo

小试一下,使用也非常简单,只要直接使用ChineseChar类进行装换就好

1             string ch = Console.ReadLine();
2             ChineseChar cc = new ChineseChar(ch[0]);
3             var pinyins = cc.Pinyins.ToList();
4             pinyins.ForEach(Console.WriteLine);

结果如下:

  我们可以看到, 行 的多音字有 hang,heng,xing 三个,这里连音标也出来了,确实很方便。而我需要的功能是输入 银行 ,然后转换为拼音是 yinhang,yinheng,yinxing,  首拼是 yh,yx。有ChineseChar 这个类的话做起来思路就简单了。

回到顶部

汉字转拼音类封装

  1.首先对输入的汉字进行拆分

  2.接着每个汉字用ChineseChar 获取多个拼音

  3.然后除去数字,去重,提取首字符,再在进行组合就好了

  于是写了个帮助类进行装换,代码如下:

 public class PinYinConverterHelp{public static PingYinModel GetTotalPingYin(string str){var chs = str.ToCharArray();//记录每个汉字的全拼Dictionary<int, List<string>> totalPingYins = new Dictionary<int, List<string>>();for (int i = 0; i < chs.Length; i++){var pinyins = new List<string>();var ch = chs[i];//是否是有效的汉字if (ChineseChar.IsValidChar(ch)){ChineseChar cc = new ChineseChar(ch);pinyins = cc.Pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).ToList();}else{pinyins.Add(ch.ToString());}//去除声调,转小写pinyins = pinyins.ConvertAll(p => Regex.Replace(p, @"\d", "").ToLower());//去重pinyins = pinyins.Where(p => !string.IsNullOrWhiteSpace(p)).Distinct().ToList();if (pinyins.Any()){totalPingYins[i] = pinyins;}}PingYinModel result = new PingYinModel();foreach (var pinyins in totalPingYins){var items = pinyins.Value;if (result.TotalPingYin.Count <= 0){result.TotalPingYin = items;result.FirstPingYin = items.ConvertAll(p => p.Substring(0, 1)).Distinct().ToList();}else{//全拼循环匹配var newTotalPingYins = new List<string>();foreach (var totalPingYin in result.TotalPingYin){newTotalPingYins.AddRange(items.Select(item => totalPingYin + item));}newTotalPingYins = newTotalPingYins.Distinct().ToList();result.TotalPingYin = newTotalPingYins;//首字母循环匹配var newFirstPingYins = new List<string>();foreach (var firstPingYin in result.FirstPingYin){newFirstPingYins.AddRange(items.Select(item => firstPingYin + item.Substring(0, 1)));}newFirstPingYins = newFirstPingYins.Distinct().ToList();result.FirstPingYin = newFirstPingYins;}}return result;}}

调用方式:

                Console.WriteLine("请输入中文:");string str = Console.ReadLine();var pingyins = PinYinConverterHelp.GetTotalPingYin(str);Console.WriteLine("全拼音:" + String.Join(",", pingyins.TotalPingYin));Console.WriteLine("首音:" + String.Join(",", pingyins.FirstPingYin));Console.WriteLine();

结果:

目前试过一些生僻字都是能支持,对于一些太偏的还没试过,不过对于一般汉字转拼音的,多音字支持这里就已经足够了。

这里仅仅是使用了 Microsoft Visual Studio International Pack 这个扩展包里面的汉字转拼音功能,其实里面还有中文、日文、韩文、英语等各国语言包,并提供方法实现互转、获、获取字数、甚至获取笔画数等等强大的功能,有兴趣的朋友可以自行查询下它的api。

回到顶部

源码分享

  分享是一种美德,有时候牛逼的文章可以提高我们的技术层面,但有时候更多的需求是业务层面,很多小知识应用的分享却可以帮我们提高业务层面的问题。只要分享的知识点有用,不误人子弟,哪怕大小都是一种学习,所以也希望大家能勇于分享。

  最后,源码分享出来给大家,如果有错误和不足的地方,也希望指正

  地址:https://github.com/qq1206676756/PinYinParse

[C#][转载]C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母相关推荐

  1. C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母 转

    C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母 提取汉字拼音的方法可以使用微软的一个类库 Visual Studio Internationa ...

  2. C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母

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

  3. C# 应用微软的Visual Studio International Pack 类库提取汉字拼音首字母[转]

    本文转自:http://www.cnblogs.com/yazdao/archive/2011/06/04/2072488.html 昨天经过网友提示,提取汉字拼音的办法可以应用微软的一个类库 Vis ...

  4. C# 汉字转拼音 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母...

    代码参考该文 http://www.cnblogs.com/yazdao/archive/2011/06/04/2072488.html VS2015版本 1.使用Nuget 安装 "Sim ...

  5. (转载)C#提取汉字拼音首字母的方法

    今天突然要用到提取汉字拼音首字母的功能,去网上找了找,发现没有几个好用的,决定自己写一个,效果还不错,发出来大家一起研究下,分享给大家!直接入主题: 1.首先对编码进行定义 #region 编码定义 ...

  6. 使用微软的 Visual Studio International Pack 1.0 进行网站简体与繁体的互转和得到汉字、拼音、笔画等相关信息...

    2009年3月31日,微软发布了 Microsoft Visual Studio International Pack 1.0 SR1.Visual Studio International Pack ...

  7. 利用微软类库 Visual Studio International Pack 汉字转拼音

    首先,从微软官网下载安装包:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=44CAC7F0-633B-477D-AED2 ...

  8. 微软提供对汉语拼音的强大升级支持--Microsoft Visual Studio International Pack 1.0 SR1

    下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID=44CAC7F0-633B-477D-AED2-99AEE642FC10& ...

  9. 使用Microsoft Visual Studio International Pack获得中文字符串的所有拼音组合(处理多音字)...

    最近一个项目中客户需要做人名的拼音检索,就像QQ好友那样,输入拼音就提示符合的联系人.上网找了一下,发现微软已经发布了相关的支持库,不仅可以处理拼音,还能处理笔画.简繁体转换等.csdn上有一篇博客介 ...

最新文章

  1. Android View框架的measure机制
  2. 前端如何使用proxyTable和nginx解决跨域问题
  3. Debug Tensorflow :Two checkpoint references resolved to different objects
  4. Vue -项目创建(rem适配项的设置)
  5. 粉丝回馈 | 用30天换来了这辈子独一无二的纪念
  6. Java——集合(Map集合的两种迭代)
  7. 如何使用Tree-shaking减少代码构建体积
  8. 使用GDAL获取网络数据
  9. Lc123验证是不是回文序列
  10. C++教程:C++开发的四重境界是什么?
  11. 【干货】python正则表达式应用笔记
  12. 油田生产数据选取进展22.2.11——2.17——2.26
  13. 普源示波器 电脑 连接 软件_乐高wedo2.0电脑软件安装及蓝牙连接方法
  14. abel数值反演的matlab实现,Abel逆变换的MATLAB实现(未完成版)
  15. [京喜]卡红包实现真正0.01买东西
  16. matlab使用pcode加密
  17. 篮球爱好和程序的结合:C#生成NBA赛事预告页面
  18. 试玩广告及SmartAd平台介绍
  19. 网络安全- 专访丨互联网安全城市巡回赛冠军肖策:“大满贯”背后的秘密
  20. paddle.fluid.io.xmap_readers

热门文章

  1. java开发软件难吗_JAVA开发太难了呀!30K程序员到底要会哪些技术?
  2. 新开业和新签约酒店 | 上海中优城市万豪、杭州明豪voco酒店陆续开业;温德姆集团今年上半年签约59家亚太区新酒店...
  3. 从《【何同学】我拍了一张600万人的合影...》弹幕分析中,获取到了什么?
  4. java中的double相乘-------保留精度
  5. matlab 画石墨烯能带,锯齿石墨烯能带matlab计算程序
  6. 教养,就是要让别人舒服
  7. partial correctness and total correctness部分正确性和整体正确性
  8. LOJ 3124 「CTS2019 | CTSC2019」氪金手游——概率+树形DP
  9. 360全景拍摄为什么要使用鱼眼镜头,与超广角镜头区别?
  10. Java通过jacob生成动态word,还有一种方法通过word书签实现