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实例******
分享到:
相关推荐
同时,文章也指出了在云计算环境下过滤敏感信息所面临的挑战,比如数据隐私保护、算法的安全性和可靠性等,这些都是未来研究需要重点关注的方面。 通过本文的分析,可以看出云计算在处理大规模数据集时的高效性,...
在本文中,我们将探讨如何使用DFA(有穷自动机)算法在Java中实现敏感词过滤功能。敏感词过滤在许多应用程序中都是必要的,例如社交媒体、论坛或博客平台,以防止用户发布不当或有害的内容。以下是对DFA算法及其在...
- 实时性:在大量数据流中实时过滤敏感字符,需要高效的算法和强大的计算能力。 - 精确度:避免误判,减少正常信息被误过滤的情况。 - 更新维护:敏感词库需要不断更新,以应对新出现的敏感词汇。 - 法律法规...
高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...
本话题聚焦于一个特定的Laravel包,该包专门用于过滤敏感词汇,并且采用了DFA(Deterministic Finite Automaton,确定有限状态自动机)算法。DFA算法在文本处理、模式匹配等领域有着广泛的应用,尤其在过滤或检测...
局部敏感哈希(LSH,Locality-sensitive hashing)是一种在大数据集上进行相似性搜索的高效算法,尤其适用于高维空间的数据。它的工作原理是将数据项映射到一个低维空间,使得相似的项在哈希后有更高的概率映射到...
在本项目"javaWeb实现的过滤器敏感字过滤"中,核心目标是通过过滤器来检查用户输入或者发送的数据,防止出现敏感字符,以确保数据的安全性和合规性。下面我们将深入探讨这个主题,包括过滤器的工作原理、敏感字符...
WM算法,全称为“Widow-Matching”算法,是一种常用的文本处理技术,主要用于敏感词过滤。在互联网信息管理、社交媒体监控以及信息安全等领域,敏感词过滤具有重要作用,它可以帮助识别和屏蔽特定的关键词,防止不良...
标题中的“过滤敏感词汇1.0版——仅仅是最简单的过滤”指的是一个初步的文本过滤系统,主要用于检测和移除或替换文本中的敏感词汇。在互联网环境中,为了维护网络秩序,防止不良信息传播,这类系统通常被用于论坛、...
在.NET开发环境中,脏字过滤算法是用于检测和阻止不适当、敏感或恶意文本内容的常见工具。这种算法通常应用于论坛、社交媒体、评论系统等,以确保用户生成的内容符合社区准则。以下是对.NET脏字过滤算法代码的详细...
本篇将重点介绍如何使用Java实现基于DFA(Deterministic Finite Automaton,确定有限状态自动机)算法的敏感词过滤。 首先,DFA算法是一种图论概念,它可以被视作一种特殊的有向图,每个节点代表一个状态,每条边...
Java使用DFA算法实现过滤多家公司自定义敏感字功能详解主要介绍了Java使用DFA算法实现过滤多家公司自定义敏感字功能,结合实例形式分析了DFA算法的实现原理及过滤敏感字的相关操作技巧。 DFA算法简介 DFA...
Ahocorasick敏感词过滤状态机算法是一种高效的数据结构和算法,主要用于文本处理中的关键词匹配和过滤。在互联网内容审查、信息安全或者用户行为分析等领域,它有着广泛的应用。该算法结合了Trie树(字典树)和...
DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。...
由于这种特性,布隆过滤器非常适合用在对内存空间敏感且可以容忍一定误报率的应用场景中。 ### 工作原理 布隆过滤器主要由一个位数组(bit array)和多个不同的哈希函数组成。当一个元素被添加到过滤器时,它会...
在IT行业中,尤其是在数据安全和内容审查领域,高效地过滤敏感词汇是一项至关重要的任务。"高效过滤敏感词类库"的标题暗示了我们讨论的是一个专门用于检测和屏蔽文本中特定敏感词的软件工具或库。这个库可能采用了一...
协同过滤(Collaborative Filtering,简称CF)是推荐系统中常用的一种算法,它基于用户的行为历史数据,通过发现用户之间的相似性或者项目之间的相似性来为用户推荐他们可能感兴趣但还未接触过的内容。在这个场景中...