/// <summary> /// 切割字母数字 /// </summary> /// <param name="ch"></param> private void flexNumberAlpha(char ch) { var name = ch.ToString(); /*************************** * 用于确定是否回跳 * 如果执行了 while 下面的语句 * 需要回跳一个字符 * *************************/ bool flag = false; while (_currentPos < _context.Length - 1) { flag = true; var b = next(); if (Regex_Helper.Is_AN(b.ToString())) { name += b; } /******************************** * website address, math expression * *************************************/ else if (Regex_Helper.Is_Mark(b.ToString())) { /********************** * if chinese mark ens prosses * *************************/ if (Regex_Helper.Is_Chinese_Mark(b.ToString())) { break; } name += b; } else { break; } } var w = new _WordInnfo() { Name = name, }; /********************** * 设置获得片段的词性 * 可能是数词,也可能是其他(数学表达式,网址等) * ************************/ SetAlphaNumberType(w); if (flag) { previous(); } w.Name = name; _susentence.Words.Add(w); }
/// <summary> /// 切分一些特殊字符 /// </summary> /// <returns></returns> private bool workSpecialChars() { /**************************************************** * 处理以字母(包括希腊字母)数字英文标点开始的字符片段 * e-mail, * addreess * mathexpression * and so on * *******************************************************/ if (Regex_Helper.Is_AN(_token.ToString()) || Regex_Helper.Is_Concrete_Number(_token.ToString()) || Regex_Helper.Is_English_Mark(_token.ToString())) { flexNumberAlpha(_token); return(true); } /********************************* * 处理未知字符开始的字符片段 * 其他语言的文字 (日文,韩文等) * *******************************/ if (!Regex_Helper.Is_ACN(_token.ToString()) && !Regex_Helper.Is_Mark(_token.ToString())) { flexUnknowChar(_token); return(true); } return(false); }