如何进行敏感词过滤?

lionkingxuemao 2010-12-12 10:47:46
我想问的不是敏感词过滤的算法,而是以什么方式来进行敏感词过滤。

我能想到的几种方式:
第一种,当用户通过前台页面添加信息(如发布评论,发布物品信息之类的),修改信息(如修改物品信息之类的)的时候,调用ajax,把所涉及到的信息传到到后台进行敏感词判断,如果是有敏感词,就禁止发表等等。 这种做法需要把前台所有涉及到增加和修改操作的地方都要加入敏感词判断代码,对每一个用户能输入信息的文本框都需要把里面的内容提取出来,传给后台,工作量有点大。

第二种,在后台执行涉及到add和update等业务逻辑的时候,对内容进行过滤。这样也涉及到很多代码,因为好多业务逻辑都可能会修改数据库,工作量也很大。

第三种,对数据库进行扫描,这种方式可能对性能消耗较大,而且扫描到有敏感内容时不好处理。另外实时性不强,可能会出问题。

这几种方式貌似都不太好,或者是我没想到这些方式下的好办法。另外我比较困惑的是如果发现敏感词,是直接禁止信息发布,还是说先让信息发布,然后把可疑信息存入其他数据库表,由后台工作人员进行专门的人工审核。感觉都很复杂。

我想知道目前主流的敏感词过滤解决方案是怎样的,谢谢。
...全文
3624 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzq114 2013-08-29
  • 打赏
  • 举报
回复
filter呀,即方便又快捷好用
烛红泪 2013-08-24
  • 打赏
  • 举报
回复
关键是要找出所有敏感词啊,但很多不知道是不是触发到敏感词了
jsut_yi 2011-02-18
  • 打赏
  • 举报
回复
过滤器是最好的。
pingjiuzhou 2011-02-18
  • 打赏
  • 举报
回复
还有更轻松的方式
jingjing05150516 2011-02-10
  • 打赏
  • 举报
回复
汉字不行嘛?
wing7742 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dyllove98 的回复:]
看下思路吧 其实没那么复杂

[/Quote]

属性文件....
多么让人向往和缅怀的东西啊
gch1526 2010-12-13
  • 打赏
  • 举报
回复
我想在JAVA中一般是优先考虑过滤器的使用吧!
zpjava 2010-12-13
  • 打赏
  • 举报
回复
以前在网上找到过一个,测试一下效率还行,过滤主要是效率的问题,以为敏感字符有几W

http://topic.csdn.net/u/20101029/11/d9c1db2b-a4bf-4803-bd66-2786121a181a.html
宁波朱超 2010-12-13
  • 打赏
  • 举报
回复
请看马士兵之设计模式责任链模式用的案例就是讲词的过滤。
Jlins 2010-12-12
  • 打赏
  • 举报
回复
看下思路吧 其实没那么复杂

以下是一个java实现这个功能的小例题:
两个个文件words.properties和KeyWordFilter.java;
1、words.properties文件是个文本文件;内容如下:
敏感词一
敏感词二
敏感词三

2、KeyWordFilter.java是个java文件内容如下:
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class KeyWordFilter
{
private static Pattern pattern = null;
// 从words.properties初始化正则表达式字符串
private static void initPattern()
{
StringBuffer patternBuf = new StringBuffer("");
try
{
InputStream in = KeyWordFilter.class.getClassLoader().getResourceAsStream("words.properties");
Properties pro = new Properties();
pro.load(in);
Enumeration enu = pro.propertyNames();
patternBuf.append("(");
while(enu.hasMoreElements())
{
patternBuf.append((String)enu.nextElement()+"|");
}
patternBuf.deleteCharAt(patternBuf.length()-1);
patternBuf.append(")");

//unix换成UTF-8
//pattern = Pattern.compile(new String(patternBuf.toString().getBytes("ISO-8859-1"), "UTF-8"));
//win下换成gb2312
pattern = Pattern.compile(new String(patternBuf.toString().getBytes("ISO-8859-1"), "gb2312"));
}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}
}
private static String doFilter(String str)
{
Matcher m = pattern.matcher(str);
str = m.replaceAll("");
return str;
}

public static void main(String[] args)
{
String str = "国敏感词一院学位办就敏感词三的报道表示敏感词二";
System.out.println("str:"+str);
initPattern();
Date d1 = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss:SSS Z");
System.out.println("start:"+formatter.format(d1));
System.out.println("共"+str.length()+"个字符,查到" + KeyWordFilter.doFilter(str));
Date d2 = new Date();
System.out.println("end:"+formatter.format(d2));
}

}
输出为:
__________________________________
str:国敏感词一院学位办就敏感词三的报道表示敏感词二
start:星期二, 24 三月 2009 14:50:17:171 +0800
共23个字符,查到国院学位办就的报道表示
end:星期二, 24 三月 2009 14:50:17:531 +0800
alexyao8 2010-12-12
  • 打赏
  • 举报
回复
使用filter 进行过滤

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