使用方法:
public static void main(String[] args) {
SimpleTreeFilter filter = new SimpleTreeFilter();
filter.addKeyword("禁词1");
filter.addKeyword("禁词2");
filter.addKeyword("其它禁词");
System.out.println(filter.contains("我是合法的"));
System.out.println(filter.contains("我包含禁词1"));
System.out.println(filter.contains("我包含禁词2"));
System.out.println(filter.contains("我包含其它禁词1"));
System.out.println(filter.contains("来个别的吧"));
System.out.println(filter.contains("再见"));
}
输出:
null
禁词1
禁词2
其它禁词
null
null
import java.util.HashMap;
public class SimpleTreeFilter{
public class TreeNode{
public char c;
public HashMap<Character, TreeNode> next;
public boolean isEnd=false;
}
HashMap<Character, TreeNode> head = new HashMap<Character, TreeNode>();
public void addKeyword(String word) {
word=word.toLowerCase();
int len = word.length();
if(len==0){
return;
}
char firstChar = word.charAt(0);
TreeNode node;
if(head.containsKey(firstChar)){
node = head.get(firstChar);
}else{
node = new TreeNode();
node.c=firstChar;
head.put(firstChar, node);
}
for(int i=1;i<len;i++){
char c=word.charAt(i);
if(node.next==null){
node.next = new HashMap<Character, TreeNode>();
}
if(node.next.containsKey(c)){
node = node.next.get(c);
}else{
TreeNode tNode = new TreeNode();
tNode.c=c;
node.next.put(c, tNode);
node = tNode;
}
}
node.isEnd=true;
}
public String contains(String line) {
int len = line.length();
line=line.toLowerCase();
for(int i=0;i<len;i++){
char c=line.charAt(i);
if(head.containsKey(c)){
TreeNode node = head.get(c);
if(node.isEnd==true){
return (c+"").toLowerCase();
}
int j=i+1;
while(j<len){
char cTemp = line.charAt(j);
if(node.next.containsKey(cTemp)){
node = node.next.get(cTemp);
if(node.isEnd==true){
return line.substring(i,j+1).toLowerCase();
}
}else{
break;
}
j++;
}
}
}
return null;
}
}
分享到:
相关推荐
本知识点将聚焦于ThinkPHP5中的一个特定功能——敏感词过滤类,以及如何使用DFA(Deterministic Finite Automaton,确定有限状态自动机)算法来实现这一功能。 首先,我们要理解敏感词过滤的背景。在网站内容管理中...
百度违禁词查询工具,过滤掉违规词,再去优化网站文章,能大大提高站群效率
高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...
由于这是一个简单的违禁词过滤,很可能采用了暴力匹配,即逐个字符比较,如果找到连续的违禁词,则认为存在违禁词。 2. **数据结构与算法**: - 违禁词可能存储在一个集合或者数组中,例如ArrayList或HashSet。...
5. **自定义配置**:一个好的过滤类应该允许开发者根据自己的需求定制非法字符列表,或者调整检查策略。 6. **异常处理**:在检测到问题时,类可能抛出异常,以便调用者能够捕获并处理这些情况。 7. **性能优化**...
下面将详细解释如何实现这样一个敏感词过滤类及其相关知识点。 一、敏感词过滤原理 敏感词过滤的基本思路是通过建立一个敏感词库(通常是数组或关联数组),然后遍历输入文本,检查每个单词是否存在于敏感词库中。...
结合以上概念,我们可以编写一个简单的Python程序,实现分词、词性标注及停用词过滤: ```python import jieba import jieba.posseg as pseg # 加载停用词表 stopwords = set(jieba.get_stop_words()) def ...
通风空调高效过滤器泄漏测试记录(一)
这是一个我一个做灰色的朋友找人定制的,外面绝对没有 如果查询失败,更新下百度账号Cookie 将百度账号Cookie放入:百度Cookie.txt 内 不用Cookie去爬会拦截 使用教程 1.要查询的关键词放入...
这个"springBoot-java敏感词语过滤类"是一个实用的工具类,用于帮助开发者实现在Java环境中对用户输入或者系统文本进行安全审查,防止不适当、非法或者有害的信息传播。这个工具类通常会包含一系列的方法,用于匹配...
禁词过滤器(StopFilter)是Analyzer的一部分,可以移除停用词,减少索引大小并提高搜索效率。例如,在英文中,"the"、"and"、"in"等词频繁出现但对搜索结果影响不大,可以作为禁词处理。 四、搜索操作 1. 查询...
这个"php安全过滤类.zip"文件可能包含了一个自定义的PHP类库,用于对用户提交的数据进行严格的验证和清理,以提升应用程序的安全性。 首先,让我们了解一些基本的安全过滤概念: 1. **SQL注入**:这是一种攻击方式...
6. **返回禁词列表**: 类可能还提供一个方法,返回在给定文本中找到的所有敏感词,这对于日志记录、审核或反馈给用户可能是有用的。 7. **优化性能**: 为了提高效率,实现可能还包括缓存已匹配的敏感词,避免重复...
文档标题和描述中提到的是一个关于“高效过滤器安装记录”的文档,这通常是指在制药、生物技术或洁净室环境中进行的重要操作。高效过滤器(HEPA)是用于捕获微粒,如灰尘、细菌和其他污染物,以维持高度清洁的工作...
在Go语言中实现一个简单的布隆过滤器可以帮助我们高效地处理大数据集,尤其是在内存有限的情况下。以下是对这个主题的详细说明: 1. **布隆过滤器原理**: 布隆过滤器基于多个哈希函数,将元素映射到一个固定大小...
这个主题的标题“过滤HTML标签类”暗示我们将会探讨一个专门用于去除或处理HTML标签的类或库。这类工具通常用于确保数据的安全性和一致性,防止XSS(跨站脚本攻击)等安全问题,或者是为了使数据更适合存储、分析或...
1. **创建过滤器类**:首先,我们需要创建一个实现`Filter`接口的类,并重写`doFilter`方法。在这个方法里,我们可以添加自定义的逻辑,例如检查请求头或session中的登录信息。 2. **配置过滤器**:在Web应用的`web...
"高效过滤敏感词类库"的标题暗示了我们讨论的是一个专门用于检测和屏蔽文本中特定敏感词的软件工具或库。这个库可能采用了一种算法来快速、准确地识别并过滤掉这些词汇,以确保信息的合规性和安全性。 描述中提到的...
一个简单的中文分词算法,可用于网游脏词过滤、搜索引擎文档解析、自然语言处理等需要中文分词的场合 洋文单词以空格天然分词,相比较而言因为一句中文是由连贯的字组成的,分词就麻烦一些。最困难的情况是对二义性...
高效纤维过滤器是一种创新的过滤技术,主要用于水处理领域,具备高效能和显著的效果。这种过滤设备采用GXS系列的高效纤维束作为滤元,滤料由细小的纤维构成,直径可达到几十微米甚至几微米。由于纤维比表面积大、...