?? 19年之后由于某些原因斷更了三年,23年重新?lián)P帆起航,推出更多優(yōu)質(zhì)博文,希望大家多多支持~
?? 古之立大事者,不惟有超世之才,亦必有堅忍不拔之志
?? 個人CSND主頁——Micro麥可樂的博客
??《Docker實操教程》專欄以最新的Centos版本為基礎(chǔ)進行Docker實操教程,入門到實戰(zhàn)
??《RabbitMQ》本專欄主要介紹使用JAVA開發(fā)RabbitMQ的系列教程,從基礎(chǔ)知識到項目實戰(zhàn)
??《設(shè)計模式》專欄以實際的生活場景為案例進行講解,讓大家對設(shè)計模式有一個更清晰的理解
如果文章能夠給大家?guī)硪欢ǖ膸椭?!歡迎關(guān)注、評論互動~
前言
在網(wǎng)絡(luò)世界中,對于敏感詞匯的過濾是保障用戶體驗和維護網(wǎng)絡(luò)環(huán)境的一項基礎(chǔ)工作。常見的比如社交平臺、論壇、聊天應(yīng)用等場景,涉及到用戶言論都需要考慮內(nèi)容的敏感性處理,本文將為大家介紹一款GitHub
上開源好用的好用敏感詞工具sensitive-word
目前已經(jīng)有1.4KStar,項目地址 : https://github.com/houbb/sensitive-word
介紹sensitive-word
sensitive-word
是基于 DFA 算法實現(xiàn)的高性能敏感詞工具。目前敏感詞庫內(nèi)容收錄 6W+且不斷優(yōu)化更新。
特性
6W+ 詞庫,且不斷優(yōu)化更新
基于 fluent-api 實現(xiàn),使用優(yōu)雅簡潔
基于 DFA 算法,性能為 7W+ QPS,應(yīng)用無感
支持敏感詞的判斷、返回、脫敏等常見操作
支持常見的格式轉(zhuǎn)換
全角半角互換、英文大小寫互換、數(shù)字常見形式的互換、中文繁簡體互換、英文常見形式的互換、忽略重復詞等
支持敏感詞檢測、郵箱檢測、數(shù)字檢測、網(wǎng)址檢測等
支持自定義替換策略
支持用戶自定義敏感詞和白名單
支持數(shù)據(jù)的數(shù)據(jù)動態(tài)更新(用戶自定義),實時生效
支持敏感詞的標簽接口
支持跳過一些特殊字符,讓匹配更靈活
SpringBoot使用sensitive-word
在開發(fā)java項目中,想使用sensitive-word
其實非常簡單,只需要maven
引入依賴就可以當作一個工具類調(diào)用其方法即可使用
maven引入依賴
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sensitive-word</artifactId>
<version>0.12.0</version>
</dependency>
SensitiveWordHelper 作為敏感詞的工具類,核心方法如下:
接下來我們編寫相關(guān)測試類,來測試對應(yīng)方法
public class Test {
public static void main(String[] args) {
//是否有敏感詞存在
String text = "五星紅旗迎風飄揚,毛主席的畫像屹立在天安門前。";
Assert.assertTrue(SensitiveWordHelper.contains(text));
//返回第一個敏感詞
String word = SensitiveWordHelper.findFirst(text);
Assert.assertEquals("五星紅旗", word);
//返回所有敏感詞
List<String> wordList = SensitiveWordHelper.findAll(text);
Assert.assertEquals("[五星紅旗, 毛主席, 天安門]", wordList.toString());
//默認的替換策略
String result = SensitiveWordHelper.replace(text);
Assert.assertEquals("****迎風飄揚,***的畫像屹立在***前。", result);
//指定替換的內(nèi)容
String result = SensitiveWordHelper.replace(text, '0');
Assert.assertEquals("0000迎風飄揚,000的畫像屹立在000前。", result);
}
}
自定義替換策略
場景說明:有時候我們希望不同的敏感詞有不同的替換結(jié)果。比如【游戲】替換為【電子競技】,【失業(yè)】替換為【靈活就業(yè)】
/**
* 自定替換策略
* @since 0.2.0
*/
@Test
public void defineReplaceTest() {
final String text = "五星紅旗迎風飄揚,毛主席的畫像屹立在天安門前。";
ISensitiveWordReplace replace = new MyWordReplace();
String result = SensitiveWordHelper.replace(text, replace);
Assert.assertEquals("國家旗幟迎風飄揚,教員的畫像屹立在***前。", result);
}
public class MyWordReplace implements IWordReplace {
@Override
public void replace(StringBuilder stringBuilder, final char[] rawChars, IWordResult wordResult, IWordContext wordContext) {
String sensitiveWord = InnerWordCharUtils.getString(rawChars, wordResult);
// 自定義不同的敏感詞替換策略,可以從數(shù)據(jù)庫等地方讀取
if("五星紅旗".equals(sensitiveWord)) {
stringBuilder.append("國家旗幟");
} else if("毛主席".equals(sensitiveWord)) {
stringBuilder.append("教員");
} else {
// 其他默認使用 * 代替
int wordLength = wordResult.endIndex() - wordResult.startIndex();
for(int i = 0; i < wordLength; i++) {
stringBuilder.append('*');
}
}
}
}
我們針對其中的部分詞做固定映射處理,其他的默認轉(zhuǎn)換為 *
敏感詞工具類的優(yōu)缺點總結(jié)
優(yōu)點
- 高效性: 敏感詞的存儲和檢測采用了高效的數(shù)據(jù)結(jié)構(gòu)和算法,能夠在很短的時間內(nèi)完成檢測。
- 易擴展: Trie 樹的結(jié)構(gòu)使得添加、刪除敏感詞非常方便,同時 AC 自動機算法保證了高效的匹配。
缺點
文章來源:http://www.zghlxwxcb.cn/news/detail-804850.html
- 內(nèi)存占用: 敏感詞庫的存儲需要一定的內(nèi)存,隨著敏感詞數(shù)量的增加,內(nèi)存占用也會相應(yīng)增加。
結(jié)語
GitHub 上的 sensitive-word 工具類是一個功能強大且高效的敏感詞匯檢測工具。通過簡單的引入測試相信大家已經(jīng)使用方法有了一定了解,這樣我們可以在項目中更好地保障用戶信息的安全,維護良好的網(wǎng)絡(luò)環(huán)境文章來源地址http://www.zghlxwxcb.cn/news/detail-804850.html
到了這里,關(guān)于分享 GitHub 上的敏感詞匯工具類:sensitive-word的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!