最近在研究敏感词的过滤,网上看到有不少算法,我觉得这种算法还是不错的。希望跟大家共勉。不说了,先上代码:
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 敏感词过滤
Java 敏感词汇过滤 Java 敏感词汇过滤Java 敏感词汇过滤Java 敏感词汇过滤
论坛必不可少的敏感词过滤,java实现带敏感词库
适用于ssm及springboot项目
java 敏感词过滤的设计思路和技术问题
在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和...下面这篇文章主要给大家介绍了关于java利用DFA算法实现敏感词过滤功能的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
NULL 博文链接:https://gaojunwei.iteye.com/blog/1860521
本项目是一款高效的Java敏感词过滤系统,基于AC自动机算法实现。系统支持独立部署,同时可便捷集成至注册中心,为各类项目提供敏感词过滤服务。包含文件共117个,其中主要构成如下: - Java源文件:49个 - Class...
使用DFA状态机实现敏感词过滤。 使用Java实现
高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...
Java敏感词过滤源码。内附三个文件,敏感词(仅测试),两个类文件(用于功能实现)
对文本中的敏感词过滤 java实现 自定义敏感词
我们在开发系统或者应用的过程中,经常需要对用户提交的评论或者文章进行审核,对其中的敏感词进行校验或者过滤,本资源可以帮助各位小伙伴以一个简单的方式实现敏感词的过滤,代码精简易懂,可以应用在实际开发过程...
java。dfa算法实现敏感词过滤
算法思路:把敏感词的第一个字符取出来,作为比较对象。遍历整个字符串,如果发现字符跟敏感词第一个字符相同,就从字符串取出跟关键词相同长度的子串比较,如果相同就替换。本算法比较适合敏感词都不长的场合。
使用java 实现的可以对输入的String进行敏感词的过滤,返回敏感的词
java敏感词检索工具,用于社区等提问信息的过滤检索;
Java 网站敏感词过滤,里面自带词库,架包版本为2.0版本,本 Java工具包由北京师范大学2000级计算机系 张人杰 开发制作 基于多叉树的查找,我这是写了一个如何使用的例子,不懂QQ 248786960