sensitive-word
平時工作中,只要涉及到用戶可以自由發言(博客、文檔、論壇),就要考慮內容的敏感性處理。
sensitive-word 基於 DFA 算法實現的高性能敏感詞工具。工具使用 java 實現,幫助我們解決常見的問題。
特性
-
6W+ 詞庫,且不斷優化更新
-
基於 DFA 算法,性能較好
-
基於 fluent-api 實現,使用優雅簡潔
-
支持敏感詞的判斷、返回、脫敏等常見操作
-
支持全角半角互換
- 支持英文大小寫互換
快速開始
準備
-
JDK1.7+
- Maven 3.x+
Maven 引入
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sensitive-word</artifactId>
<version>0.0.4</version>
</dependency>
api 概覽
SensitiveWordBs
作爲敏感詞的引導類,核心方法如下:
方法 | 參數 | 返回值 | 說明 |
---|---|---|---|
newInstance() | 無 | 引導類 | 初始化引導類 |
contains(String) | 待驗證的字符串 | 布爾值 | 驗證字符串是否包含敏感詞 |
findAll(String) | 待驗證的字符串 | 字符串列表 | 返回字符串中所有敏感詞 |
replace(String, char) | 使用指定的 char 替換敏感詞 | 字符串 | 返回脫敏後的字符串 |
replace(String) | 使用 * 替換敏感詞 |
字符串 | 返回脫敏後的字符串 |
使用實例
所有測試案例參見 SensitiveWordBsTest
判斷是否包含敏感詞
final String text = "五星紅旗迎風飄揚,毛主席的畫像屹立在天安門前。";
Assert.assertTrue(SensitiveWordBs.newInstance().contains(text));
返回第一個敏感詞
final String text = "五星紅旗迎風飄揚,毛主席的畫像屹立在天安門前。";
String word = SensitiveWordBs.newInstance().findFirst(text);
Assert.assertEquals("五星紅旗", word);
返回所有敏感詞
final String text = "五星紅旗迎風飄揚,毛主席的畫像屹立在天安門前。";
List<String> wordList = SensitiveWordBs.newInstance().findAll(text);
Assert.assertEquals("[五星紅旗, 毛主席, 天安門]", wordList.toString());
默認的替換策略
final String text = "五星紅旗迎風飄揚,毛主席的畫像屹立在天安門前。";
String result = SensitiveWordBs.newInstance().replace(text);
Assert.assertEquals("****迎風飄揚,***的畫像屹立在***前。", result);
指定替換的內容
final String text = "五星紅旗迎風飄揚,毛主席的畫像屹立在天安門前。";
String result = SensitiveWordBs.newInstance().replace(text, '0');
Assert.assertEquals("0000迎風飄揚,000的畫像屹立在000前。", result);
更多特性
後續的諸多特性,主要是針對各種針對各種情況的處理,儘可能的提升敏感詞命中率。
這是一場漫長的***之戰。
忽略大小寫
final String text = "fuCK the bad words.";
String word = SensitiveWordBs.newInstance().findFirst(text);
Assert.assertEquals("fuCK", word);
忽略半角圓角
final String text = "fuck the bad words.";
String word = SensitiveWordBs.newInstance().findFirst(text);
Assert.assertEquals("fuck", word);
後期 road-map
-
數字的轉換處理
-
繁簡體互換
-
重複詞
-
停頓詞
-
拼音互換
-
用戶自定義敏感詞和白名單
-
文字鏡像翻轉
- 敏感詞標籤支持