当前位置: 首页 > news >正文

如果事先没有定义静态关系,在实际代码中,我们就需要提供一种使用动态关系的机制,让我们的查询、类型推断、DTO推断等能力得以正常使用。 ...

酶罢派缸1 基础使用

com.github.houbb

sensitive-word

0.29.2

SensitiveWordHelper 作为敏感词的工具类,核心方法如下:

示例代码:

import com.github.houbb.sensitive.word.core.SensitiveWordHelper;

public class BasicExample {

public static void main(String[] args) {

String text = "这是一个包含赌博和毒品等不良内容的测试文本";

// 检测是否包含敏感词

boolean hasSensitive = SensitiveWordHelper.contains(text);

System.out.println("是否包含敏感词: " + hasSensitive);

// 查找所有敏感词

List sensitiveWords = SensitiveWordHelper.findAll(text);

System.out.println("发现的敏感词: " + sensitiveWords);

// 替换敏感词

String cleanedText = SensitiveWordHelper.replace(text);

System.out.println("清洗后文本: " + cleanedText);

// 使用指定字符替换

String customReplaced = SensitiveWordHelper.replace(text, '*');

System.out.println("自定义替换: " + customReplaced);

}

}

执行结果:

2 特殊处理

sensitive-word 为了尽可能的提升敏感词命中率,针对各种各种情况做了处理。

1、忽略大小写

final String text = "fuCK the bad words.";

String word = SensitiveWordHelper.findFirst(text);

Assert.assertEquals("fuCK", word);

2、忽略圆角半角

final String text = "fuck the bad words.";

String word = SensitiveWordHelper.findFirst(text);

Assert.assertEquals("fuck", word);

3、忽略数字的写法

final String text = "这个是我的微信:9?二肆??③⑸⒋?㈤五";

List wordList = SensitiveWordBs.newInstance().enableNumCheck(true).init().findAll(text);

Assert.assertEquals("[9?二肆??③⑸⒋?㈤五]", wordList.toString());

4、忽略繁简体

final String text = "我爱我的祖国和五星紅旗。";

List wordList = SensitiveWordHelper.findAll(text);

Assert.assertEquals("[五星紅旗]", wordList.toString());

5、忽略英文的书写格式

final String text = "??c? the bad words";

List wordList = SensitiveWordHelper.findAll(text);

Assert.assertEquals("[??c?]", wordList.toString());

6、忽略重复词

final String text = "???f?u??c?? the bad words";

List wordList = SensitiveWordBs.newInstance()

.ignoreRepeat(true)

.init()

.findAll(text);

Assert.assertEquals("[???f?u??c??]", wordList.toString());

3 更多检测策略

sensitive-word 支持数字、邮箱、URL 、ipv4 多种检测策略。

示例代码:

public class SensitiveWordQuickDemo {

public static void main(String[] args) {

// 邮箱检测

String text1 = "楼主好人,邮箱 sensitiveword@xx.com";

List emailWords = SensitiveWordBs.newInstance()

.enableEmailCheck(true)

.init()

.findAll(text1);

System.out.println("邮箱检测: " + emailWords);

// 数字检测

String text2 = "你懂得:12345678";

List numWords = SensitiveWordBs.newInstance()

.enableNumCheck(true)

.init()

.findAll(text2);

System.out.println("数字检测: " + numWords);

// URL 检测

String text3 = "点击链接 https://www.baidu.com 查看答案,当然也可以是 baidu.com、www.baidu.com";

List urlWords = SensitiveWordBs.newInstance()

.enableUrlCheck(true)

.wordCheckUrl(WordChecks.urlNoPrefix())

.init()

.findAll(text3);

System.out.println("URL 检测: " + urlWords);

// IPv4 检测

String text4 = "个人网站,如果网址打不开可以访问 127.0.0.1。";

List ipWords = SensitiveWordBs.newInstance()

.enableIpv4Check(true)

.init()

.findAll(text4);

System.out.println("IPv4 检测: " + ipWords);

}

}

显示结果:

4 优雅 API

