最近在研究敏感词的过滤,网上看到有不少算法,我觉得这种算法还是不错的。希望跟大家共勉。不说了,先上代码:
import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class T { // private HashMap keysMap = new HashMap(); private static int matchType = 1; // 1:最小长度匹配 2:最大长度匹配 public static Map addKeywords(List<String> keywords) { Map<String, String> keysMap = new HashMap<String, String>(); for (int i = 0; i < keywords.size(); i++) { String key = keywords.get(i).trim(); Map filterHash = null; filterHash = keysMap; for (int j = 0; j < key.length(); j++) { char word = key.charAt(j); Object wordMap = filterHash.get(word); if (wordMap != null) { filterHash = (HashMap) wordMap; } else { HashMap<String, String> newWordHash = new HashMap<String, String>(); newWordHash.put("isEnd", "0"); filterHash.put(word, newWordHash); filterHash = newWordHash; } if (j == key.length() - 1) { filterHash.put("isEnd", "1"); } } } return keysMap; } /** * 重置关键词 */ public static void clearKeywords(HashMap keysMap) { keysMap.clear(); } /** * 检查一个字符串从begin位置起开始是否有keyword符合, 如果有符合的keyword值,返回值为匹配keyword的长度,否则返回零 * flag 1:最小长度匹配 2:最大长度匹配 */ private static int checkKeyWords(HashMap keysMap, String txt, int begin, int flag) { HashMap nowhash = null; nowhash = keysMap; int maxMatchRes = 0; int res = 0; int l = txt.length(); char word = 0; for (int i = begin; i < l; i++) { word = txt.charAt(i); Object wordMap = nowhash.get(word); if (wordMap != null) { res++; nowhash = (HashMap) wordMap; if (((String) nowhash.get("isEnd")).equals("1")) { if (flag == 1) { wordMap = null; nowhash = null; txt = null; return res; } else { maxMatchRes = res; } } } else { txt = null; nowhash = null; return maxMatchRes; } } txt = null; nowhash = null; return maxMatchRes; } /** * 返回txt中关键字的列表 */ public static Set<String> getTxtKeyWords(HashMap keysMap, String txt) { Set set = new HashSet(); int l = txt.length(); for (int i = 0; i < l;) { int len = checkKeyWords(keysMap, txt, i, matchType); if (len > 0) { set.add(txt.substring(i, i + len)); i += len; } else { i++; } } txt = null; return set; } /** * 仅判断txt中是否有关键字 */ public static boolean isContentKeyWords(HashMap keysMap, String txt) { for (int i = 0; i < txt.length(); i++) { int len = checkKeyWords(keysMap, txt, i, 1); if (len > 0) { return true; } } txt = null; return false; } // public int getMatchType() { // return matchType; // } // // public void setMatchType(int matchType) { // this.matchType = matchType; // } public static void main(String[] args) { KeywordFilter filter = new KeywordFilter(); List<String> keywords = new ArrayList<String>(); keywords.add("你妹"); keywords.add("页面加载"); HashMap keysMap = filter.addKeywords(keywords); String txt = "不允许说脏话,尤其是你妹这个词。庞大的页面加载的过程中"; System.out.println(keysMap); boolean boo = filter.isContentKeyWords(keysMap, txt); System.out.println(boo); Set set = filter.getTxtKeyWords(keysMap, txt); Iterator<String> it = set.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); } System.out.println(set); } }
直接可以运行,大家可以看看结果,依照自己的思路进行,如果什么疑问,随时可以发表意见
相关推荐
在Java开发中,实现敏感词过滤功能是一项常见的需求,特别是在社交媒体、论坛或评论系统中,以防止用户发布不当或违规内容。本项目的核心是通过Java编程实现敏感词的检测和替换,确保信息的安全和合规性。 `...
2. SensitiveWordFilter:一个简单的Java敏感词过滤库,提供了多种过滤策略。 3. SnowNLP:虽然主要用于中文文本处理,但也可用于敏感词过滤。 在实际开发中,应结合具体需求选择合适的过滤方法,并考虑性能、准确...
以下是对DFA算法及其在Java敏感词过滤中的应用的详细解释。 ### 一、敏感词过滤的重要性 敏感词过滤的目标是检测和处理用户输入中可能存在的敏感词汇。这可以防止不良信息的传播,维护网络环境的和谐。常见的做法...
在Java开发中,敏感词过滤是一项重要的功能,尤其在处理用户输入、评论或者社交媒体内容时,需要确保不包含任何可能引发争议或不适当的内容。本项目适用于基于SSM(Spring、SpringMVC、MyBatis)和SpringBoot框架的...
Java作为一种广泛应用的编程语言,提供了多种实现敏感词过滤的方法。本篇将详细探讨如何在Java中进行敏感词过滤,并展示如何显示内容中包含的敏感词。 首先,我们要理解敏感词过滤的核心原理。敏感词过滤通常基于...
### Java敏感词过滤技术解析 #### 一、概述 在互联网时代,为了维护网络环境的健康与安全,很多平台都需要对用户输入的信息进行敏感词过滤处理。敏感词过滤技术主要应用于论坛、博客、社交媒体等场景,用以检测并...
本篇文章将深入探讨Java中实现敏感词过滤的技术和方法。 首先,敏感词过滤的核心在于如何有效地匹配和替换敏感词汇。Java提供了一些强大的字符串处理和正则表达式功能,可以用来实现这一目标。正则表达式是匹配文本...
本资源"Java敏感词过滤源码"提供了一个实现这一功能的Java解决方案,它包含了三个关键文件:一个敏感词库和两个Java类。以下是关于这些知识点的详细解释: 1. **敏感词**: 敏感词是指那些可能引起法律、道德或...
以下是关于这个Java敏感词过滤实现的详细知识讲解。 首先,我们要理解敏感词过滤的基本原理。通常,敏感词过滤系统会维护一个敏感词库,包含各种禁止或限制使用的词汇。当输入的字符串被检查时,系统会遍历每个单词...
本项目是一款高效的Java敏感词过滤系统,基于AC自动机算法实现。系统支持独立部署,同时可便捷集成至注册中心,为各类项目提供敏感词过滤服务。包含文件共117个,其中主要构成如下: - Java源文件:49个 - Class...
我们在开发系统或者应用的过程中,经常需要对用户提交的评论或者文章进行审核,对其中的敏感词进行校验或者过滤,本资源可以帮助各位小伙伴以一个简单的方式实现敏感词的过滤,代码精简易懂,可以应用在实际开发过程...
使用DFA状态机实现敏感词过滤。 使用Java实现
高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...
在Java编程环境中,敏感词过滤是一项重要的任务,特别是在处理用户输入、社交媒体监控或者内容审查时。这个主题主要涉及如何在文本中检测并移除或替换指定的敏感词汇,以确保内容的安全性和合规性。以下是对这个知识...
该项目是一款基于Java实现的敏感词过滤系统源码,包含60个文件,其中Java源文件41个,支持多种敏感词过滤算法,包括TTMP、DFA、DAT、hash bucket和Tire算法。系统提供文本高亮、过滤、判词、替换的接口支持,适用于...
本篇将重点介绍如何使用Java实现基于DFA(Deterministic Finite Automaton,确定有限状态自动机)算法的敏感词过滤。 首先,DFA算法是一种图论概念,它可以被视作一种特殊的有向图,每个节点代表一个状态,每条边...
Java敏感词检索工具是一种在社区问答、论坛等网络...总的来说,Java敏感词检索工具的实现涉及到了数据结构、算法、多线程、正则表达式等多个方面的知识,通过合理的设计和优化,可以实现高效且准确的敏感词过滤功能。
算法思路:把敏感词的第一个字符取出来,作为比较对象。遍历整个字符串,如果发现字符跟敏感词第一个字符相同,就从字符串取出跟关键词相同长度的子串比较,如果相同就替换。本算法比较适合敏感词都不长的场合。