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

來源:互聯網
上載者:User
之前由於項目需要,中間需要一個漢字轉拼音和首拼的功能來做查詢,感覺這種功能基本已經成熟化了,於是尋找了相關的代碼,首先引入眼帘的是下面兩篇文章

C# 漢字轉拼音(支援GB2312字元集中所有漢字)(http://www.cnblogs.com/cxd4321/p/4203383.html)

【乾貨】JS版漢字與拼音互轉終極方案,附簡單的JS拼音IME(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<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;        }    }

結果:

目前試過一些生僻字都是能支援,對於一些太偏的還沒試過,不過對於一般漢字轉拼音的,多音字支援這裡就已經足夠了。


這裡僅僅是使用了 Microsoft Visual Studio International Pack 這個擴充包裡面的漢字轉拼音功能,其實裡面還有中文、日文、韓文、英語等各國語言套件,並提供方法實現互轉、獲、擷取字數、甚至擷取筆畫數等等強大的功能,有興趣的朋友可以自行查詢下它的api。


源碼分享


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

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

以上就是C#漢字轉拼音(支援多音字)的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.