为了让使用更加优雅,统一使用 fluent-api 的方式定义。

用户可以使用 SensitiveWordBs 进行如下定义:

注意:配置后,要使用我们新定义的 SensitiveWordBs 的对象,而不是以前的工具方法。工具方法配置都是默认的。

public class AdvancedExample {

public static void main(String[] args) {

SensitiveWordBs wordBs = SensitiveWordBs.newInstance()

.ignoreCase(true)

.ignoreWidth(true)

.ignoreNumStyle(true)

.ignoreChineseStyle(true)

.ignoreEnglishStyle(true)

.ignoreRepeat(false)

.enableNumCheck(false)

.enableEmailCheck(false)

.enableUrlCheck(false)

.enableIpv4Check(false)

.enableWordCheck(true)

.wordFailFast(true)

.wordCheckNum(WordChecks.num())

.wordCheckEmail(WordChecks.email())

.wordCheckUrl(WordChecks.url())

.wordCheckIpv4(WordChecks.ipv4())

.wordCheckWord(WordChecks.word())

.numCheckLen(8)

.wordTag(WordTags.none())

.charIgnore(SensitiveWordCharIgnores.defaults())

.wordResultCondition(WordResultConditions.alwaysTrue())

.init();

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";

System.out.println(wordBs.contains(text));

System.out.println(wordBs.findFirst(text));

}

}

5 定义词库

01 新增删除敏感词

初始化之后,sensitive-word 支持对单个词的新增/删除。

addWord(word) 新增敏感词,支持单个词/集合

removeWord(word) 删除敏感词,支持单个词/集合

示例代码:

final String text = "测试一下新增敏感词,验证一下删除和新增对不对";

SensitiveWordBs sensitiveWordBs =

SensitiveWordBs.newInstance()

.wordAllow(WordAllows.empty())

.wordDeny(WordDenys.empty())

.init();

// 当前

Assert.assertEquals("[]", sensitiveWordBs.findAll(text).toString());

// 新增单个

sensitiveWordBs.addWord("测试");

sensitiveWordBs.addWord("新增");

Assert.assertEquals("[测试, 新增, 新增]", sensitiveWordBs.findAll(text).toString());

// 删除单个

sensitiveWordBs.removeWord("新增");

Assert.assertEquals("[测试]", sensitiveWordBs.findAll(text).toString());

sensitiveWordBs.removeWord("测试");

Assert.assertEquals("[]", sensitiveWordBs.findAll(text).toString());

// 新增集合

sensitiveWordBs.addWord(Arrays.asList("新增", "测试"));

Assert.assertEquals("[测试, 新增, 新增]", sensitiveWordBs.findAll(text).toString());

// 删除集合

sensitiveWordBs.removeWord(Arrays.asList("新增", "测试"));

Assert.assertEquals("[]", sensitiveWordBs.findAll(text).toString());

// 新增数组

sensitiveWordBs.addWord("新增", "测试");

Assert.assertEquals("[测试, 新增, 新增]", sensitiveWordBs.findAll(text).toString());

// 删除集合

sensitiveWordBs.removeWord("新增", "测试");

Assert.assertEquals("[]", sensitiveWordBs.findAll(text).toString());

02 自定义词库来源(数据库 / 接口)

我们可以实现接口 IWordDeny 来扩展,例如从数据库取敏感词,实现自定义词库。

public class CustomDictionaryExample {

public static void main(String[] args) {

SensitiveWordBs wordBs = SensitiveWordBs.newInstance()

.wordDeny(new IWordDeny() {

@Override

public List deny() {

// 这里可以从数据库查询

return Arrays.asList("勇哥", "敏感词A", "敏感词B");

}

})

.init();

System.out.println(wordBs.findAll("这是一个敏感词A 的测试"));

}

}

6 Spring 整合

当我们需要在 SpringBoot 项目中使用敏感词过滤文本时,可以定义敏感词引导类。

示例见如下代码:

@Configuration

