是否有任何图书馆将带有拼音标记的数字拼音转换为拼音?

| 只是想知道是否有人知道可以将汉语拼音转换为带有声调的类库的类库,例如nin2 hao3 ma到nínhǎoma。它将类似于此答案,但希望使用.NET框架。     
已邀请:
        这是我将@ Greg-Hewgill python算法移植到C#的过程。到目前为止,我还没有遇到任何问题。
public static string ConvertNumericalPinYinToAccented(string input)
    {
        Dictionary<int, string> PinyinToneMark = new Dictionary<int, string>
        {
            {0, \"aoeiuv\\u00fc\"},
            {1, \"\\u0101\\u014d\\u0113\\u012b\\u016b\\u01d6\\u01d6\"},
            {2, \"\\u00e1\\u00f3\\u00e9\\u00ed\\u00fa\\u01d8\\u01d8\"},
            {3, \"\\u01ce\\u01d2\\u011b\\u01d0\\u01d4\\u01da\\u01da\"},
            {4, \"\\u00e0\\u00f2\\u00e8\\u00ec\\u00f9\\u01dc\\u01dc\"}
        };

        string[] words = input.Split(\' \');
        string accented = \"\";
        string t = \"\";
        foreach (string pinyin in words)
        {
            foreach (char c in pinyin)
            {
                if (c >= \'a\' && c <= \'z\')
                {
                    t += c;
                }
                else if (c == \':\')
                {
                    if (t[t.Length - 1] == \'u\')
                    {
                        t = t.Substring(0, t.Length - 2) + \"\\u00fc\";
                    }
                }
                else
                {
                    if (c >= \'0\' && c <= \'5\')
                    {
                        int tone = (int)Char.GetNumericValue(c) % 5;

                        if (tone != 0)
                        {
                            Match match = Regex.Match(t, \"[aoeiuv\\u00fc]+\");
                            if (!match.Success)
                            {
                                t += c;
                            }
                            else if (match.Groups[0].Length == 1)
                            {
                                t = t.Substring(0, match.Groups[0].Index) +
                                    PinyinToneMark[tone][PinyinToneMark[0].IndexOf(match.Groups[0].Value[0])]
                                    + t.Substring(match.Groups[0].Index + match.Groups[0].Length);
                            }
                            else
                            {
                                if (t.Contains(\"a\"))
                                {
                                    t = t.Replace(\"a\", PinyinToneMark[tone][0].ToString());
                                }
                                else if (t.Contains(\"o\"))
                                {
                                    t = t.Replace(\"o\", PinyinToneMark[tone][1].ToString());
                                }
                                else if (t.Contains(\"e\"))
                                {
                                    t = t.Replace(\"e\", PinyinToneMark[tone][2].ToString());
                                }
                                else if (t.Contains(\"ui\"))
                                {
                                    t = t.Replace(\"i\", PinyinToneMark[tone][3].ToString());
                                }
                                else if (t.Contains(\"iu\"))
                                {
                                    t = t.Replace(\"u\", PinyinToneMark[tone][4].ToString());
                                }
                                else
                                {
                                    t += \"!\";
                                }
                            }
                        }
                    }
                    accented += t;
                    t = \"\";
                }
            }
            accented += t + \" \";
        }
        accented = accented.TrimEnd();
        return accented;
    }
    
        我已经使用了Microsoft Visual Studio International Pack。 这是1.0版本。和Feature Pack 2.0。 希望对你有帮助!     
        我认为这条线
t = t.Substring(0, t.Length - 2) + \"\\u00fc\";
应该是这个
t = t.Substring(0, t.Length - 1) + \"\\u00fc\";
    

要回复问题请先登录注册