敏感词过滤

用于对用户输入的内容进行过滤

public class SensitiveWordFilter {

	private Map sensitiveWordMap = null;
	public static int minMatchType = 1;//最小匹配规则
	public static int maxMatchType = 2;//最大匹配规则
	
	public SensitiveWordFilter(List<MgchglModel> sensitiveWord) {
		sensitiveWordMap = new SensitiveWordInit().initKeyWord(sensitiveWord);
	}
	/**
	 * 
	 * 说明:获取文字中的敏感词
	 * @param txt 文字
	 * @param matchType 匹配规则
	 * @return
	 */
	public Set<String> getSensitiveWord(String txt,int matchType){
		Set<String> sensitiveWordList = new HashSet<String>();
	    for(int i=0;i<txt.length();i++) {
	    	int length = checkSensitiveWord(txt,i,matchType);//判断是否包含敏感字符
    		if(length>0) {//存在,加入list中
    			sensitiveWordList.add(txt.substring(i, i+length));
    			i = i + length - 1;//减1的原因,是因为for会自增	
    		}
	    }
	    return sensitiveWordList;
	}
	
	@SuppressWarnings("rawtypes")
	public int checkSensitiveWord(String txt,int beginIndex,int matchType) {
		boolean flag = false;
		int matchFlag = 0;
		char word = 0;
		Map nowMap = sensitiveWordMap;
		for(int i = beginIndex;i<txt.length();i++) {
			word = txt.charAt(i);
			nowMap = (Map)nowMap.get(word);//获取指定key
			if(nowMap != null) {//存在,则判断是否为最后一个
				matchFlag++;//找到相应key,匹配标识+1
				if("1".equals(nowMap.get("isEnd"))) {//如果为最后一个匹配规则,结束循环,返回匹配标识数
					flag = true;//结束标识位为true
					if(SensitiveWordFilter.minMatchType == matchType) {//最小规则,直接返回,最大规则还需继续查找
						break;
					}
				}
			}else {//不存在,直接返回
				break;
			}
		}
		/*if(matchFlag<1 || flag) {//敏感词,长度大于1
			matchFlag = 0;
		}*/
		return matchFlag;
	}
	public static void main(String[] args) {
		List<MgchglModel> sensitiveWord = new ArrayList<MgchglModel>();
		MgchglModel  model = new MgchglModel();	
		model.setSensitiveWords("测试");
		MgchglModel  model2 = new MgchglModel();	
		model2.setSensitiveWords("红客联盟");
		sensitiveWord.add(model);
		sensitiveWord.add(model2);
		SensitiveWordFilter filter = new SensitiveWordFilter(sensitiveWord);
		System.out.println("敏感词的数量:" + filter.sensitiveWordMap.size());
		String string = "太多的伤感情怀也许只局限于饲养基地 荧幕中的情节,主人公尝试着去用某种方式渐渐的很潇洒地释怀那些自己经历的伤感。"
						+ "然后测试 我们的扮演的角色就是跟随着主人公的喜红客联盟 怒哀乐而过于牵强的把自己的情感也附加于银幕情节中,然后感动就流泪,"
						+ "难过就躺在某一个人的怀里尽情的阐述心扉或者手机卡复制器一个人一杯红酒一部电影在夜深人静的晚上,关上电话静静的发呆着。";
		System.out.println("待检测语句字数:" + string.length());
		long beginTime = System.currentTimeMillis();
		Set<String> set = filter.getSensitiveWord(string, 1);
		long endTime = System.currentTimeMillis();
		System.out.println("语句中包含敏感词的个数为:" + set.size() + "。包含:" + set);
		System.out.println("总共消耗时间为:" + (endTime - beginTime));
	}
}

结果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值