public class SpringSensitiveWordConfig {

@Autowired

private MyDdWordAllow myDdWordAllow;

@Autowired

private MyDdWordDeny myDdWordDeny;

/**

* 初始化引导类

* @return 初始化引导类

* @since 1.0.0

*/

@Bean

public SensitiveWordBs sensitiveWordBs() {

SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()

.wordAllow(WordAllows.chains(WordAllows.defaults(), myDdWordAllow))

.wordDeny(myDdWordDeny)

// 各种其他配置

.init();

return sensitiveWordBs;

}

}

7 敏感词控制台

sensitive-word-admin 是和 sensitive-word 配套使用的控制台。

前端采用Vue、Element UI。

后端采用Spring Boot、Spring Security、Redis & Jwt。

权限认证使用Jwt,支持多终端认证系统。

支持加载动态权限菜单,多方式轻松权限控制。

高效率开发,使用代码生成器可以一键生成前后端代码。

http://www.jsqmd.com/news/440382/

相关文章:

  • 2026避坑指南:AI论文写作工具Top5硬核对比——从免费大纲到物理隔离Agent,博士该为哪一款买单? - 沁言学术
  • EBS:查询系统配置文件
  • 电缆损坏目标检测数据集(1300张图片已划分、已标注)| AI训练适用于目标检测任务
  • 我们是一家医美机构,想做AI精准获客,求推荐一家擅长医美行业的AI推广公司 - 品牌2026
  • 2026年 不锈钢加工厂家实力推荐榜:激光切割/折弯/冲孔/冲压/焊接/拉丝/压花/剪切,一站式精密加工解决方案 - 品牌企业推荐师(官方)
  • 技术原生型VS垂直专业型:2026年五大AI推广公司综合实力横评 - 品牌2026
  • 万字带你深度了解MQ消息队列
  • 知网降AI率:人工改写和嘎嘎降AI效果对比,差距不是一般大 - 还在做实验的师兄
  • 2026年 槽钢厂家推荐排行榜,镀锌槽钢/S355J0/AH36/Q355B/10#/S275/Q420/英标/欧标/日标槽钢,实力源头工厂精准供应 - 品牌企业推荐师(官方)
  • 医美机构想做AI精准获客,推荐几家擅长医美行业的AI推广公司 - 品牌2026
  • 机械制造企业AI获客指南:2026年垂直领域GEO服务商深度测评 - 品牌2026
  • tt: is ウクライナ unique for ロシャ?
  • 毕业论文被导师打回说AI率过高?3步搞定不用愁 - 还在做实验的师兄
  • 【开题答辩全过程】以 淮胜景区信息管理系统为例,包含答辩的问题和答案
  • 2026年AI智能营销推广服务商精选:五家北京企业深度解析 - 品牌2026
  • 2026年AI推广优化服务商综合实力解析:五家北京企业选型指南 - 品牌2026
  • 千问、豆包深度测评:NAD+、NMN前十品牌哪家强?盼生派NMN凭活性吸收稳坐榜首 - 速递信息
  • 记一次酣畅淋漓的js逆向
  • 2026年钢轨厂家实力推荐榜:P43铁路钢轨、外标钢轨、天车U型钢轨、单轨吊型轨、永洋/70MN/50MN轨道钢轨源头精选 - 品牌企业推荐师(官方)
  • 答辩前论文AI率突然飙高?过来人教你紧急处理 - 还在做实验的师兄
  • [python]基于动态实例的命令处理设计
  • Note - 决策单调性
  • 深度模糊多视图学习:FUML, 提升多视图分类的准确性与可靠性阅读笔记.19674907
  • 用DeepSeek写的论文怎么降AI率?最全攻略来了 - 还在做实验的师兄
  • LangChain框架入门:输出解析器使用技巧
  • 知网、万方、维普都能用的降AI工具推荐:一个工具搞定三大平台 - 还在做实验的师兄
  • 深度模糊多视图学习:FUML, 提升多视图分类的准确性与可靠性阅读笔记
  • 手动降AI和工具降AI到底哪个好?花了3天亲自对比 - 还在做实验的师兄
  • 若干贪心总结
  • 一文搞懂synchronized实现原理