예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }