/// <summary> /// 反查整串中文字的注音碼,並且利用預先指定的擴充詞庫來修正注音。 /// </summary> /// <param name="aChineseText">中文字串。</param> /// <returns>包含注音字根的字串陣列。每個元素代表輸入字串中對應位置的字元的注音字根,而且長度固定為 4。</returns> public string[] GetZhuyinWithPhraseTable(string aChineseText) { string[] zhuyinArray = GetZhuyin(aChineseText); // 利用擴充詞庫字根表修正 API 傳回的字根。 var phraseTbl = ZhuyinPhraseTable.GetInstance(); SortedList <int, ZhuyinPhrase> matchedPhrases = phraseTbl.FindPhrases(aChineseText); int srcIndex; ZhuyinPhrase phrase; // 由於可能會有多次置換字串的動作,因此必須由字串的尾部往前進行置換。 for (int i = matchedPhrases.Count - 1; i >= 0; i--) { srcIndex = matchedPhrases.Keys[i]; // 取得片語在輸入字串中的來源索引。 phrase = matchedPhrases.Values[i]; // 取得代表片語的物件。 //DebugOut("\r\nimmPhrase.Text=" + immPhrase.Text); foreach (Zhuyin zy in phrase.ZhuyinList) { zhuyinArray[srcIndex] = zy.ToString(true); // 儲存注音字根時,會以全型空白補足 4 碼。 srcIndex++; } } return(zhuyinArray); }
/// <summary> /// Singleton 建構方法。 /// </summary> /// <returns></returns> public static ZhuyinPhraseTable GetInstance() { if (_phraseTable == null) { _phraseTable = new ZhuyinPhraseTable(); } return(_phraseTable); }