1、创建敏感字Map
public static Map addWordToHashMap(Set<String> keyWordSet) { if(0 == keyWordSet.size()) return new HashMap(); Map map = new HashMap(keyWordSet.size()); String key = null; Map nowMap = null; Map<String, String> newWorMap = null; Iterator<String> iterator = keyWordSet.iterator(); while(iterator.hasNext()){ key = iterator.next(); nowMap = map; for(int i = 0; i < key.length(); i++){ char keyChar = key.charAt(i); Map wordMap = (Map) nowMap.get(keyChar); if(wordMap != null) nowMap = wordMap; else{ newWorMap = new HashMap<String,String>(); nowMap.put(keyChar, newWorMap); nowMap = newWorMap; } if(i == key.length() - 1) nowMap.put("isEnd", "1"); } } return map; }
2、创建正则特殊符号过滤
public static String formatString(String str) { if (StringUtils.isNotBlank(str)) { String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; return Pattern.compile(regEx).matcher(str).replaceAll("").trim(); } return ""; }
3、校验字符串
public static String checkWork(String txt, Map map, boolean needToFormat) { try { if (needToFormat) txt = formatString(txt); StringBuffer sb = new StringBuffer(); boolean has = false; char word; int num; for (int i = 0; i < txt.length(); i++) { word = txt.charAt(i); sb = new StringBuffer(word); if (map.containsKey(word)) { Map m = (Map) map.get(word); sb.append(word); num = i + 1; while (true) { if (num < txt.length()) { word = txt.charAt(num++); sb.append(word); if (m.containsKey(word)){ m = (Map) m.get(word); if (m.containsKey("isEnd")) { has = true; return sb.toString(); } } else break; } else break; } } } if (has) return sb.toString(); } catch (Exception e) { //logger.error("检验敏感字出错,原因为:{}", e); e.printStackTrace; } return null; }
相关推荐
### 三、DFA算法实现敏感词过滤 #### 第一步:敏感词库初始化 在Java中,我们可以使用HashMap存储敏感词库。首先,将所有敏感词从数据库或列表加载到HashSet中,以去除重复项。接着,将HashSet中的敏感词添加到...
**DFA算法敏感词屏蔽Java实现** 在信息技术领域,数据安全和内容审查是至关重要的环节。其中,敏感词过滤是一项常见的需求,它主要用于防止非法或不适当内容的传播。DFA(Deterministic Finite Automaton,确定有限...
DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的...
首先,DFA算法是一种图论概念,它可以被视作一种特殊的有向图,每个节点代表一个状态,每条边代表一个字符,从一个状态到另一个状态的转移是根据输入字符来决定的。在敏感词过滤中,我们可以构建一个DFA来表示敏感...
然而,这段代码中并没有展示完整的DFA算法实现,例如状态转移函数和结束状态判断的逻辑。完整的DFA匹配通常会包含以下步骤: 1. 初始化状态机,设置起始状态为0,通常0状态表示正在等待第一个字符。 2. 对输入字符串...
高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...
首先,让我们了解什么是DFA算法。DFA是一种特殊的图论模型,它由有限个状态和一些输入符号构成,每个状态都可以通过一个输入符号转移到另一个状态。在敏感词过滤场景中,DFA可以从文本的起始位置开始,通过比较每个...
高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...
构造正则表达式的简化DFA算法论文 介绍了构造等价于给定正则表达式的简化确定有限自动机(DFA) 的算 法. 方法是首先构造与正则表达式等价的非确定有限自动机(NFA) , 这里省略了构 造带E动作的有限自动机的操作, 然后...
Java使用DFA算法实现过滤多家公司自定义敏感字功能详解 Java使用DFA算法实现过滤多家公司自定义敏感字功能详解主要介绍了Java使用DFA算法实现过滤多家公司自定义敏感字功能,结合实例形式分析了DFA算法的实现原理及...
总的来说,这个Java DFA算法实现提供了对敏感词和广告词过滤的功能,适用于各种需要内容审查的场景,如社交媒体、论坛、评论系统等。通过导入和运行提供的测试代码,开发者可以快速评估和集成这个功能到自己的应用中...
DFA算法是一种状态机模型,它可以根据预定义的一组规则(如敏感词库)对输入字符串进行匹配。在这个项目中,DFA被用于构建一个能够识别和拦截敏感词汇的系统。当用户输入的文字通过这个系统时,DFA会逐字符检查,...
提供的压缩包“FSA”可能包含实现这些算法的源代码,这对于学习和理解FSA的内部工作原理非常有帮助。通过阅读和实验这些代码,初学者可以深入理解有限状态自动机的构建和转换过程。 总之,DFA和NFA是计算理论和...
同时,包含的程序设计文档将提供有关设计决策和算法流程的额外见解,帮助你更好地掌握DFA和NFA的实现细节。 总的来说,DFA和NFA是理论计算机科学中的基础概念,它们在编译器设计、正则表达式匹配、文本处理和形式...
系统采用DFA算法,支持文件夹创建、修改、多级目录管理,实现与普通文件夹相同的文件操作。功能全面,包括文件上传、类型分类、删除、回收站管理、恢复与彻底删除,支持公开和私密分享,自动生成提取码,设置过期...
在计算机科学领域,编译原理是一门至关重要的课程,它涉及到如何将高级编程语言...实践中,我们还可以结合其他算法,如动态规划或回溯法,来优化DFA的性能和内存占用,使其更加适合处理大规模的输入和复杂的识别任务。
Java实现的DFA最小化算法可能包括Hopcroft算法或powerset construction方法。 本资源提供的"词法分析作业"可能是针对这些概念的一系列练习或示例代码,帮助学习者深入理解和实践编译原理中的这些关键技术。通过这些...
该项目是一款基于ik分词和DFA算法实现的敏感词过滤Java设计源码,包含31个文件,涵盖20个Java源文件、3个属性文件、2个Git忽略文件、2个XML文件、2个class文件和1个MD文件等。该系统主要提供接口功能,无页面展示,...
在编程实践中,可以使用库如`Automat`(Python)或`Finite State Machine`(Java)来实现和操作DFA。这些库提供了构造、转换和执行DFA的功能,有助于在实际项目中应用DFA算法。 总之,DFA是一种强大的工具,用于...