/// <summary> /// 送り仮名を削除します。 /// </summary> /// <param name="name">名前。</param> /// <param name="isTrimAllHiragana">ひらがなを全て消すかどうか。消さない場合は末尾のひらがなを消す</param> /// <returns>送り仮名を削除した名前。</returns> public static string TrimOkurigana(string name, bool isTrimAllHiragana) { if (name == "") { return(""); } if (isTrimAllHiragana == true) { return(TrimOkurigana(name)); } else { // 1文字目がひらがななら省略を諦める if (NakoUtility.IsHiragana(name [0])) { return(name); } string result = ""; // 送りがなを省略する bool trimFlag = false; foreach (char c in name) { if (!NakoUtility.IsHiragana(c)) { result += c; trimFlag = false; } else if (trimFlag == false) { result += c; } } return(result); } }
/// <summary> /// 送り仮名を削除します。 /// </summary> /// <param name="name">名前。</param> /// <returns>送り仮名を削除した名前。</returns> public static string TrimOkurigana(string name) { if (name == "") return ""; // 1文字目がひらがななら省略を諦める if (NakoUtility.IsHiragana(name[0])) { return name; } string result = ""; // 送りがなを省略する foreach (char c in name) { if (!NakoUtility.IsHiragana(c)) { result += c; } } return result; }
/// <summary> /// 現在の位置から単語のトークンを 1 つ取得します。 /// </summary> /// <returns>取得した単語のトークン。</returns> /// <remarks> /// このメソッドは取得したトークンの文字数だけ位置を進めます。 /// </remarks> private NakoToken GetWordToken() { var token = new NakoToken(NakoTokenType.WORD, lineNo, indentLevel); var builder = new StringBuilder(); while (!IsEOF) { char c = CurrentChar; if (NakoUtility.IsAlpha(c) || NakoUtility.IsNumber(c) || c == '_' || c == '!' || c == '?') { builder.Append(c); position++; continue; } // 助詞なら区切る if (NakoUtility.IsHiragana(c)) { if (CheckJosi(token)) { break; } } // 全角文字なら読む if (c >= 0xFF) { builder.Append(c); position++; // 特別な予約語なら区切る if (builder.ToString() == "もし" || builder.ToString() == "ならば") { break; } continue; } break; } token.Value = builder.ToString(); return(token); }
/// <summary> /// 現在の位置から助詞が存在するかどうかを調査します。もし助詞が存在する場合は、指定したトークンに助詞を設定します。 /// </summary> /// <param name="token">助詞を設定するトークン。</param> /// <returns>助詞が存在する場合は true。それ以外の場合は false。</returns> /// <remarks> /// このメソッドは、助詞が存在する場合、助詞の文字数だけ位置を進めます。 /// </remarks> private bool CheckJosi(NakoToken token) { if (IsEOF) { return(false); } // 助詞はひらがななので if (!NakoUtility.IsHiragana(CurrentChar)) { return(false); } // 助詞を 1 つずつ調べる foreach (string josi in NakoJosi.Instance) { if (this.Equals(josi)) { token.Josi = josi; position += josi.Length; return(true); } } return(false); }