java敏感词过滤

敏感词过滤在网站开发必不可少。一般用DFA,这种比较好的算法实现的.

参考链接:http://cmsblogs.com/?p=1031

一个比较好的代码实现:

  

  1 import java.io.IOException;
  2 import java.util.ArrayList;
  3 import java.util.HashMap;
  4 import java.util.List;
  5
  6 /**
  7  * @title KeywordFilter
  8  * @description TODO
  9  * @author
 10  * @date 2014-4-17
 11  * @version 1.0
 12  */
 13 public class KeywordFilter {
 14     /** 敏感词集合
 15      * {法={isEnd=0, 轮={isEnd=1}}, 中={isEnd=0, 国={isEnd=0, 人={isEnd=1}, 男={isEnd=0, 人={isEnd=1}}}}}
 16      * */
 17     private HashMap keysMap = new HashMap();
 18
 19     /**
 20      * 添加敏感词
 21      * @param keywords
 22      */
 23     public void addKeywords(List<String> keywords) {
 24         for (int i = 0; i < keywords.size(); i++) {
 25             String key = keywords.get(i).trim();
 26             HashMap nowhash = keysMap;//初始从最外层遍历
 27             for (int j = 0; j < key.length(); j++) {
 28                 char word = key.charAt(j);
 29                 Object wordMap = nowhash.get(word);
 30                 if (wordMap != null) {
 31                     nowhash = (HashMap) wordMap;
 32                 } else {
 33                     HashMap<String, String> newWordHash = new HashMap<String, String>();
 34                     newWordHash.put("isEnd", "0");
 35                     nowhash.put(word, newWordHash);
 36                     nowhash = newWordHash;
 37                 }
 38                 if (j == key.length() - 1) {
 39                     nowhash.put("isEnd", "1");
 40                 }
 41             }
 42         }
 43     }
 44
 45     /**
 46      * 检查一个字符串从begin位置起开始是否有keyword符合,
 47      * 如果没有,则返回0
 48      * 如果有符合的keyword值,继续遍历,直至遇到isEnd = 1,返回匹配的keyword的长度,
 49      */
 50     private int checkKeyWords(String txt, int begin) {
 51         HashMap nowhash = keysMap;
 52         int res = 0;
 53         for (int i = begin; i < txt.length(); i++) {
 54             char word = txt.charAt(i);
 55             Object wordMap = nowhash.get(word);//得到该字符对应的HashMap
 56             if (wordMap == null) {
 57                 return 0;//如果该字符没有对应的HashMap,return 0
 58             }
 59
 60             res++;//如果该字符对应的HashMap不为null,说明匹配到了一个字符,+1
 61             nowhash = (HashMap) wordMap;//将遍历的HashMap指向该字符对应的HashMap
 62             if (((String) nowhash.get("isEnd")).equals("1")) {//如果该字符为敏感词的结束字符,直接返回
 63                 return res;
 64             } else {
 65                 continue;
 66             }
 67         }
 68         return res;
 69     }
 70
 71     /**
 72      * 判断txt中是否有关键字
 73      */
 74     public boolean isContentKeyWords(String txt) {
 75         for (int i = 0; i < txt.length(); i++) {
 76             int len = checkKeyWords(txt, i);
 77             if (len > 0) {
 78                 return true;
 79             }
 80         }
 81         return false;
 82     }
 83
 84     /**
 85      * 返回txt中关键字的列表
 86      */
 87     public List<String> getTxtKeyWords(String txt) {
 88         List<String> list = new ArrayList<String>();
 89         int l = txt.length();
 90         for (int i = 0; i < l;) {
 91             int len = checkKeyWords(txt, i);
 92             if (len > 0) {
 93                 String tt = txt.substring(i, i + len);
 94                 list.add(tt);
 95                 i += len;
 96             } else {
 97                 i++;
 98             }
 99         }
100         return list;
101     }
102
103     /**
104      * 初始化敏感词列表
105      * */
106     public void initfiltercode() {
107         List<String> keywords = new ArrayList<String>();
108         keywords.add("中国人");
109         keywords.add("中国男人");
110         keywords.add("法轮");
111         this.addKeywords(keywords);
112     }
113
114     public static void main(String[] args) throws IOException {
115         KeywordFilter filter = new KeywordFilter();
116         filter.initfiltercode();
117         String txt = "哈哈,反倒是 法轮热舞功,中国人,";
118         boolean boo = filter.isContentKeyWords(txt);
119         System.out.println(boo);
120         List<String> set = filter.getTxtKeyWords(txt);
121         System.out.println("包含的敏感词如下:" + set);
122     }
123
124
125
126
127 }
时间: 2024-10-08 21:23:37

