阅读目录

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

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

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

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

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

回到顶部

首先在nuget引用对应的包

查找PinYinConverter

汉语拼音转韦氏拼音_汉语拼音转换器在线_汉语转拼音

回到顶部

简单的demo

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

string ch = Console.ReadLine();ChineseChar cc = new ChineseChar(ch[0]);var pinyins = cc.Pinyins.ToList();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。

回到顶部

———END———

限 时 特 惠: 本站每日持续更新海量各大最新【内部创业教程】,一年会员只需 98 元,全站资源免费下载 点击查看详情

站 长 微 信: webprojs_com

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注