AC多模匹配算法过滤敏感词实例

简介: 本文章摘编、转载需要注明来源 http://blog.csdn.net/shadowsick/article/details/8891939在应用项目中很多时候都需要用到过滤敏感词的功...

本文章摘编、转载需要注明来源 http://blog.csdn.net/shadowsick/article/details/8891939

在应用项目中很多时候都需要用到过滤敏感词的功能,自己写个遍历明显在小数据的时候还能凑合下,但是对于大数据的时候就有点力不从心了,这里推荐使用ac多模匹配算法


先来写个应用类

/**
 * AC多模匹配敏感字符工具类实现类
 * 
 * @author shadow
 * @email 124010356@qq.com
 * @create 2012.04.28
 */
public class AcUtilImpl implements AcUtil {

	public String contrast(String filters, String word, String regex) {

		if (null == filters || "".equals(filters) || null == word
				|| "".equals(word))
			return "";

		AhoCorasick ac = new AhoCorasick();
		String[] strings = StringUtils.split(filters, regex);
		for (String string : strings)
			ac.add(string.getBytes(), string);
		ac.prepare();
		return matching(ac, word);
	}

	public String contrast(String[] filters, String word) {

		if (null == filters || filters.length <= 0 || null == word
				|| "".equals(word))
			return "";

		AhoCorasick ac = new AhoCorasick();
		for (int i = 0, len = filters.length; i < len; i++) {
			ac.add(filters[i].getBytes(), filters[i]);
		}
		ac.prepare();
		return matching(ac, word);
	}

	public String contrast(List<String> filters, String word) {

		if (null == filters || filters.size() <= 0 || null == word
				|| "".equals(word))
			return "";

		AhoCorasick ac = new AhoCorasick();
		for (int i = 0, len = filters.size(); i < len; i++) {
			ac.add(filters.get(i).getBytes(), filters.get(i));
		}
		ac.prepare();
		return matching(ac, word);
	}

	private String matching(AhoCorasick ac, String word) {
		StringBuffer buffer = new StringBuffer();
		Iterator<?> iterator = ac.search(word.getBytes());
		while (iterator.hasNext()) {
			SearchResult result = (SearchResult) iterator.next();
			buffer.append(result.getOutputs()).append(",");
		}
		return buffer.length() > 0 ? buffer.substring(0, buffer.length() - 1)
				: "";
	}

	public static void main(String[] args) {
		String filters = "or,world,33,dd,test";
		String word = "hello world, how are you!";
		String regex = ",";
		String result = new AcUtilImpl().contrast(filters, word, regex);
		System.out.println(result);
	}
}

然后运行main函数测试下,获得的结果是

[or],[world]


这个插件的性能,匹配度也灰常不错,AhoCorasick这个类自己下载放到项目里就可以了

目录
相关文章
|
2月前
|
存储 算法 测试技术
ArrayList集合的两个实例应用,有趣的洗牌算法与杨辉三角
ArrayList集合的两个实例应用,有趣的洗牌算法与杨辉三角
23 1
|
3月前
|
机器学习/深度学习 监控 算法
yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计(代码+教程)
yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计(代码+教程)
145 1
|
3天前
|
机器学习/深度学习 算法 数据挖掘
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
10 0
|
3天前
|
机器学习/深度学习 算法 搜索推荐
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(上)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例
11 0
|
7天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
9天前
|
算法 数据可视化
R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例
R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例
27 1
R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例
|
15天前
|
机器学习/深度学习 算法 C++
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例
42 0
|
15天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
22 0
|
16天前
|
数据采集 算法 数据可视化
R语言聚类算法的应用实例
R语言聚类算法的应用实例
86 18
R语言聚类算法的应用实例
|
16天前
|
算法 搜索推荐 Python
数据结构与算法在Python面试中的应用实例
【4月更文挑战第13天】本文聚焦Python面试中的数据结构与算法问题,包括排序算法、链表操作和树图遍历。重点讨论了快速排序、链表反转和二叉树前序遍历的实现,并指出理解算法原理、处理边界条件及递归操作是避免错误的关键。通过实例代码和技巧分享,帮助面试者提升面试表现。
13 0