一、起源
由于最近开发组要求开发一个圈子功能,这是一个说起来简单但又不简单的项目,这个项目的圈子模块给我从零开始实现,网上一大堆的博客系统,我本以为随意copy一个架构就好,但是发现事与愿违,网上没有看到是服务我们系统用户量的好架构,于是自己开始设计框架,设计的时候遇到一个问题,就是审核问题,由于审核涉及问题面之广泛,首先应该对特殊敏感词处理,再是内容对我们的商业价值体现,在敏感词方面找了一堆敏感词发现自己考虑的很是不全面,于是上开源平台找,最终发现一个还不错的项目。
二、sensitive-word 敏感词项目
这个工具功能强大,具体有多强大家使用就知道了,话不多说敏感词项目的地址如下:houbb/sensitive-word: 👮♂️The sensitive word tool for java.(敏感词/违禁词/违法词/脏词。基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。请勿发布涉及政治、广告、营销、翻墙、违反国家法律法规等内容。高性能敏感词检测过滤组件,附带繁体简体互换,支持全角半角互换,汉字转拼音,模糊搜索等功能。)
三、sensitive-word使用
具体使用我简单使用如下代码,具体更详细可以查看项目介绍那里。
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
import com.github.houbb.sensitive.word.core.SensitiveWordHelper;
import com.github.houbb.sensitive.word.support.result.WordResultHandlers;
public class TestAssert {
public static void main(String[] args) {
final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
// 判断是否含有敏感词
System.out.println(SensitiveWordHelper.contains(text));
// 查找第一个敏感词
System.out.println(SensitiveWordHelper.findFirst(text));
// 查看全部的敏感词
System.out.println(SensitiveWordHelper.findAll(text));
// 查看敏感词标签
System.out.println(SensitiveWordHelper.findAll(text, WordResultHandlers.wordTags()));
// 默认敏感词的替换策略
System.out.println(SensitiveWordHelper.replace(text));
// 指定敏感词替换策略
System.out.println(SensitiveWordHelper.replace(text, '0'));
// 更多特性
final String text1 = "fuCK the bad words.";
// 也支持英文敏感词
System.out.println(SensitiveWordHelper.contains(text1));
System.out.println(SensitiveWordHelper.findFirst(text));
// 测试全角识别
final String text2 = "fuck the bad words.";
System.out.println(SensitiveWordHelper.contains(text2));
System.out.println(SensitiveWordHelper.findFirst(text2));
// 支持各种符号数字识别
final String text3 = "这个是我的微信:9⓿二肆⁹₈③⑸⒋➃㈤㊄";
System.out.println(SensitiveWordBs.newInstance().enableNumCheck(true).init().findAll(text3));
// 忽略繁简体
final String text4 = "我爱我的祖国和五星紅旗。";
System.out.println(SensitiveWordHelper.findAll(text4));
// 忽略英文的书写格式
final String text5 = "Ⓕⓤc⒦ the bad words";
System.out.println(SensitiveWordHelper.findAll(text5));
// 忽略重复词
final String text6 = "ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦ the bad words";
System.out.println(SensitiveWordBs.newInstance()
.ignoreRepeat(true)
.init()
.findAll(text6));
// 邮箱等个人信息,默认未启用。
final String text7 = "楼主好人,邮箱 sensitiveword@xx.com";
SensitiveWordBs.newInstance().enableEmailCheck(true).init().findAll(text7);
}
}
执行结果如下图: