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前。", 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)工具详解使用说明相关推荐

  1. java判断敏感词_Java实现敏感词检测的代码详解

    [Java]代码 import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.ut ...

  2. 嵌入层(Embedding Layer)与词向量(Word Embedding)详解

    文章目录 常见的语言表示模型 词向量与Embedding区分 Embedding层--keras中的one-hot映射为 向量的层:词向量(word embedding)--一种语言模型表示方法 分布 ...

  3. Java实现敏感词过滤 - IKAnalyzer中文分词工具

    IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...

  4. Java实现敏感词过滤

    敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...

  5. Java定时任务调度工具详解之Timer篇

    Java定时任务调度工具详解之Timer篇 https://segmentfault.com/a/1190000009542398

  6. Java定时任务工具详解之Timer篇

    Java定时任务调度工具详解 什么是定时任务调度? ◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Java中的定时调度工具? ◆ Timer ◆Quartz Timer和Q ...

  7. 用java写敏感词过滤器的代码

    用java写敏感词过滤器的代码 这里采用动态代理,所以要创建proxy代理对象,利用代理,来增强某些方法(getParameter方法.getParameterMap方法.getParameterVa ...

  8. Java实现敏感词过滤双向词库完美跳过24口交换机

    Java实现敏感词过滤jar包3.0版本发布,采用双向词库,当检索语句中敏感词交错在正向词库中时,比较词汇level,如果正向词汇的level大于敏感词的level,则跳过此敏感词.完美过滤,&quo ...

  9. Jmeter压测工具详解

    Jmeter压测工具详解 1. Jmeter概述 1.1 Jmeter简介 1.2 Jmeter适用场景 2. Jmeter安装配置 2.1 下载安装 2.2 环境配置(可不配) 2.3 Jmeter ...

最新文章

  1. springboot redis
  2. 孙正义看科技未来:今后30年要把钱和精力投向哪里
  3. 测试过程之过分关注功能性测试
  4. 4.4 Triplet 损失
  5. idea中git回退远程仓库版本
  6. 兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素
  7. (三维偏序)陌上花开
  8. 如何手动安装wxpython_如何在Ubuntu中安装wxPython的方法及命令
  9. 8 9区别 endnote7_EndNote_9__简明教程_中文版
  10. js播放Amr音频_Mp3转Amr
  11. Microsoft.VisualBasic.dll的妙用(开发中肯定会用到哦)
  12. 赵小楼《天道》《遥远的救世主》深度解析(82)有信无证是谓魔,有信有证是谓佛。无无明,无忧恐惧,尘归尘土归土,一往无前,无可阻挡。
  13. 论华为云的气质与修养
  14. netlogon启动后停止_【通告更新】漏洞EXP已流出,影响巨大,微软NetLogon权限提升漏洞安全风险通告第三次更新...
  15. Android studio调取支付宝健康码
  16. 2020最新最好看的热门动漫电影推荐
  17. 接口文档应该如何编写
  18. mitmproxy 抓包神器-1.环境准备与抓取浏览器请求
  19. 计算机专业大创要求,“大创项目”推动计算机专业学生创新实践能力的提高
  20. 论文解读:PF磷酸:基于机器学习的磷酸化位点预测疟原虫蛋白的工具

热门文章

  1. 二十多年的单身生活怎么破?
  2. 后台或者锁屏播放音乐播放,
  3. AMD(异步执行)和CMD (同步执行)之间的区别是什么?
  4. 1❤️Jenkins从零到壹❤️ :安装svn插件和maven插件(JAVA 小虚竹)
  5. 如何查看Ubuntu版本号
  6. 算法基础课:第一讲——基础算法
  7. (简单)华为畅玩6A DLI-AL10的USB调试模式在哪里打开的经验
  8. 我的世界java版怎么找史莱姆区块_Minecraft我的世界中如何找到史莱姆
  9. C语言学习(八)整数(int、short、long)的具体介绍、不同进制表示、输出,sizeof、unsinged的使用
  10. amazon - business 之 references link market