忽略字符
說明
我們的敏感詞一般都是比較連續的,比如 傻帽
那就有大聰明發現,可以在中間加一些字符,比如【傻!@#$帽】跳過檢測,但是罵人等攻擊力不減。
那么,如何應對這些類似的場景呢?
我們可以指定特殊字符的跳過集合,忽略掉這些無意義的字符即可。
v0.11.0 開始支持
例子
其中 charIgnore 對應的字符策略,用戶可以自行靈活定義。
final String text = "傻@冒,狗+東西";//默認因為有特殊字符分割,無法識別
List<String> wordList = SensitiveWordBs.newInstance().init().findAll(text);
Assert.assertEquals("[]", wordList.toString());// 指定忽略的字符策略,可自行實現。
List<String> wordList2 = SensitiveWordBs.newInstance().charIgnore(SensitiveWordCharIgnores.specialChars()).init().findAll(text);Assert.assertEquals("[傻@冒, 狗+東西]", wordList2.toString());
敏感詞標簽
說明
有時候我們希望對敏感詞加一個分類標簽:比如社情、暴/力等等。
這樣后續可以按照標簽等進行更多特性操作,比如只處理某一類的標簽。
支持版本:v0.10.0
入門例子
接口
這里只是一個抽象的接口,用戶可以自行定義實現。比如從數據庫查詢等。
public interface IWordTag {/*** 查詢標簽列表* @param word 臟詞* @return 結果*/Set<String> getTag(String word);}
配置文件
我們可以自定義 dict 標簽文件,通過 WordTags.file() 創建一個 WordTag 實現。
- dict_tag_test.txt
五星紅旗 政-治,國家
格式如下:
敏感詞 tag1,tag2
實現
具體的效果如下,在引導類設置一下即可。
默認的 wordTag 是空的。
String filePath = "dict_tag_test.txt";
IWordTag wordTag = WordTags.file(filePath);SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance().wordTag(wordTag).init();Assert.assertEquals("[政-治, 國家]", sensitiveWordBs.tags("五星紅旗").toString());;
后續會考慮引入一個內置的標簽文件策略。
更多資料
敏感詞控臺
有時候敏感詞有一個控臺,配置起來會更加靈活方便。
java 如何實現開箱即用的敏感詞控臺服務?
敏感詞標簽文件
梳理了大量的敏感詞標簽文件,可以讓我們的敏感詞更加方便。
這兩個資料閱讀可在下方文章獲取:
v0.11.0-敏感詞新特性
拓展閱讀
敏感詞工具實現思路
DFA 算法講解
敏感詞庫優化流程
java 如何實現開箱即用的敏感詞控臺服務?
各大平臺連敏感詞庫都沒有的嗎?
sensitive-word 敏感詞/臟詞開源工具-v.0.10.0-臟詞分類標簽支持
開源框架
sensitive-word