• 欢迎访问我爱CSharp学习网,这里有最新最全的C#书籍,C#视频。
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏我爱C#学习网吧
  • 推荐使用最新版Chrome浏览器和火狐浏览器访问本网站

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

C#杂烩 52csharp 599次浏览 0个评论 扫描二维码

(点击上方蓝字,可快速关注我们)


来源:最爱晴天

链接:cnblogs.com/qtqq/p/6195641.html


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


  1. C# 汉字转拼音(支持GB2312字符集中所有汉字)(http://www.cnblogs.com/cxd4321/p/4203383.html)


  2. 【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法(http://www.cnblogs.com/liuxianan/p/pinyinjs.html)


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


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


后来查找发现对于汉字转拼音,原来微软已经提供了 Microsoft Visual Studio International Pack ,而且很强大。于是试了一下


首先在nuget引用对应的包


 查找 PinYinConverter


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


简单的demo


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


string ch = Console.ReadLine();

ChineseChar cc = new ChineseChar(ch[0]);

var pinyins = cc.Pinyins.ToList();

pinyins.ForEach(Console.WriteLine);


结果如下:


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


我们可以看到, 行 的多音字有 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;

        }

    }


结果:


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


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


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


源码分享


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



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


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


 

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


我爱CSharp学习网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#汉字转拼音(支持多音字)
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址