过滤敏感字的算法
程序员文章站
2022-07-12 19:10:31
...
package testFilter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 算法思路:把敏感词的第一个字符取出来,作为比较对象。 遍历整个字符串,如果发现字符跟敏感词第一个字符相同,
* 就从字符串取出跟关键词相同长度的子串比较,如果相同就替换
*
* 本算法比较适合敏感词都不长的场合
*
* @author Administrator
*
*/
public class WordFilter {
private static Map<Character, List<String>> wordListToMap(
List<String> sensitiveWordList) {
Map<Character, List<String>> result = new HashMap<Character, List<String>>();
for (String s : sensitiveWordList) {
char c = s.charAt(0);
List<String> strs = result.get(c);
if (strs == null) {
strs = new ArrayList<String>();
result.put(c, strs);
}
strs.add(s);
}
return result;
}
public static String filter(String src, List<String> sensitiveWordList) {
Map<Character, List<String>> wordMap = wordListToMap(sensitiveWordList);
StringBuilder strb = new StringBuilder();
for (int i = 0; i < src.length(); i++) {
char c = src.charAt(i);
String find = null;
if (wordMap.containsKey(c)) {
List<String> words = wordMap.get(c);
for (String s : words) {
String temp = src.substring(i,
(s.length() <= (src.length() - i)) ? i + s.length()
: i);
if (s.equals(temp)) {
find = s;
break;
}
}
}
if (find != null) {
strb.append("***");
i += (find.length() - 1);
} else {
strb.append(c);
}
}
return strb.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
List<String> wordList = new ArrayList<String>();
wordList.add("sensitive");
wordList.add("敏感词");
System.out.println(filter("这是一个简单sensitive的filter实例", wordList));
System.out.println(filter("sensitivesensiti这是一个sensitive敏感词简单的filter实例敏感词", wordList));
System.out.println(filter("这是一个sensitive简单的filter实例敏感词", wordList));
System.out.println(filter("敏感词这是一个sensitive简单的filter实例sensitive敏感词", wordList));
System.out.println(filter("敏感词这是一个敏感简单的filter实例sensitive敏感词", wordList));
wordList.add("敏感");
System.out.println(filter("敏感词这是一个敏感简单的filter实例sensitive敏感词", wordList));
}
}
输出:
这是一个简单***的filter实例
***sensiti这是一个******简单的filter实例***
这是一个***简单的filter实例***
***这是一个***简单的filter实例******
***这是一个敏感简单的filter实例******
***这是一个***简单的filter实例******
推荐阅读
-
asp.net MVC利用ActionFilterAttribute过滤关键字的方法
-
C#实现协同过滤算法的实例代码
-
asp.net MVC利用自定义ModelBinder过滤关键字的方法(附demo源码下载)
-
C# 撒列实现关键字过滤的实例
-
java利用DFA算法实现敏感词过滤功能
-
asp.net MVC利用自定义ModelBinder过滤关键字的方法(附demo源码下载)
-
asp.net MVC利用ActionFilterAttribute过滤关键字的方法
-
C# 撒列实现关键字过滤的实例
-
Java实现DFA算法对敏感词、广告词过滤功能示例
-
Java编程实现基于用户的协同过滤推荐算法代码示例