java敏感词过滤的相关文章

Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类   =========================== ?Copyright 蕃薯耀 2017年9月25日 http://www.cnblogs.com/fanshuyao/ 一.问题描述 很多对外网站的某些内容都需要过滤敏感词,避免政治与色@情上的问题. 二.解决方案 使用词库进行匹配过滤成 * (星号) Java 敏感词工具类及敏感词词库见附件. 1.下载后,有几个类,主要为WordFilter 这个工具类,使用方法如下

JavaWeb-过滤器Filter学习(四)敏感词过滤实例

通过Filter来实现留言板的敏感词过滤- 思路很简单,我们这里的敏感词是直接先放进去的,实际项目中,肯定是存在数据库中.在Filter 过滤器中,我们先拿到用户提交的留言,如果出现了敏感词,我们就用*号来替换. 代码演示: index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="htt

转:Java实现敏感词过滤

敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来一看,整个过程如下:读取敏感词库.如果HashSet集合中,获取页面上传文字,然后进行匹配.我就想这个过程肯定是非常慢的.对于他这个没有接触的人来说我想也只能想到这个,更高级点就是正则表达式.但是非常遗憾,这两种方法都是不可行的.当然,在我意识里没有我也没有认知到那个算法可以解决问题,但是Googl

Java实现敏感词过滤

敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来一看,整个过程如下:读取敏感词库.如果HashSet集合中,获取页面上传文字,然后进行匹配.我就想这个过程肯定是非常慢的.对于他这个没有接触的人来说我想也只能想到这个,更高级点就是正则表达式.但是非常遗憾,这两种方法都是不可行的.当然,在我意识里没有我也没有认知到那个算法可以解决问题,但是Googl

Java实现敏感词过滤(转)

敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来一看,整个过程如下:读取敏感词库.如果HashSet集合中,获取页面上传文字,然后进行匹配.我就想这个过程肯定是非常慢的.对于他这个没有接触的人来说我想也只能想到这个,更高级点就是正则表达式.但是非常遗憾,这两种方法都是不可行的.当然,在我意识里没有我也没有认知到那个算法可以解决问题,但是Googl

java实现敏感词过滤(DFA算法)

小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 在写之前,小Alan给大家推荐一篇来自http://cmsblogs.com/?p=1031的博文,也会参考部分内容来描述博文. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxoo相关的文字时)时要能检测出来,很多项目中都会有一个敏感词管理模块,在敏感词管理模块中你可以加入敏感词,然后根据加入的敏感词去过滤输入内容中的敏感词并进行相应的处理,要么

敏感词过滤

敏感词过滤是很多网站.论坛常用的功能,一下为相关文章: 1.关于java中敏感词检测的一些总结 2.Java 利用DFA算法 屏蔽敏感词 3.Java实现敏感词过滤--DFA算法

Jsp敏感词过滤

Jsp敏感词过滤 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本网站的特殊敏感词. 比如,当你发贴的时候带有某些事先设定的词时,这个贴是不能发出的.或者这个词被自动替换为星号(*)或叉号(X)等,或者说是被和谐掉了. 在我看来敏感词过滤最重要的是在写过滤词汇的算法,如何过滤出大批量的敏感词,我感觉DFA的思想不错 DFA简介 在实现文字

敏感词过滤的算法原理之DFA算法

参考文档 http://blog.csdn.net/chenssy/article/details/26961957 敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来一看,整个过程如下:读取敏感词库.如果HashSet集合中,获取页面上传文字,然后进行匹配.我就想这个过程肯定是非常慢的.对于他这个没有接触的人来说我想也只能想到这个,更高级点就是正