美文网首页GitHub 中文社区
java 实现敏感词(sensitive word)工具详解使用

java 实现敏感词(sensitive word)工具详解使用

作者: 老马啸西风2020 | 来源:发表于2020-01-09 14:40 被阅读0次

    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 算法讲解

    敏感词库优化流程

    停止词的思考记录

    相关文章

      网友评论

        本文标题:java 实现敏感词(sensitive word)工具详解使用

        本文链接:https://www.haomeiwen.com/subject/grmyactx.html