敏感词过滤是一个能够让用户发表评论的网站的一个很重要的功能(你懂的~)
下面开始全套流程:
1.需要有一套比较完整的词库,由于我的词库很少所以就不贴上来了,网上找找应该很多
2.设计一个可以将词库导入数据库的功能(以最最简单的界面为例,如下图:)
简单到都不好意思贴出来了。。。
3.词库文件的格式有很多
比如:
aaa|1
bbb|2
又或者
aaa={banned}
bbb={mod}
这里以第一种格式为例
管理员将词库文件的内容全部复制黏贴至文本款,点击导入
后台处理代码(由于我的词库只有aaa|1 没有表示都是禁用,没有审核词,所以需要进行审核词判断的要自己进行修改):
string msg = TextBox1.Text.Trim();
string[] words = msg.Split(new char[] {'\r', '\n'}, 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到前台并提示含有禁用词
在这个地方,可以将禁用词放入缓存中,以免每次都要请求数据库,造成资源浪费
这个例子仅仅是为了实现功能,对性能方面没有考虑
可以自己更改~