溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java 實現(xiàn)敏感詞(sensitive word)工具詳解使用說明

發(fā)布時間:2020-05-30 16:34:30 來源:網絡 閱讀:129582 作者:葉止水ryo 欄目:編程語言

sensitive-word

平時工作中,只要涉及到用戶可以自由發(fā)言(博客、文檔、論壇),就要考慮內容的敏感性處理。

sensitive-word 基于 DFA 算法實現(xiàn)的高性能敏感詞工具。工具使用 java 實現(xiàn),幫助我們解決常見的問題。

特性

  • 6W+ 詞庫,且不斷優(yōu)化更新

  • 基于 DFA 算法,性能較好

  • 基于 fluent-api 實現(xiàn),使用優(yōu)雅簡潔

  • 支持敏感詞的判斷、返回、脫敏等常見操作

  • 支持全角半角互換

  • 支持英文大小寫互換

快速開始

準備

  • JDK1.7+

  • Maven 3.x+

Maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>sensitive-word</artifactId>
    <version>0.0.4</version>
</dependency>

api 概覽

SensitiveWordBs 作為敏感詞的引導類,核心方法如下:

方法 參數(shù) 返回值 說明
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);

更多特性

后續(xù)的諸多特性,主要是針對各種針對各種情況的處理,盡可能的提升敏感詞命中率。

這是一場漫長的***之戰(zhàn)。

忽略大小寫

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

  • 數(shù)字的轉換處理

  • 繁簡體互換

  • 重復詞

  • 停頓詞

  • 拼音互換

  • 用戶自定義敏感詞和白名單

  • 文字鏡像翻轉

  • 敏感詞標簽支持

拓展閱讀

敏感詞工具實現(xiàn)思路

DFA 算法講解

敏感詞庫優(yōu)化流程

停止詞的思考記錄

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI