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实例******
分享到:
相关推荐
在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和...下面这篇文章主要给大家介绍了关于java利用DFA算法实现敏感词过滤功能的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
云计算下网络敏感信息过滤算法研究.pdf
高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...
过滤敏感词汇的laravel包,使用DFA算法
提出一种快速的图像型垃圾邮件过滤方案,结合半监督机器学习技术改进局部敏感哈希(LSH)算法,基于改进的LSH算法构建垃圾图像特征库索引,提高图像的查找速度。搜集并构造了60 000个垃圾图像样本,实验结果表明,...
该算法不依赖词典与分词, 通过构建敏感词决策树,将网页文本内容以数据流形式检索决策树,记录敏感词词频、区域信息以及敏感词级别, 计算文本整体敏感度,过滤敏感文本。 实验结果表明,SWDT-IFA 算法具有较高的查准率...
DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。...
WM算法实现_敏感词过滤,java版本 敏感词库为XML格式
使用C++写的一套敏感词过滤算法,把敏感词库放到可执行文件的同一目录。经测试,一秒钟最高可达到1千万的处理量。在输入较复杂的文本(200个文字),大概达到50万每秒的处理量。
高效过滤敏感词列表,算法过滤。过滤文本中指定敏感词和特殊字符
DFA算法敏感庞屏蔽java实现DFA算法敏感庞屏蔽java实现
java使用dfa算法实现敏感词过滤,此算法效率最高,附带了一个敏感词库,轻松搞定论坛网站的敏感词过滤问题。
基于网络文本信息的敏感信息过滤算法
主要介绍了Java使用DFA算法实现过滤多家公司自定义敏感字功能,结合实例形式分析了DFA算法的实现原理及过滤敏感字的相关操作技巧,需要的朋友可以参考下
高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...
"深度神经网络的网络高敏感信息预警算法" 在网络安全领域,敏感信息的预警和监测是非常重要的。传统的敏感信息预警算法存在许多问题,如难以有效聚类信息、预警效果较差等。为了解决这些问题,提出了一种基于深度...
WSN中基于协作水印的虚假数据过滤算法 提出一种基于协作水印的数据认证算法来识别虚假数据和重复包,算法在每个数据包中嵌入两类水印: 一类是鲁棒性水印,用于对发送者的身份和数据的新鲜性进行认证;另一类是由t 个...
thinkphp5屏蔽词过滤类基于DFA算法,下载直接引入框架即可
来源于网络,共享之。 需要配合敏感词库,这个也不太好弄。