`
VitoCorleoneDemo
  • 浏览: 5531 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 敏感词的过滤

阅读更多

最近在研究敏感词的过滤,网上看到有不少算法,我觉得这种算法还是不错的。希望跟大家共勉。不说了,先上代码:

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 敏感词过滤

    2. SensitiveWordFilter:一个简单的Java敏感词过滤库,提供了多种过滤策略。 3. SnowNLP:虽然主要用于中文文本处理,但也可用于敏感词过滤。 在实际开发中,应结合具体需求选择合适的过滤方法,并考虑性能、准确...

    java利用DFA算法实现敏感词过滤功能

    以下是对DFA算法及其在Java敏感词过滤中的应用的详细解释。 ### 一、敏感词过滤的重要性 敏感词过滤的目标是检测和处理用户输入中可能存在的敏感词汇。这可以防止不良信息的传播,维护网络环境的和谐。常见的做法...

    java敏感词过滤(支持指定字段过滤)

    在Java开发中,敏感词过滤是一项重要的功能,尤其在处理用户输入、评论或者社交媒体内容时,需要确保不包含任何可能引发争议或不适当的内容。本项目适用于基于SSM(Spring、SpringMVC、MyBatis)和SpringBoot框架的...

    java 敏感词过滤 并显示内容所包含的敏感词

    Java作为一种广泛应用的编程语言,提供了多种实现敏感词过滤的方法。本篇将详细探讨如何在Java中进行敏感词过滤,并展示如何显示内容中包含的敏感词。 首先,我们要理解敏感词过滤的核心原理。敏感词过滤通常基于...

    Java敏感词过滤Java敏感词过滤

    ### Java敏感词过滤技术解析 #### 一、概述 在互联网时代,为了维护网络环境的健康与安全,很多平台都需要对用户输入的信息进行敏感词过滤处理。敏感词过滤技术主要应用于论坛、博客、社交媒体等场景,用以检测并...

    java敏感词过滤

    本篇文章将深入探讨Java中实现敏感词过滤的技术和方法。 首先,敏感词过滤的核心在于如何有效地匹配和替换敏感词汇。Java提供了一些强大的字符串处理和正则表达式功能,可以用来实现这一目标。正则表达式是匹配文本...

    Java敏感词过滤源码

    本资源"Java敏感词过滤源码"提供了一个实现这一功能的Java解决方案,它包含了三个关键文件:一个敏感词库和两个Java类。以下是关于这些知识点的详细解释: 1. **敏感词**: 敏感词是指那些可能引起法律、道德或...

    java实现敏感词过滤

    以下是关于这个Java敏感词过滤实现的详细知识讲解。 首先,我们要理解敏感词过滤的基本原理。通常,敏感词过滤系统会维护一个敏感词库,包含各种禁止或限制使用的词汇。当输入的字符串被检查时,系统会遍历每个单词...

    高效Java敏感词过滤系统AC自动机算法源码,支持独立部署与集成注册中心

    本项目是一款高效的Java敏感词过滤系统,基于AC自动机算法实现。系统支持独立部署,同时可便捷集成至注册中心,为各类项目提供敏感词过滤服务。包含文件共117个,其中主要构成如下: - Java源文件:49个 - Class...

    Java语言实现的敏感词过滤器

    我们在开发系统或者应用的过程中,经常需要对用户提交的评论或者文章进行审核,对其中的敏感词进行校验或者过滤,本资源可以帮助各位小伙伴以一个简单的方式实现敏感词的过滤,代码精简易懂,可以应用在实际开发过程...

    JAVA敏感词过滤

    使用DFA状态机实现敏感词过滤。 使用Java实现

    高效敏感词过滤JAVA实现(DFA算法) 5000字2ms

    高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...

    java 敏感词过滤

    在Java编程环境中,敏感词过滤是一项重要的任务,特别是在处理用户输入、社交媒体监控或者内容审查时。这个主题主要涉及如何在文本中检测并移除或替换指定的敏感词汇,以确保内容的安全性和合规性。以下是对这个知识...

    基于多种敏感词过滤算法的Java敏感词过滤设计源码

    该项目是一款基于Java实现的敏感词过滤系统源码,包含60个文件,其中Java源文件41个,支持多种敏感词过滤算法,包括TTMP、DFA、DAT、hash bucket和Tire算法。系统提供文本高亮、过滤、判词、替换的接口支持,适用于...

    java。dfa算法实现敏感词过滤

    本篇将重点介绍如何使用Java实现基于DFA(Deterministic Finite Automaton,确定有限状态自动机)算法的敏感词过滤。 首先,DFA算法是一种图论概念,它可以被视作一种特殊的有向图,每个节点代表一个状态,每条边...

    java敏感词检索工具

    Java敏感词检索工具是一种在社区问答、论坛等网络...总的来说,Java敏感词检索工具的实现涉及到了数据结构、算法、多线程、正则表达式等多个方面的知识,通过合理的设计和优化,可以实现高效且准确的敏感词过滤功能。

    JAVA敏感词过滤的代码

    算法思路:把敏感词的第一个字符取出来,作为比较对象。遍历整个字符串,如果发现字符跟敏感词第一个字符相同,就从字符串取出跟关键词相同长度的子串比较,如果相同就替换。本算法比较适合敏感词都不长的场合。

Global site tag (gtag.js) - Google Analytics