14
2017
09

[转载].Net相对更加完美的汉字转拼音


微软PinYinConverter


微软PinYinConverter很强大,但在多音字面前,犯了传统的错误,按拼音字母排序。如【强】微软居然优先【jiang】而不是】【qiang】

所以不能优选 PinYinConverter。


Npinyin

开源项目:http://code.google.com/p/npinyin/

很人性,很不错的第三方库,在传统多音字前优先使用率较高的,但在生僻字面前有点无法转换。(GetInitials(strChinese)  有Bug  如【洺】无法识别,但GetPinyin可以正常转换。)


所以优先Npinyin  翻译失败的使用微软PinYinConverter。

Npinyin+微软PinYinConverter两种方式结合转换,能达到比较完美的转换效果。

当然,如果有多音字,那也会有些问题,因为就算是人也不一定知道到底是读哪个音,何况是程序呢?


    /*
     * 目前最完美的中文转拼音项目,开源项目:https://code.google.com/archive/p/npinyin/
    */
    class Program
    {
        static void Main(string[] args)
        {
            string[] maxims = new string[] { "事常与人违,事总在人为", "骏马是跑出来的,强兵是打出来的", "驾驭命运的舵是奋斗。不抱有一丝幻想,不放弃一点机会,不停止一日努力。 ", "如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭", "懦弱的人只会裹足不前,莽撞的人只能引为烧身,只有真正勇敢的人才能所向披靡" };
            Console.WriteLine("UTF8句子拼音:");
            foreach (string s in maxims)
            {
                Console.WriteLine("汉字:{0}\n拼音:{1}\n", s, Pinyin.GetPinyin(s));
            }
            //string[] medicines = new string[] {
            //                                    "聚维酮碘溶液",
            //                                    "开塞露",
            //                                    "炉甘石洗剂",
            //                                    "苯扎氯铵贴",
            //                                    "鱼石脂软膏",
            //                                    "莫匹罗星软膏",
            //                                    "红霉素软膏",
            //                                    "氢化可的松软膏",
            //                                    "曲安奈德软膏",
            //                                    "丁苯羟酸乳膏",
            //                                    "双氯芬酸二乙胺乳膏",
            //                                    "冻疮膏",
            //                                    "克霉唑软膏",
            //                                    "特比奈芬软膏",
            //                                    "酞丁安软膏",
            //                                    "咪康唑软膏、栓剂",
            //                                    "甲硝唑栓",
            //                                    "复方莪术油栓"
            //                                  };
            //Encoding gb2312 = Encoding.GetEncoding("GB2312");
            //Console.WriteLine("GB2312拼音简码:");
            //foreach (string m in medicines)
            //{
            //    string s = Pinyin.ConvertEncoding(m, Encoding.UTF8, gb2312);
            //    Console.WriteLine("药品:{0}\n简码:{1}\n", s, Pinyin.GetInitials(s, gb2312));
            //}
            var name = "虞晟旻";
            //Console.WriteLine("汉字:{0}\n拼音:{1}\n", name, Pinyin.GetPinyin(name));
            Console.WriteLine("汉字:{0}\n拼音:{1}\n", name, pinyinHelper.ConvertToAllSpell(name));
            Console.ReadKey();
        }
    }
    public class pinyinHelper
    {
        /// <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)).Append(" ");
                    }
                    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;
        }
    }




效果:


npinyin开源项目:



demo下载:NPinyinTest.zip


转载自:http://www.cnblogs.com/shikyoh/p/6270026.html



版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。