Exemplo n.º 1
0
 /// <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);
     }
 }
Exemplo n.º 2
0
 /// <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;
 }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
 /// <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);
 }