sensitive-word

平时工作中,只要涉及到用户可以自由发言(博客、文档、论坛),就要考虑内容的敏感性处理。

sensitive-word 基于 DFA 算法实现的高性能敏感词工具。工具使用 java 实现,帮助我们解决常见的问题。

特性

6W+ 词库,且不断优化更新

基于 DFA 算法,性能较好

基于 fluent-api 实现,使用优雅简洁

支持敏感词的判断、返回、脱敏等常见操作

支持全角半角互换

支持英文大小写互换快速开始准备

JDK1.7+

Maven 3.x+Maven 引入

<dependency> <groupId>com.github.houbb</groupId> <artifactId>sensitive-word</artifactId> <version>0.0.4</version></dependency>api 概览

SensitiveWordBs 作为敏感词的引导类,核心方法如下:

方法参数返回值说明newInstance()无引导类初始化引导类contains(String)待验证的字符串布尔值验证字符串是否包含敏感词findAll(String)待验证的字符串字符串列表返回字符串中所有敏感词replace(String, char)使用指定的 char 替换敏感词字符串返回脱敏后的字符串replace(String)使用 * 替换敏感词字符串返回脱敏后的字符串使用实例

所有测试案例参见 SensitiveWordBsTest

判断是否包含敏感词

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";Assert.assertTrue(SensitiveWordBs.newInstance().contains(text));返回第一个敏感词

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";String word = SensitiveWordBs.newInstance().findFirst(text);Assert.assertEquals("五星红旗", word);返回所有敏感词

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";List<String> wordList = SensitiveWordBs.newInstance().findAll(text);Assert.assertEquals("[五星红旗, 毛主席, 天安门]", wordList.toString());默认的替换策略

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";String result = SensitiveWordBs.newInstance().replace(text);Assert.assertEquals("****迎风飘扬,***的画像屹立在***前。", result);指定替换的内容

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";String result = SensitiveWordBs.newInstance().replace(text, '0');Assert.assertEquals("0000迎风飘扬,000的画像屹立在000前。", result);更多特性

后续的诸多特性,主要是针对各种针对各种情况的处理,尽可能的提升敏感词命中率。

这是一场漫长的***之战。

忽略大小写

final String text = "fuCK the bad words.";String word = SensitiveWordBs.newInstance().findFirst(text);Assert.assertEquals("fuCK", word);忽略半角圆角

final String text = "fuck the bad words.";String word = SensitiveWordBs.newInstance().findFirst(text);Assert.assertEquals("fuck", word);后期 road-map

数字的转换处理

繁简体互换

重复词

停顿词

拼音互换

用户自定义敏感词和白名单

文字镜像翻转

敏感词标签支持拓展阅读

敏感词工具实现思路

DFA 算法讲解

敏感词库优化流程

停止词的思考记录