1 Star 3 Fork 1

Junior / sensitive-words-filter-plus

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

快速敏感词过滤

性能概述

使用60MB大小的小说测试,单核性能超过50M字符每秒(i7 2.3GHz)。

敏感词 14553 条
待过滤文本共 599254 行,30613005 字符。
过滤耗时 0.535 秒, 速度为 57220.6字符/毫秒
其中 39691 行有替换

优化方式

主要的优化目标是速度,从以下方面优化:

  1. 敏感词都是2个字以上的,
  2. 对于句子中的一个位置,用2个字符的hash在稀疏的hash桶中查找,如果查不到说明一定不是敏感词,则继续下一个位置。
  3. 2个字符(2x16位),可以预先组合为1个int(32位)的mix,即使hash命中,如果mix不同则跳过。
  4. StringPointer,在不生成新实例的情况下计算任意位置2个字符的hash和mix
  5. StringPointer,尽量减少实例生成和char数组的拷贝。

敏感词库

默认敏感词库拷贝自 https://github.com/observerss/textfilter ,并删除如女人然后这样的几个常用词。 使用默认敏感词库的示例如下

// 使用默认单例(加载默认词典)
		SensitiveFilter filter = SensitiveFilter.DEFAULT;
		// 向过滤器增加一个词
		filter.put("婚礼上唱春天在哪里");
		
		// 待过滤的句子
		String sentence = "中国,然后,市长在婚礼上唱春天在哪里。";
//		String sentence = "爱你";
		/** 注释原先源码使用方法
		// 进行过滤
		String filted = filter.filter(sentence, '*');
		
		// 如果未过滤,则返回输入的String引用
		if(sentence != filted){
			// 句子中有敏感词
			System.out.println(filted);
		}*/

		/**
		 * Junior 修改源码添加新的使用方式,支持敏感信息汇总
		 */
		Map<String, Object> retMap = filter.filter(sentence, '*');
		Boolean isReplaced = (Boolean)retMap.get(RetEnum.IS_REPLACED.getKey());
		String replacedWords = (String)retMap.get(RetEnum.REPLACED_WORDS.getKey());
		Set sensitiveWordSet = (Set)retMap.get(RetEnum.SENSITIVE_WORD_SET.getKey());

		System.out.println("替换前的句子为:"+sentence);

		// 如果未过滤,则返回输入的String引用
		if(isReplaced){
			// 句子中有敏感词
			System.out.println("句子中有敏感词:"+sensitiveWordSet);
		}

		System.out.println("替换后的句子为:"+replacedWords);

打印结果

替换前的句子为:中国,然后,市长在婚礼上唱春天在哪里。
句子中有敏感词:[[中国], [市长], [婚礼上唱春天在哪里]]
替换后的句子为:**,然后,**在*********。

依赖

JDK 1.7版本及以上

空文件

简介

基于DFA算法的敏感信息过滤工具,支持敏感信息收集返回,也可以批量过滤大文档中,一些国家法律规定的非法敏感信息 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/juniorRay/sensitive-words-filter-plus.git
git@gitee.com:juniorRay/sensitive-words-filter-plus.git
juniorRay
sensitive-words-filter-plus
sensitive-words-filter-plus
master

搜索帮助