SensiCheck 是一款基于【AC自动机】算法实现的高性能敏感词工具。
为 荔知AI助手 提供一个高性能的、开箱即用的敏感词检测工具。
-
JDK17+
-
Maven 3.x+
<dependency>
<groupId>io.github.brath1024</groupId>
<artifactId>sensi-check</artifactId>
<version>0.0.1</version>
</dependency>
https://central.sonatype.com/artifact/io.github.brath1024/sensi-check
SensiCheckUtil
作为敏感词的工具类,核心方法如下:
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
check | String text | String | 单字符串检测,默认替换值为"*" |
check | String text, String replaceValue | String | 单字符串检测,自定义替换值 |
check | String text, SensiCheckType type | String | 单字符串检测,自定义过滤策略 |
check | String text, String replaceValue, SensiCheckType type | String | 单字符串检测,自定义替换值和过滤策略 |
multiStringChecks | List texts | List | 多字符串检测,默认替换值为"*",默认过滤策略为REPLACE |
multiStringChecks | List texts, SensiCheckType type | List | 多字符串检测,自定义过滤策略,默认替换值为"*" |
multiStringChecks | List texts, String replaceValue | List | 多字符串检测,自定义替换值,默认过滤策略为REPLACE |
multiStringChecks | List texts, String replaceValue, SensiCheckType type | List | 多字符串检测,自定义替换值和过滤策略 |
contains | String value | boolean | 字符串是否包含敏感词 |
list | ... | List | 列出所有敏感词 |
String text = "你妹的";
SensiCheckUtil.contains(text);
String text = "你妹的";
String check = SensiCheckUtil.check(text);
System.out.println(check);
Output:
**的
String text = "你妹的";
String check = SensiCheckUtil.check(text, "#");
System.out.println(check);
Output:
##的
String text = "你妹的";
String check = SensiCheckUtil.check(text, SensiCheckType.ERROR);
System.out.println(check);
Output:
SenException(message=文本内容检测到敏感词,已进行删除处理。为了维护社区网络环境,请不要出现带有敏感政治、暴力倾向、不健康色彩的内容! 可能涉及到的敏感词:[你妹]
, value=你妹的, code=0)
String text = "你#妹的,。";
String check = SensiCheckUtil.check(text);
System.out.println(check);
add to resources/mySenwords.txt
@Bean
public SensiHolder sensiHolder() {
return new SensiHolder("/mySenwords.txt");
}
处理器 12th Gen Intel(R) Core(TM) i5-1240P 1.70 GHz
机带 RAM 24.0 GB (23.7 GB 可用)
系统类型 64 位操作系统, 基于 x64 的处理器
测试数据:100+ 字符串,循环 100W 次
@Test
public void test1() {
String randomText = RandomUtil.randomString("1234567890bcdefghiJKLMNOPQRSTUVWXYZ你他妈的", 100);
long start = System.currentTimeMillis();
for (int i = 0; i < 100_0000; i++) {
SensiCheckUtil.check(randomText);
}
long end = System.currentTimeMillis();
System.err.println("------------------ COST: " + (end - start));
//------------------ COST: 1317
}
序号 | 场景 | 耗时 |
---|---|---|
1 | 敏感词,默认替换字符 | 1317ms,约 70W QPS |