打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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


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

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


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 拼音转换-工具类
C#汉字转拼音
Java 中文排序
汉字转拼音
C# 处理汉字、拼音、笔画转换 Microsoft Visual Studio International Pack 1.0
pinyin4j 汉语转拼音 - fuliang - JavaEye技术网站
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服