发布时间:2026-01-15
浏览次数:0
https://.com/houbb/-word
在Java领域里,-word是一个具备强大功能的敏感词过滤框架,它能够提供基础的敏感词检测功能sublime text replace,并且支持单词标签分类分级,支持繁简体互换,支持全角半角互换sublime text replace,可以进行汉字转拼音,还具备模糊搜索等高级特性。
它的核心特性如下:
1 基础使用
com.github.houbb
sensitive-word
0.29.2
作为敏感词的工具类,核心方法如下:
示例代码:
导入,来自,名为,github上的,houbb这个用户的,sensitive.word核心模块里的,SensitiveWordHelper这个类 。
public class BasicExample {
公开静态无效让主要方法在括号里带着字符串数组参数 ,这个括号是小括号,里面是中括号,中括号里是另一种括号 ,这种括号是方括号,方括号里。
存在这样一个文本,它是用于测试的,其中包含着不良内容,不良内容涵盖了赌博以及毒品等方面,文本表述为“这是一个包含赌博和毒品等不良内容的测试文本” 。
// 检测是否包含敏感词
要判定是否存在敏感内容,是依靠敏感词辅助工具来明确文本里是否包含敏感词,以此得出一个布尔值结果,即是否有敏感内容 。
System.out.println("是否包含敏感词: "), System.out.println(hasSensitive);。
// 查找所有敏感词
List对敏感词进行查找的操作,是通过敏感词助手类里的查找全部方法,针对文本内容来展开的,最终将结果赋值给敏感度词汇变量 。
将 “发现的敏感词: ” 与敏感词连接起来,通过System.out执行打印输出操作。
// 替换敏感词
存在一个字符串,它被命名为cleanedText,这个cleanedText是通过SensitiveWordHelper将text进行替换后得到的。
我们将其输出,输出的内容当中,有这样的部分,是“清洗后文本: ”,还有一部分呢,是cleanedText,将这两部分连接起来进行输出 。
// 使用指定字符替换
获取一个字符串对象,表示替换之后的内容,该内容是通过调用敏感词帮助类的替换方法,将指定文本中的敏感词替换为星号得到的 。
System.out.println("自定义替换: "), System.out.write(SystemCharacterEncoder.encode(customReplaced)), System.out.println()。
}
}
执行结果:
2 特殊处理
对于 -word 而言,为了把敏感词命中率提升到尽可能的程度,针对各种各样的情况,开展了处理工作。
1、忽略大小写
设置一个最终的字符串,其值为“fuCK the bad words.”,句号。
定义一个名为word的字符串,其值是通过敏感词助手在文本中查找得到的第一个敏感词加半角分号。
校验断言相等,将“fuCK”,与单词“word”进行这种校验 判断 ,使其相等 。
2、忽略圆角半角
将“fuck the bad words.”赋值于,一个被命名为text的,在程序里被定义为final类型的,始终不可被更改的,字符串变量 。
String word = SensitiveWordHelper.findFirst(text);
把“fuck”同“word”进行比较,来判断二者相等与否 ,以此来进行断言 。
3、忽略数字的写法
最后的那个定义为常量字符串类型被赋予这样的值:“这个是我的微信:众多表意字符组合在一起构成的类似微信号一串字符,其中包含数字、圆圈、括号、四方或六角括号以及其他符号的混合串”。
ListwordList等于,SensitiveWordBs的newInstance方法创建的实例,调用enableNumCheck方法并传入true,再调用init方法,最后调用findAll方法并传入text 。
使得断言相等,将“[9⓿二肆⁹₈③⑸⒋㈤㊄]”,与单词列表转换为字符串后的结果进行比较 。
4、忽略繁简体
终结性的字符串文本被设定为,“我喜爱我的国家以及五星红旗。” 。
ListwordList,等于,SensitiveWordHelper,去全部找出,文中的敏感词,所得到的结果,句号。
断言.assertEquals("[五星紅旗]", 单词列表.toString()); ,有这样的情况发生,标点符号的使用是否符合整体的表达意图?句末标点为句号。
5、忽略英文的书写格式
最终,字符串被定义为,“Ⓕⓤc⒦ 那有害的话语” ,形成了名为text的一个常量 。
List wordList = SensitiveWordHelper.findAll(text);
将“[Ⓕⓤc⒦] ”,判定为与“wordList.toString()”相等 ,这一行为 ,被人们断言 ,是合理的 。
6、忽略重复词
最后,定义一个字符串,其内容是“ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦ 那些不好的词汇”。
ListwordList被赋值给通过调用SensitiveWordBs的newInstance方法所返回的结果 。
.ignoreRepeat(true)
.init()
.findAll(text);
应该使用断言来检查.assertEqual方法,将字符串 "[ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦]" 与wordList转换为字符串后的结果进行比较,以此来判断两者是否相等,句号。
3 更多检测策略
- word对数字,邮箱,URL,ipv4,有着多种检测策略 。
示例代码:
公共类,敏感词快速演示类,称为,敏感词快速演示类{ }。
public static void main(String[] args) {
// 邮箱检测
有这样一个字符串,它叫做text1,其内容是,楼主好人,邮箱是sensitiveword@xx.com 。
ListemailWords等于,SensitiveWordBs实例中新创建的,这样一种情况 。
.enableEmailCheck(true)
.init()
.findAll(text1);
System.out.println("邮箱检测: "), System.out.println(emailWords);。
// 数字检测
有这样一个字符串,它被命名为text2,其内容是,你懂得,之中包含着这样一串字符,12345678。
List“numWords”等于“ SensitiveWordBs”新创建的实例,。
.enableNumCheck(true)
.init()
.findAll(text2);
打印输出,内容为,“数字检测: ”加上,numWords,句号。
// URL 检测
呈现这样一个字符串,它是text3 ,其内容为点击链接,链接是https://www.baidu.com ,通过此链接查看答案,当然,链接也能够是baidu.com ,亦可以是www.baidu.com 。
ListurlWords等于一个通过调用SensitiveWordBs的newInstance方法所获取到的结果,。
.enableUrlCheck(true)
对单词检查的网址进行操作,该操作依据单词检查中无前缀这一网址情形来开展,句号在其中,有此操作。
.init()
.findAll(text3);
系统输出打印,那表达式表述为,获取到的网址词汇,在双引号之内,与URL检测字样相连,中间插入连接符号加号,而后输出打印的内容是什么呢。
// IPv4 检测
如果个人网站的网址不能打,那么可以去访问 127.0.0.1 ,这是一段文本 。,它被存储在名为 text4 的字符串里 。
ListipWords等于,通过调用newInstance方法,创建的SensitiveWordBs的新实例 。
.enableIpv4Check(true)
.init()
.findAll(text4);
System.out.println("IPv4检测: "), System.out.println(ipWords);。
}
}
显示结果:
4 优雅 API
为了让使用更加优雅,统一使用 -api 的方式定义。
用户可以使用 进行如下定义:
留意一下,在进行配置之后,需要去运用我们新定义的对象,并非之前所使用的工具方法,工具方法的配置全都是默认状态的。
公开的类,名为高级示例,包括左花括号,紧接着是右花括号,其中设置了一个名为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()所得到的结果,。
该 .wordChecks调用的结果由函数参数中的Url通过一个名为WordChecks的对象的子函数(该子函数名为url)来提供,然后这个结果被用于另一个名为wordCheckUrl的函数。
对IPV4进行单词检查,通过单词检查中的ipv4这项。 ,句号表示操作此进程 .且调用单词检查中的ipv4这项来完成上述这句代码所表达的功能 。 ,并以此来实现。
调用,通过参数为 “WordChecks.word()” 的方式,来执行 “.wordCheckWord” 这个操作 。
.numCheckLen(8)
.wordTag(WordTags.none())
调用.charIgnore方法,传入SensitiveWordCharIgnores.defaults() ,。
按照.wordResultCondition(WordResultConditions.从不为假())的方式,以一种总是为真的状态,通过.wordResultCondition(WordResultConditions.永远是真())来实现。
.init();
到头来,那字符串文本是这般表述的,五星红旗迎着风猎猎飘扬,毛主席的画像稳稳地矗立在天安门前边儿。
其将文本输出到控制台,用于判断文本是否被包含在单词集合之中,该单词集合是通过特定方式构建的,构建完成后,通过调用特定方法在此集合中查找文本是否存在,若存在则返回真,。
将System.out.println(wordBs找到的text中的首个元素输出,把该项操作以打印出的形式呈现出来。)。
}
}
5 定义词库01 新增删除敏感词
初始化之后,-word 支持对单个词的新增/删除。
示例代码:
最终的,字符串,文本,等于,双引号括起来的,测试一下,新增出来的,敏感的,词汇,验证一下,删除这个动作,以及,新增这个行为,是否,正确,标点符号。
在“敏感词类”中,存在着这样的情况,即声明了一个“敏感词类”类型的变量,变量名为“敏感词类。
SensitiveWordBs.newInstance()
执行让允许的单词处于空的这种状态的操作 ,对此予以实施。 (该表达式可以分解为类似这样语义的多个小分句来理解,原始代码中的。
.wordDeny(WordDenys.empty())
.init();
// 当前
执行断言操作,将期望的结果设为"[]",把敏感词集合在文本中查找后得到的结果转换为字符串形式,进行两者相等性的判断。
// 新增单个
单词“测试”被添加到敏感词集合sensitiveWordBs之中 ,。
将“新增”这个词汇,添加到sensitiveWordBs里面,使其成为其中的一个词项 。
要断言相等的内容是,敏感词集合.findAll(文本).toString() 的结果,其结果是 "[测试, 新增, 新增]":Assert.assertEquals( "[测试, 新增, 新增]", sensitiveWordBs.findAll(text).toString()); 。
// 删除单个
“sensitiveWordBs”所具备的“removeWord”这个行为将“新增”这个词汇或者表述给移除掉了,。
调用 Assert 的 assertEquals 方法来进行比较,将敏感词集合 sensitiveWordBs 针对文本进行查找后得到的所有内容转换为字符串后的结果,与 "[测试]" 进行比较 。
sensitiveWordBs,将“测试”这个词移除掉使用 removeWord 方法 。 ,。
Assert.assertEquals("[]", sensitiveWordBs.findAll(text).toString());
// 新增集合
将“新增”,“测试”,通过Arrays.asList的方式添加到sensitiveWordBs 里的addWord 方法中 。
Assert.assertEquals("[测试, 新增, 新增]", sensitiveWordBs.findAll(text).toString());
// 删除集合
敏感词集合Bs里,移除掉,由数组.asList所构成列表之中,“新增”跟“测试”这两个词儿 。
Assert.assertEquals("[]", sensitiveWordBs.findAll(text).toString());
// 新增数组
进行敏感词添加操作,将 “新增” 一词增添进入,把 “测试” 添加进去 。
Assert.assertEquals("[测试, 新增, 新增]", sensitiveWordBs.findAll(text).toString());
// 删除集合
sensitiveWordBs把“新增”这个词语 从指定范围里除掉,“测试”这个词语 也从指定范围里除掉 。
Assert.assertEquals("[]", sensitiveWordBs.findAll(text).toString());
02 自定义词库来源(数据库 / 接口)
我们能够达成接口,用以达到扩展的目的,比如说去从数据库之中获取敏感词汇,进而达成实现着自定义词库的功效。
公开类,自定义字典示例,具有这样的一个类 ,名为 ,自定义字典示例类 ,其类名为 ,公开类 ,名为 ,自定义字典示例。
public static void main(String[] args) {
SensitiveWordBs wordBs = SensitiveWordBs.newInstance()
.wordDeny(new IWordDeny() {
@Override
public List deny() {
// 这里可以从数据库查询
将“勇哥”、“敏感词A”、“敏感词B”,以列表形式返回,这个列表由Arrays.asList生成 。,。
}
})
.init();
进行输出操作,输出语句为System.out.println,输出内容是对wordBs进行查全行为后所产生的值,查全行为目标是查找字符串这是一个敏感词A的测试 ,标点符号为分号。
}
}
6 整合
当我们有着,要于项目内部,去运用敏感词实施文本过滤的需求之际,能够对敏感词引导类予以定义。
示例见如下代码:
@Configuration
公共类,名为何 spring 敏感词配置,其中 config 是其构成部分 。
@Autowired
私有的,名为MyDdWordAllow的变量,用于存储名为myDdWordAllow的具体内容。, 这是一个特定的设置, 它具备特定的用途,。
@Autowired
私有的,名为MyDdWordDeny的,对象myDdWordDeny 。
/**
* 初始化引导类
* @return 初始化引导类
* @since 1.0.0
*/
@Bean
将公众敏感字词基础服务进行实例化,使其成为敏感字词基础服务对象,请问是否能够这样操作呢,你当前所询问的这个方法,它的作用是不是就是返回这样一个敏感字词基础服务对象。
创建一个名为sensitiveWordBs的对象,此对象通过调用SensitiveWordBs类的newInstance方法来获取,sensitiveWordBs对象属于SensitiveWordBs类型 。
调用.wordAllow方法,该方法的参数是WordAllows.chains方法的返回值,而WordAllows.chains方法的参数是WordAllows.defaults方法的返回值以及myDdWordAllow 。
.wordDeny(myDdWordDeny)
// 各种其他配置
.init();
return sensitiveWordBs;
}
}
7 敏感词控制台
- word - admin 是和 - word 搭配使用的控制台,它是控制台,是用于配套使用的控制台 。
参考文章:
https://cloud..com//news/
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码