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

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

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

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

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

后来查找发现对于汉字转拼音,原来微软已经提供了 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> totalPingYins = new Dictionary>();

for (int i = 0; i < chs.Length; i++)

{

var pinyins = new List();

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();

foreach (var totalPingYin in result.TotalPingYin)

{

newTotalPingYins.AddRange(items.Select(item => totalPingYin + item));

}

newTotalPingYins = newTotalPingYins.Distinct().ToList();

result.TotalPingYin = newTotalPingYins;

//首字母循环匹配

var newFirstPingYins = new List();

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;

}

}

结果:

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

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

源码分享

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

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

以上就是C#汉字转拼音(支持多音字)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

c语言汉字转拼音,C#汉字转拼音(支持多音字)相关推荐

  1. JavaScript获取汉字拼音首字母(不支持多音字和火狐)

    <script> function getFirstPyLetter(){ var a=document.all.form1.str1.value; var b=""; ...

  2. 汉字转拼音 - 输入汉字获取其拼音

    转载自: http://www.cnblogs.com/LonelyShadow/p/3543798.html 前不久看到有的朋友实现对商品名称拼音的录入,发现他的实现方式是手动输入的,-_-#.同志 ...

  3. 通过拼音模糊搜索汉字的功能实现

    一.原由 前一段时间用php实现通讯录系统,需要用到拼音查找汉字功能,匹配通讯录的姓名字段,于是在网上搜索已有的开源代码,下面总结和分析一下思路和具体实现. 二.思路 查找了网上的多种解决方案,大致分 ...

  4. .net 汉字转拼音 - 输入汉字获取其拼音

    首先,去微软官网下载Microsoft Visual Studio International Pack语言包,下载地址分别如下: Microsoft Visual Studio Internatio ...

  5. 汉字拼音计算机,拼音_汉字计算机自动转换系统

    拼音_汉字计算机自动转换系统 夕 年一 月 计 算 机 学 报 第 ! 期 拼音汉 字计算机自动转换系统 凌潘 云杨长 生江大浙学计算机#系 . . % & ( )丫 ) +, ( . %(/ ...

  6. C语言 - 随机生成数字 和 汉字

    目录 0 写在前面 1 随机生成数字(整数 和 浮点数) 1.1 rand() 简析 本质 使用注意 rand()取值范围: 1.2 在 [ m, n ] 中随机取数(整 + 浮) 1.2.1 注意: ...

  7. mysql简拼_mysql实现汉字换拼音,及汉字转简拼

    我们实现汉字转拼音,需要结束代码包来完成,但是有个问题 ,针对多音字,会把排列组合的所有方式 全部打印出来. 比如 地区名,都是不需要多音字的,只有一个拼音发音是正确的. 下边 我们来实现 汉字转拼音 ...

  8. 拼音转汉字 和 字符编码测试

    获得汉字的unicode编码 #define   _UNICODE   #include   <tchar.h>   #include   <locale.h>   #incl ...

  9. 如何实现拼音与汉字的互相转换

    如何实现拼音与汉字的互相转换 发表于2个月前(2016-02-16 15:01)   阅读(58) | 评论(0) 6人收藏此文章, 我要收藏 赞0 4月23日,武汉源创会火热报名中,期待您的参与&g ...

  10. Java实现拼音转汉字

    搜索到的都是汉字转拼音的文章,拼音转汉字的却找不到. 听说有这类的接口,但是要付费.收费的,咱就不搞了,整个免费版的吧,自个儿用. 没打算做得多么智能,就希望写草稿时,能辅助一下.有那个意思意思,能看 ...

最新文章

  1. HDU4756(次小生成树)
  2. 孙立岩 python-basic: 用于学习python基础的课件(十三十四 十五)
  3. 前端技巧|Chrome上4款超级实用的插件!
  4. python游戏开发的五个案例分享
  5. 手势模型和Angular Material的实现
  6. 7种常见的数据分析基本思路,满足你职场95%的需求
  7. BZOJ1969 [AHIO2005]航线规划
  8. Python 打包的EXE文件反编译2|pyc文件自动反编译
  9. 进销存php 百度云盘,fb1334 PHP网络版进销存源码WEB进销存源码含说明
  10. 解决error: invalid operands of types ‘const char [6]‘ and ‘const char [6]‘ to binary ‘operator+‘
  11. 智商情商哪个重要_智商和情商哪个更重要 一辩辩词
  12. RabbitMQ报错 o.s.a.r.c.CachingConnectionFactory : Channel shutdown: channel error; protocol meth
  13. C#:文本文件读写操作 FileHelper
  14. ubuntu vscode use clang-format google style
  15. 前端做table下载excel功能
  16. TCP/IP详解(特详!)
  17. 基于微信小程序的加油服务系统毕业设计源码
  18. 萤石开放平台的二次开发——摄像头取流至微博直播平台
  19. 微信开发者工具C盘占用大的问题
  20. zend studio php 错误提示,如何解决Win7打开启动ZendStudio PHP时提示错误

热门文章

  1. 禁忌搜索算法求解 TSP 问题的代码示例
  2. 企业微信检测僵尸粉小工具,企业微信如何检测僵尸粉
  3. java:详解native方法
  4. PAT 乙级 1048 数字加密 (20 分)
  5. 初识STM32F407芯片
  6. 微信获取unionid
  7. 解决JSP中文乱码问题
  8. JSP中文乱码问题终极解决方案(下)
  9. Java:详解List集合的排序功能
  10. 如何使用HTML制作个人网站( web期末大作业)