程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#漢字轉拼音(支持多音字)

C#漢字轉拼音(支持多音字)

編輯:C#入門知識

C#漢字轉拼音(支持多音字)。本站提示廣大學習愛好者:(C#漢字轉拼音(支持多音字))文章只能為提供參考,不一定能成為您想要的結果。以下是C#漢字轉拼音(支持多音字)正文


  之前由於項目需求,兩頭需求一個漢字轉拼音和首拼的功用來做查詢,覺得這種功用根本曾經成熟化了,於是查找了相關的代碼,首先引入視線的是上面兩篇文章

     1.C# 漢字轉拼音(支持GB2312字符集中一切漢字)

     2.【干貨】JS版漢字與拼音互轉終極方案,附復雜的JS拼音輸出法

  感激兩位博主,寫的比擬全也很詳細,都有提供源碼,大家可以參考下。

  由於思索到接口的需求,於是參考了 第一篇,文章中作者的源碼根本能滿足漢字轉拼音的需求,關於其他特殊的字符,也可以在停止添加補充,缺乏之處就是不支持多音字,由於需求支持多音字的查詢,所當前面有查了下其他的文章,發現還沒有現成的文章(也能夠自己的搜索程度比擬水)。後來查找發現關於漢字轉拼音,原來微軟曾經提供了 Microsoft Visual Studio International Pack ,而且很弱小。於是試了一下

首先在nuget援用對應的包

 查找 PinYinConverter

復雜的demo

小試一下,運用也十分復雜,只需直接運用ChineseChar類停止裝換就好

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

源碼分享

  分享是一種美德,有時分牛逼的文章可以進步我們的技術層面,但有時分更多的需求是業務層面,很多小知識使用的分享卻可以幫我們進步業務層面的問題。只需分享的知識點有用,不誤人子弟,哪怕大小都是一種學習,所以也希望大家能勇於分享。

  最後,源碼分享出來給大家,假如有錯誤和缺乏的中央,也希望指正

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved