敏感词/脏词开源工具-sensitive-word
我们应该都遇见过敏感词过滤,比如当我们输入一些包含暴力或者色情的文本,系统会阻止信息提交。敏感词过滤就是检查用户输入的内容有没有敏感词,检查之后有两个策略。
1.直接阻止信息保存,接口返回错误信息
2.允许信息保存,但是会把敏感词替换为***
不管是哪种策略,首先都得找到是否包含敏感词,这个判断一般是在服务端完成的。

要判断用户输入有无敏感词,首先要知道哪些词语是敏感词,也就是得有个敏感词库。比如现在敏感词库里记录了两个敏感词:“abc”和“cde”,如何判断用户输入的内容里是否包含这两个敏感词呢?最容易想到的方法是遍历敏感词库,依次判断输入内容是否有“abc”和“cde”。这种方法是可靠的,但是真实的敏感词库里存放的敏感词是非常多的,这时候遍历敏感词库的性能比较低,而且大部分情况下用户输入的内容都是不包含敏感词的,这时需要完全遍历敏感词库,也就是说大部分情况下遇到的都是这个算法复杂度最高的情形。

有没有一种比较高效的方法来查找敏感词呢?DFA算法可以做到。
DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的有限自动机,DFA中不会有从同一状态出发的两条边标志有相同的符号。
今天就介绍一个基于基于 DFA算法,性能较好敏感词工具类-sensitive word。
sensitive word功能特色
sensitive-word 是一个 Java 编写的敏感词过滤工具包,可以用于对文本中的敏感词进行过滤。该工具包提供了多种敏感词匹配算法,并支持自定义敏感词库和替换策略。使用该工具包可以有效地保护用户隐私,防止不良信息的传播。具体来说,sensitive-word 工具包提供了以下功能:
多种敏感词匹配算法,包括 DFA、AC 自动机等,可以根据实际需求选择合适的算法;
支持自定义敏感词库和替换策略,可以根据实际需求添加、删除或修改敏感词;
支持对文本中的敏感词进行替换或标记,可以根据实际需求选择合适的处理方式;
支持对敏感词进行分组,可以根据实际需求对敏感词进行分类管理。

总之,sensitive-word 工具包是一个功能强大、易于使用的敏感词过滤工具,可以帮助开发者快速、准确地对文本中的敏感词进行过滤,保护用户的隐私和安全。
除了上述功能,sensitive-word 工具包还有以下特点:
高性能:采用多种优化方式,如位图压缩、缓存预热等,可以提高敏感词匹配速度;
易于扩展:支持自定义敏感词库和替换策略,可以根据实际需求进行扩展;
易于集成:可以通过 Maven 或 Gradle 等构建工具进行集成,也可以直接下载源码进行使用;
开源免费:使用 Apache License 2.0 开源许可证,可以免费商用。

总之,sensitive-word 工具包是一个功能强大、性能高效、易于扩展和集成的敏感词过滤工具,适用于各种 Java 项目,可以帮助开发者提高开发效率和用户体验,减少不良信息的传播。
sensitive word集成使用
环境:
JDK1.7+
Maven 3.x+
Maven 引入:

在 resources 下添加文件:
文件以及文件内容如下
敏感: mySensitiveWords.txt
工具类:

形同陌陆
校验提示文案
神马值得吗
校验提示文案
jackfled1
校验提示文案
言无尽
校验提示文案
PoPeYe2001
校验提示文案
amazoner
校验提示文案
拾荒的瓦力
校验提示文案
就薅一只羊
校验提示文案
PoPeYe2001
校验提示文案
huohu4399
校验提示文案
就薅一只羊
校验提示文案
拾荒的瓦力
校验提示文案
huohu4399
校验提示文案
amazoner
校验提示文案
神马值得吗
校验提示文案
jackfled1
校验提示文案
形同陌陆
校验提示文案
PoPeYe2001
校验提示文案
PoPeYe2001
校验提示文案
言无尽
校验提示文案