Exemple #1
0
        /// <summary>
        /// 向有穷自动机输入单词
        /// </summary>
        /// <param name="word">单词</param>
        /// <param name="rank">单词的权重</param>
        public void InsertWordToDfa(String word, int rank, object tag)
        {
            if (word == null || word == "")
            {
                return;
            }

            if (rank != 0)
            {
                _UseRank = true;
            }

            if (_WordsTbl[word] != null)
            {
                return;
            }

            T_InnerInfo innerInfo = new T_InnerInfo();

            innerInfo.Rank  = rank;
            innerInfo.Tag   = tag;
            _WordsTbl[word] = innerInfo;

            int       pos;
            T_DfaUnit unit = GetLastMatchUnit(word, out pos, tag);

            bool needTrans = false;

            for (int i = pos; i < word.Length; i++)
            {
                if (!needTrans && word[i] == '\\')
                {
                    if (i == word.Length - 1)
                    {
                        //最后一个字符是转义符号
                        throw (new Exception("Last char is trans char!"));
                    }
                    //转义
                    needTrans = true;
                    continue;
                }

                if (i == word.Length - 1)
                {
                    unit = AddChar(unit, word[i], word, needTrans, tag);
                }
                else
                {
                    unit = AddChar(unit, word[i], null, needTrans, tag);
                }

                needTrans = false;
            }
        }
Exemple #2
0
        /// <summary>
        /// 获取单词对应的标签
        /// </summary>
        /// <param name="word"></param>
        /// <returns></returns>
        public object GetTag(String word)
        {
            T_InnerInfo innerInfo = (T_InnerInfo)_WordsTbl[word];

            if (innerInfo != null)
            {
                return(innerInfo.Tag);
            }
            else
            {
                return(null);
            }
        }
Exemple #3
0
        /// <summary>
        /// 获取单词对应的权重级别
        /// </summary>
        /// <param name="word">单词</param>
        /// <returns>级别,未找到单词,返回0</returns>
        public int GetRank(String word)
        {
            if (!_UseRank)
            {
                return(0);
            }

            T_InnerInfo innerInfo = (T_InnerInfo)_WordsTbl[word];

            if (innerInfo != null)
            {
                return(innerInfo.Rank);
            }
            else
            {
                return(0);
            }
        }