/// <summary> /// 添加敏感词对象 /// </summary> /// <param name="sensitiveNode"></param> public void Add(char key, SensitiveNode sensitiveNode) { if (sensitiveNode == null || childSensitiveNodeDic.ContainsKey(sensitiveNode.Key)) { return; } childSensitiveNodeDic.Add(sensitiveNode.key, sensitiveNode); }
/// <summary> /// 检测是否含有敏感词 /// </summary> /// <param name="txt"></param> /// <param name="beginIndex"></param> /// <param name="matchType"></param> /// <returns></returns> public int CheckSensitiveWord(string txt, int beginIndex, MatchType matchType) { bool flag = false; if (string.IsNullOrEmpty(txt)) { return(0); } if (!SensitiveReady) { InitSensitive(); } char charKey; char sensitiveChar; int matchFlag = 0; SensitiveNode node = null; SensitiveNode temp = null; for (int i = beginIndex; i < txt.Length; i++) { charKey = txt.ElementAt(i); if (char.IsWhiteSpace(charKey)) { matchFlag++; continue; } if (TryGetSensitiveChar(charKey, out sensitiveChar)) { charKey = sensitiveChar; } if (i == beginIndex) { if (!sensitiveWordDic.TryGetValue(charKey, out node)) { break; } } else if (null != node && node.TryGetValue(charKey, out temp)) { node = temp; } else { break; } matchFlag++; if (node.IsEnd) { flag = true; if (matchType == MatchType.Min) { break; } } } if (!flag) { matchFlag = 0; } return(matchFlag); }
/// <summary> /// 添加敏感词到Hashtable /// </summary> /// <param name="sensitiveWordList">敏感词列表</param> public void AddSensitiveWord(List <string> sensitiveWordList) { if (sensitiveWordList == null || sensitiveWordList.Count == 0) { return; } sensitiveWordDic.Clear(); //当前节点 SensitiveNode curSensitiveNode = null; //零时节点 SensitiveNode tempSensitiveNode = null; string sensitiveWord = ""; char charKey; char sensitiveChar; for (int i = 0; i < sensitiveWordList.Count; i++) { sensitiveWord = sensitiveWordList[i]; if (string.IsNullOrEmpty(sensitiveWord)) { continue; } for (int j = 0; j < sensitiveWord.Length; j++) { charKey = sensitiveWord.ElementAt(j); if (char.IsWhiteSpace(charKey)) { continue; } //如果当前 查找的字符为字母,则对大小写进行合并 if (TryGetSensitiveChar(charKey, out sensitiveChar)) { charKey = sensitiveChar; } if (j == 0) { if (!sensitiveWordDic.TryGetValue(charKey, out curSensitiveNode)) { curSensitiveNode = new SensitiveNode(); curSensitiveNode.Key = charKey; sensitiveWordDic.Add(charKey, curSensitiveNode); } } else { if (!curSensitiveNode.TryGetValue(charKey, out tempSensitiveNode)) { tempSensitiveNode = new SensitiveNode(); tempSensitiveNode.Key = charKey; curSensitiveNode.Add(charKey, tempSensitiveNode); curSensitiveNode = tempSensitiveNode; } else { curSensitiveNode = tempSensitiveNode; } } if (j == sensitiveWord.Length - 1) { curSensitiveNode.IsEnd = true; } } } }
/// <summary> /// 尝试获取ey 的SensitiveObject /// </summary> /// <param name="key"></param> /// <param name="obj"></param> /// <returns></returns> public bool TryGetValue(char key, out SensitiveNode node) { return(childSensitiveNodeDic.TryGetValue(key, out node)); }