C# 真正完美的 汉字转拼音

博主声明:本文章转载自 博客园 Shikyoh 的文章 看原文点我

网上有很多说自己整理的汉字转拼音是完美的,但使用后才发现都是半吊的瓶子,问题多多。

常见的生僻字,或多音字识别,转换后简直让人感觉可怕。

主流的转换有三种: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, "转换错误");}}

本文章转载自 博客园 Shikyoh 的文章 看原文点我

C# 真正完美的 汉字转拼音相关推荐

  1. thinkphp5整合系列之汉字转拼音完美支持多音字

    thinkphp5整合系列之汉字转拼音完美支持多音字 1.进入thinkphp5项目的根目录,用composer 安装扩展 2.接下来需要做的事就是在控制器中引入 /vendor/overtrue/p ...

  2. Excel中汉字转拼音的完美方案

    实现汉字转拼音的常见方案一般是通过ASCII编码表进行对照,或者通过字典库查询,这两个方案的优点是简单,不需要依赖外部程序,但缺点也很明显:无法识别多音字,且需要庞大的数据文件支撑,并不完美. 而利用 ...

  3. Android汉字转拼音的完美解决方案

    前面的话:做一件事情前一定要先对比多种解决方案在开始写代码,如果一开始就知道某种方法的不合理,就不会浪费那么多时间在解决之前的错误上啦.这篇文章就是因为一开始没有认识到这个问题,付出的代价.以此为戒! ...

  4. C#汉字转拼音(npinyin)将中文转换成拼音全文或首字母

    汉字转拼音貌似一直是C#开发的一个难题,无论什么方案都有一定的bug,之前使用了两种方案. 1.Chinese2Spell.cs 一些不能识别的汉字全部转为Z 2.Microsoft Visual S ...

  5. C#汉字转拼音(npinyin)

    转自:http://www.cnblogs.com/soundcode/p/6247531.html 汉字转拼音貌似一直是C#开发的一个难题,无论什么方案都有一定的bug,之前使用了两种方案. 1.C ...

  6. C#实现汉字转拼音(包括生僻字)

    项目里面有一个功能是将用户的名字转变成拼音全拼,但是在使用过程中,有很多人的名字是生僻字,程序根本找不到那个字的拼音,后来看代码才发现,转拼音这个类居然是将一个个的汉字列举的: 且不说这样列举会增加多 ...

  7. 汉字转换拼音首字母(可以处理部分多音字)

    一.前言 汉字转拼音貌似一直是C#开发的一个难题,无论什么方案都有一定的bug,之前使用了两种方案. 1.Chinese2Spell.cs 一些不能识别的汉字全部转为Z 2.Microsoft Vis ...

  8. 大创项目学习日志(二)——汉字转拼音软件的选择与尝试

    我希望,至少我们的孙儿孙女这一代能够两条腿走路,既能用汉字写,也能用拼音字母写,听报告作笔记,用拼音字母写,会比汉字写得快.如果可能,还能用上拼音字母的打字机.这样该是多么幸福呢!我并不幻想,在不远的 ...

  9. python正则匹配-匹配汉字,拼音,标点符号

    最近做需求需要把一段带有拼音的段落分割成汉字,拼音,标点符号.正则匹配的表达式修正了很多次,才完美的匹配出所有的内容. 完整的表达式: r'[\u4e00-\u9fa5]|[Aa-zZāáǎàōóǒò ...

  10. Java pinyin4j 汉字转拼音包括——多音字

    Java汉字转拼音(包括多音字) 有个需求需要把汉字转拼音,我的小伙伴推荐用Unicode官方的包:下载有些慢. 实际中用了Java工具包:pinyin4j解决 可以转汉字,多音字,多音字的地方要求不 ...

最新文章

  1. mysql 5.7 1054_MySQL5.7更改密码时出现ERROR 1054 (42S22)的解决方法
  2. 文件夹目录结构导出工具及下载
  3. C语言回调函数demo(帮助理解)以海康isapiExternDemo回调函数为例
  4. matlab主成分分析散点图_matlab、R软件等做主成分分析结果不同?为什么?
  5. PAT L1-048 矩阵A乘以B
  6. 在openGauss上做开发?这个大赛拿出30万寻找开源的你
  7. 10.28T5 tarjan+dfs
  8. 离散卷积与自相关----------信号处理系列[原创]
  9. 开发问题及解决 java.lang.ClassCastException:android.widget.LinearLayout$LayoutParams
  10. linux系统工程师的前途在哪里
  11. 华为认证的好处是什么?考试费是多少?
  12. matlab仿真高斯脉冲,高斯脉冲comsol仿真
  13. spss的独立样本T检验
  14. 低功耗服务器cpu性能排行,电脑CPU天梯图性能排行榜 CPU性能天梯图2018年6月最新版...
  15. 火狐插件Adblock Plus自定义功能屏蔽网易博客广告
  16. 【组队学习】【37期】组队学习内容详情
  17. vscode连接服务器
  18. 实现图片验证码与手机短信验证码
  19. 学习MySQL这一篇就够了
  20. 自制java虚拟机_《深入理解Android:Java虚拟机ART》 —1.2.3 准备模拟器和自制系统镜像...

热门文章

  1. 锐道发布Dorado Dorado7标准件 -1.0.24 beta版
  2. BLE_BQB Test_Carrier frequency offset and drift, LE Coded (S=8)_RF-PHY/TRM/BV-14-C
  3. 提高免疫力吃什么 多吃奶制品
  4. 服务器出现502错误,怎么办。
  5. 相关性评估:皮尔逊相关系数,R2
  6. h桥控制电机刹车_基于H桥控制直流电机驱动电路设计
  7. mysql c盘满了 怎么办_C盘太满清理技巧
  8. 服务器ssd内存性能对比,固态硬盘性能排行榜,买之前记得看一看
  9. 快速由PCI迁移到PCIe
  10. JAVA求解一元二次方程