/// <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; } }
/// <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); } }
/// <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); } }