极简版 Java 敏感词检测工具

文摘   2024-11-22 12:44   陕西  
今天我想跟大家聊点有趣又实用的东西:一个极简版的 Java 敏感词检测工具。这东西说实话,不管是做聊天系统还是内容审核,都是个绕不过去的坎儿。
想想看,咱们写个聊天平台,总不能让人发些“危险文字”吧?(程序员的“危险”,你懂的🤭)

一、先引入 Maven 依赖

咱先把工具装上车,这是最基本的操作了。你得先在 pom.xml 里加上下面的依赖:
<dependency>
    <groupId>com.example</groupId>
    <artifactId>sensitive-word-tool</artifactId>
    <version>1.0.0</version>
</dependency>
记得定期看下 Maven 中心仓库 的最新版本,这个版本控制说白了就是打补丁。版本号不看?一不小心就踩坑,线上崩了锅,还得自己背锅!😅

二、核心方法使用实例

接下来就是“玩转方法”环节。工具的 API 很清晰,属于上手就会的类型,但要想玩明白,还得知道这些核心功能:

1. 查找和替换功能

工具支持以下几种操作:
  • 检查敏感词是否存在:
SensitiveTool.contains("这是一个敏感词示例"); // 返回 true 或 false
这是最简单的用法,输入字符串,它就告诉你有没有敏感词,适合先跑个“初筛”。
  • 替换敏感词:
String result = SensitiveTool.replace("这里有敏感词"'*');
System.out.println(result); // 输出:这里有**
这种用法可以直接用指定字符替换敏感词。* 替换还挺常见,某宝某站某厂基本都这么干。
  • 自定义替换策略:
String result = SensitiveTool.replace("敏感词示例", word -> "[屏蔽]");
System.out.println(result); // 输出:[屏蔽]示例
可以灵活地自定义替换逻辑,比如把敏感词替换成 [屏蔽]。如果 PM 突发奇想想要换个替换符号(比如🌟),就完全没问题。
  • 查找所有敏感词:
List<String> words = SensitiveTool.findAll("这是一个敏感词测试");
System.out.println(words); // 输出:[敏感词]
这个适合那些想精准控制的场景,比如需要高亮标注敏感词位置的功能。

2. 忽略检测规则

你是不是也遇到过“马大哈式的用户输入”?比如有人喜欢乱加空格、写繁体字、掺点英文啥的?这工具有一招很厉害,叫“忽略检测规则”:
  • 大小写忽略:
SensitiveTool.setIgnoreCase(true); // 不区分大小写
SensitiveTool.contains("SensitiveWord"); // true
  • 特殊字符忽略:
SensitiveTool.setIgnoreSpecialChars(true); // 忽略标点等特殊字符
SensitiveTool.contains("敏感.词!"); // true
  • 简繁体混合检测:
SensitiveTool.setIgnoreSimplifiedTraditional(true);
SensitiveTool.contains("敏感詞"); // true

三、自定义检测策略

这工具还有个亮点——支持用户自定义检测策略。如果你需要更复杂的逻辑(比如分级过滤、按词性过滤等),可以直接继承 ISensitiveWordReplace 接口。

1. 替换特定词汇:

String result = SensitiveTool.replace("敏感词示例", word -> {
    if ("敏感词".equals(word)) {
        return "[警告]";
    }
    return "[屏蔽]";
});
System.out.println(result); // 输出:[警告]示例
这里我写了一个简单的例子,检查到“敏感词”时返回 [警告],其他的词用 [屏蔽]。这不就是一个简易的分级策略嘛!

2. 检测规则扩展:

比如要检测邮箱、网址、IPv4 地址等内容,这里可以直接加规则:
SensitiveTool.addRule(new EmailDetectRule());
SensitiveTool.addRule(new UrlDetectRule());
SensitiveTool.addRule(new IPDetectRule());
有了这些规则,你就能识别以下情况:
  • 检测邮箱:example@example.com
  • 检测网址:https://example.com
  • 检测 IPv4 地址:192.168.0.1
而且这些规则全都可以定制,灵活性满分!🤩

四、代码实例和输出结果

既然说了这么多,咱们就跑个例子看看效果。

代码示例:

public class SensitiveToolDemo {
    public static void main(String[] args) {
        // 设置忽略规则
        SensitiveTool.setIgnoreCase(true);
        SensitiveTool.setIgnoreSpecialChars(true);
        
        // 测试字符串
        String text = "敏感词,SensitiveWord! 演示123";
        
        // 检测敏感词
        boolean hasSensitiveWord = SensitiveTool.contains(text);
        System.out.println("是否包含敏感词: " + hasSensitiveWord);
        
        // 替换敏感词
        String replaced = SensitiveTool.replace(text, '*');
        System.out.println("替换结果: " + replaced);
        
        // 查找所有敏感词
        List<String> sensitiveWords = SensitiveTool.findAll(text);
        System.out.println("敏感词列表: " + sensitiveWords);
    }
}

输出结果:

是否包含敏感词: true
替换结果: **,SensitiveWord! 演示123
敏感词列表: [敏感词]
看到了吧?上手是真的简单,功能也不含糊,甚至还能拓展规则。感觉这工具如果稍微包装一下,还能拿去做个小项目上线呢!😎

五、应用场景

这玩意儿特别适合以下场景:
  1. 聊天内容审核:确保用户发言符合社区规范。
  2. 文本过滤:比如博客评论、用户昵称的审核。
  3. 特殊内容检测:检测敏感信息,比如手机号、邮箱等。
所以,我觉得,不管是做内容审核的小伙伴,还是想玩点高级过滤的开发者,这工具都能满足需求。写点代码,跑个测试,说不定还能省下一杯奶茶钱呢!☕
项目开源地址:https://github.com/houbb/sensitive-word

-END-


ok,今天先说到这,老规矩,给大家分享一份不错的副业资料,感兴趣的同学找我领取。

以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言

程序员老鬼
10年+老程序员,专注于AI知识普及,已打造多门AI课程,本号主要分享国内AI工具、AI绘画提示词、Chat教程、AI换脸、Chat中文指令、Sora教程等,帮助读者解决AI工具使用疑难问题。
 最新文章