Exemple #1
0
 /// <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);
 }
Exemple #2
0
    /// <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);
    }
Exemple #3
0
    /// <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;
                }
            }
        }
    }
Exemple #4
0
 /// <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));
 }