asp.net敏感词过滤

敏感词过滤是一个能够让用户发表评论的网站的一个很重要的功能(你懂的~)

下面开始全套流程:

1.需要有一套比较完整的词库,由于我的词库很少所以就不贴上来了,网上找找应该很多

2.设计一个可以将词库导入数据库的功能(以最最简单的界面为例,如下图:)

简单到都不好意思贴出来了。。。


3.词库文件的格式有很多

比如:

aaa|1

bbb|2

又或者

aaa={banned}

bbb={mod}

这里以第一种格式为例

管理员将词库文件的内容全部复制黏贴至文本款,点击导入

后台处理代码(由于我的词库只有aaa|1  没有表示都是禁用,没有审核词,所以需要进行审核词判断的要自己进行修改):

 string msg = TextBox1.Text.Trim();
            string[] words = msg.Split(new char[] {'
', '
'}, StringSplitOptions.RemoveEmptyEntries);
            foreach (var word in words)
            {
                string[] w = word.Split('|');
                T_Words ww = new T_Words();
                ww.Word = w[0];
                wordsBll.Add(ww);
            }
            TextBox1.Text = "";
4.在前台用户点击发表的时候起一个ajax请求到后台进行判断

后台代码:

foreach (var wordse in wordList)
                    {
                        string s = wordse.Word;
                        list.Add(s);
                    }
                    string wStrings = string.Join("|", list.ToArray());
                    if (Regex.IsMatch(msg, wStrings) || Regex.IsMatch(title, wStrings))
                    {
                        Response.Write("isBanned");
                        Response.End();
                    }

取出数据库词库表中的所有值存放在wordList实体集合中

遍历集合把每个词都用“|”分割加入wString中以正则表达式对用户发表的内容进行匹配

如果匹配到用户发表的内容有任何一个词是禁用的

那么发送isBanned到前台并提示含有禁用词

在这个地方,可以将禁用词放入缓存中,以免每次都要请求数据库,造成资源浪费

这个例子仅仅是为了实现功能,对性能方面没有考虑

可以自己更改~

原文地址:https://www.cnblogs.com/jchubby/p/4429748.html