sensitive-word实现敏感词处理

sensitive-word实现敏感词处理

起男 46 2025-05-01

sensitive-word实现敏感词处理

sensitive-word是一个基于DFA(确定有限状态自动机)算法实现的高性能敏感词过滤工具

依赖

        <dependency>
            <groupId>com.github.houbb</groupId>
            <artifactId>sensitive-word</artifactId>
            <version>0.21.0</version>
        </dependency>

常用API

        String s = "我爱毛主席,中华人民共和国";
        //检查是否包含敏感词
        boolean b = SensitiveWordHelper.contains(s);
        System.out.println(b);
        //查找第一个敏感词
        String first = SensitiveWordHelper.findFirst(s);
        System.out.println(first);
        //列出所有敏感词
        List<String> all = SensitiveWordHelper.findAll(s);
        System.out.println(all);
        //敏感词替换
        String replace = SensitiveWordHelper.replace(s);
        System.out.println(replace);

自定义配置

SensitiveWordBs wordBs = SensitiveWordBs.newInstance()
    // 使用默认的敏感词词库(黑名单)
    .wordDeny(WordDenys.defaults())
    // 使用默认的白名单词库,白名单中的词不会被视为敏感词,即使它们在黑名单中
    .wordAllow(WordAllows.defaults())
    // 忽略大小写,例如:"FuCk" 和 "fuck" 将被同等对待
    .ignoreCase(true)
    // 忽略全角和半角字符的区别,例如:"fuck" 和 "fuck" 将被同等对待
    .ignoreWidth(true)
    // 启用连续数字检测, 可用于检测电话号码、QQ号等
    .enableNumCheck(true)
    // 启用邮箱地址检测,可用于过滤包含邮箱地址的文本
    .enableEmailCheck(true)
    // 初始化敏感词过滤器, 这一步必须在所有配置完成后调用
    .init();

// 使用配置好的过滤器检查文本是否包含敏感词
boolean contains = wordBs.contains(text);

自定义敏感词库

        SensitiveWordBs bs = SensitiveWordBs.newInstance()
                .wordDeny(new IWordDeny() {
                    @Override
                    public List<String> deny() {
                        return List.of("dqn");
                    }
                }).init();
        String s = "我是dqn";
        String first = bs.findFirst(s);
        System.out.println(first);