C# 真正完美的 汉字转拼音
更新时间:2020年5月27日 14:02 点击:1756
网上有很多说自己整理的汉字转拼音是完美的,但使用后才发现都是半吊的瓶子,问题多多。
常见的生僻字,或多音字识别,转换后简直让人感觉可怕。
主流的转换有三种:hash匹配,Npinyin,微软PinYinConverter。
但单用这三个,都没法做到完美,为什么没人考虑融合呢?
我的方案:Npinyin+微软PinYinConverter(首选Npinyin)
微软PinYinConverter
为什么:微软PinYinConverter很强大,但在多音字面前,犯了传统的错误,按拼音字母排序。如【强】微软居然优先【jiang】而不是】【qiang】
所以不能优选 PinYinConverter。
Npinyin
很人性,很不错的第三方库,在传统多音字前优先使用率较高的,但在生僻字面前有点无法转换。(GetInitials(strChinese) 有Bug 如【洺】无法识别,但GetPinyin可以正常转换。)
总结:优先Npinyin 翻译失败的使用微软PinYinConverter。目测完美。
上代码:
public class PingYinHelper {private static Encoding gb2312 = Encoding.GetEncoding("GB2312");/// <summary>/// 汉字转全拼/// </summary>/// <param name="strChinese"></param>/// <returns></returns>public static string ConvertToAllSpell(string strChinese) {try{if (strChinese.Length != 0) { StringBuilder fullSpell = new StringBuilder();for (int i = 0; i < strChinese.Length; i++) {var chr = strChinese[i]; fullSpell.Append(GetSpell(chr)); }return fullSpell.ToString().ToUpper(); } }catch (Exception e) { Console.WriteLine("全拼转化出错!" + e.Message); }return string.Empty; }/// <summary>/// 汉字转首字母/// </summary>/// <param name="strChinese"></param>/// <returns></returns>public static string GetFirstSpell(string strChinese) {//NPinyin.Pinyin.GetInitials(strChinese) 有Bug 洺无法识别//return NPinyin.Pinyin.GetInitials(strChinese);try{if (strChinese.Length != 0) { StringBuilder fullSpell = new StringBuilder();for (int i = 0; i < strChinese.Length; i++) {var chr = strChinese[i]; fullSpell.Append(GetSpell(chr)[0]); }return fullSpell.ToString().ToUpper(); } }catch (Exception e) { Console.WriteLine("首字母转化出错!" + e.Message); }return string.Empty; }private static string GetSpell(char chr) {var coverchr = NPinyin.Pinyin.GetPinyin(chr);bool isChineses = ChineseChar.IsValidChar(coverchr[0]);if (isChineses) { ChineseChar chineseChar = new ChineseChar(coverchr[0]);foreach (string value in chineseChar.Pinyins) {if (!string.IsNullOrEmpty(value)) {return value.Remove(value.Length - 1, 1); } } }return coverchr; } }
抽了几个常见错字和姓名
测试如下:
[TestMethod]public void PingyinTest() { Dictionary<string, Tuple<string, string>> dict = newDictionary<string, Tuple<string, string>>() { {"梅钰", new Tuple<string,string>( "meiyu","MY")}, {"张洺", new Tuple<string,string>( "zhangming","ZM")}, {"王玥", new Tuple<string,string>( "wangyue","WY")}, {"王思琪", new Tuple<string,string>( "wangsiqi","WSQ")}, {"董云强", new Tuple<string,string>( "dongyunqiang","DYQ")}, {"宋红培", new Tuple<string,string>( "songhongpei","SHP")}, {"石磊", new Tuple<string,string>( "shilei","SL")}, };foreach (var keyval in dict) {var name = keyval.Key;var spell1 = keyval.Value.Item1;var spell2 = keyval.Value.Item2;var val = ChineseSpell.ConvertToAllSpell(name).TrimAll(); val = FlexLogicFramework.Library.CommonLib.PingYinHelper.ConvertToAllSpell(name) .TrimAll().ToLower(); Assert.IsTrue(val == spell1, "转换错误"); val = FlexLogicFramework.Library.CommonLib.ChineseSpell.GetFirstSpell(name).TrimAll(); val = FlexLogicFramework.Library.CommonLib.PingYinHelper.GetFirstSpell(name).TrimAll(); Assert.IsTrue(val == spell2, "转换错误"); } }
相关文章
- 这篇文章介绍了C# 汉字转拼音(全拼和首字母)实例代码,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了C#实现汉字转拼音或转拼音首字母的方法,涉及C#操作数组、遍历及正则匹配的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本篇文章主要介绍了C# 汉字转拼音实例(支持GB2312字符集中所有汉字) ,非常具有实用价值,需要的朋友可以参考下。...2020-06-25
- -- ============================================= -- Create scalar function (NWGetPYFirst) -- ============================================= IF EXISTS (SELE...2016-11-25
- C# 汉字转化拼音的简单实例代码,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了C#获取汉字字符串拼音首字母的方法,实例分析了C#操作汉字及字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- <?php /** 拼音码表的生成: 启动输入法生成器在逆转换选项卡中装入window的拼音输入法并将其保存为文 本文件(winpy.txt)备用。 下面的代码将拼音码表文件(文本)装入到...2016-11-25
汉字转拼音缩写示例代码(Silverlight和.NET 将汉字转换成为拼音)
本篇文章主要介绍了汉字转拼音缩写示例代码(Silverlight和.NET 将汉字转换成为拼音) 需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25- 这篇文章主要为大家详细介绍了ASP.NET Core使用微软官方类库实现汉字转拼音,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 本文主要介绍了中文转拼音without CJK,文章篇尾附上源码下载。具有一定的参考价值,下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇MySQL按照汉字的拼音排序简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-01-22
- 本文分享了一个函数,这个函数可以根据汉字的字符串获取其拼音的首字母,以便我们在实际开发中使用。...2021-09-22
- 这篇文章主要介绍了PHP汉字转换拼音的函数代码,php将汉字转换成拼音,感兴趣的小伙伴们可以参考一下...2016-01-02
- 将汉字转化为拼音是程序员们经常用到的操作任务之一,大家还经常见到ios 将汉字转化为拼音、excel汉字转化成拼音、excel汉字转化为拼音等,本文通过一段代码实例给大家介绍基于PHP如何把汉字转化为拼音,感兴趣的朋友一起学习吧...2015-12-14
- 几年前就在网上看到过汉字转拼音的程序,大都就是按汉字的编码转换,单字对应的算法实现的。但是都有一个共同的缺点,不能支持多音字。本篇文章主要介绍了C#汉字转拼音实例(支持多音字),有兴趣的可以了解一下。...2020-06-25
- 这篇文章主要介绍了php实现数组按拼音顺序排序的方法,涉及php汉字与拼音的转换及数组遍历、排序相关操作技巧,需要的朋友可以参考下...2017-05-08
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
这篇文章主要介绍了PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法,结合实例形式分析了ICU扩展intl的实现方法与拼音转换、排序等相关操作技巧,需要的朋友可以参考下...2017-05-08- 这篇文章主要介绍了ASP.NET汉字转拼音 - 输入汉字获取其拼音的具体实现,需要的朋友可以参考下...2021-09-22
- <?php $d=array( array("a",-20319), array("ai",-20317), array("an",-20304), array("ang",-20295), array("ao",-20292), array("ba",-20283), array("bai...2016-11-25
- <?php $d=array( array("a",-20319), array("ai",-20317), array("an",-20304), array("ang",-20295), array("ao",-20292), array("ba",-20283), array("...2016-11-25