sensitive-word敏感词过滤

sensitive-word
基于 DFA 算法实现的高性能敏感词工具。

在线体验

特性

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

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

  • 基于 DFA 算法,性能为 7W+ QPS,应用无感

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

  • 支持常见的格式转换

全角半角互换、英文大小写互换、数字常见形式的互换、中文繁简体互换、英文常见形式的互换、忽略重复词等,DFA 算法实现的高性能 java 敏感词工具框架。请勿发布涉及政治、广告、营销、、违反国家法律法规等内容。

  • 支持敏感词检测、邮箱检测、数字检测、网址检测等

  • 支持自定义替换策略

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

  • 支持数据的数据动态更新(用户自定义),实时生效

Maven引入


    com.github.houbb
    sensitive-word
    0.8.0

SensitiveWordHelper 作为敏感词的工具类,核心方法如下

sensitive-word敏感词过滤_第1张图片

测试使用实例

 判断是否包含敏感词

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";

Assert.assertTrue(SensitiveWordHelper.contains(text));

返回第一个敏感词

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";

String word = SensitiveWordHelper.findFirst(text);
Assert.assertEquals("五星红旗", word);

自定义词库

上面是使用sensitive-word的默认词库,接下来介绍使用自己的词库(此文章采用数据库获取敏感词的方式)

/**
 * 敏感词过滤配置
 * 
 * @author 一个肥鲇鱼
 * @date 2023-09-08 14:28:45
 */
@Configuration
public class SensitiveWordConfig {

    /**
     * 初始化引导类
     *
     * @return 初始化引导类
     * @since 1.0.0
     */
    @Bean(value = "sensitiveWordBsBean")
    public SensitiveWordBs sensitiveWordBs() {
        // 设置系统默认敏感词
        return SensitiveWordBs.newInstance().wordDeny(new CustomWordDeny()).wordAllow(new CustomWordAllow()).init();
    }

}

 自定义敏感词黑名单

/**
 * 自定义敏感词黑名单
 * 
 * @author 一个肥鲇鱼
 * @date 2023-09-08 14:59:51
 */
public class CustomWordDeny implements IWordDeny {

    /**
     * 拒绝出现的数据-返回的内容被当做是敏感词
     *
     * @return
     */
    @Override
    public List deny() {
        // 可以获取数据库数据或文件内容
        return Lists.newArrayList("卧槽", "我草");
    }

}

  自定义敏感词白名单

/**
 * 自定义敏感词白名单
 * 
 * @author 一个肥鲇鱼
 * @date 2023-09-08 15:07:01
 */
public class CustomWordAllow implements IWordAllow {

    /**
     * 允许的内容-返回的内容不被当做敏感词
     * 
     * @return
     */
    @Override
    public List allow() {
        // 可以获取数据库数据或文件内容
        return Lists.newArrayList("草", "小草");
    }

}

   测试

    @Autowired
    @Qualifier(value = "sensitiveWordBsBean")
    private SensitiveWordBs sensitiveWordBs;

    @PostMapping("/testSensitive")
    public void testSensitive(String str) {
        System.out.println(sensitiveWordBs.contains(str));
    }

ps:数据库词库可私信我,有一份比较基本的词库可以分享给大家

        官方地址:sensitive-word

你可能感兴趣的:(SpringBoot,开发语言,java,spring,boot)