最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot集成sensitive-word實現(xiàn)敏感詞過濾的兩種方案

 更新時間:2024年08月16日 15:24:40   作者:Mr朱墨  
敏感詞過濾通常是指從文本中檢測并移除或替換掉被認為是不適當、冒犯性或違反特定社區(qū)準則的詞匯,這篇文章主要介紹了springboot集成sensitive-word實現(xiàn)敏感詞過濾,需要的朋友可以參考下

敏感詞過濾

敏感詞過濾通常是指從文本中檢測并移除或替換掉被認為是不適當、冒犯性或違反特定社區(qū)準則的詞匯。這個過程常用于在線平臺、論壇、社交媒體和聊天系統(tǒng)等,以確保交流環(huán)境的健康和積極.

方案一:正則表達式

實現(xiàn)敏感詞過濾.只適合于敏感詞較少、文本量較少的場合,并且無法處理同音字、錯別字等,案例:

public static void main(String[] args) {
        String text = "這是一個包含敏感詞匯的文本,例如色情、賭博等。";
        String[] sensitiveWords = {"色情", "賭博"};
        for (String word : sensitiveWords) {
            text = filterSensitiveWords(text, word);
        }
        System.out.println("過濾后的文本: " + text);
        testSensitiveWordFrame();
    }
    /**
     * 方案一:正則表達式實現(xiàn)敏感詞過濾.只適合于敏感詞較少、文本量較少的場合,并且無法處理同音字、錯別字等.
     *
     * @param text
     * @param sensitiveWord
     * @return
     */
    public static String filterSensitiveWords(String text, String sensitiveWord) {
        Pattern pattern = Pattern.compile(sensitiveWord);
        Matcher matcher = pattern.matcher(text);
        return matcher.replaceAll("***");
    }

方案二:基于DFA算法的敏感詞過濾工具框架-sensitive-word

 * 6W+ 詞庫,且不斷優(yōu)化更新
 * 基于 DFA 算法,性能較好
 * 基于 fluent-api 實現(xiàn),使用優(yōu)雅簡潔
 * 支持敏感詞的判斷、返回、脫敏等常見操作
 * 支持全角半角互換
 * 支持英文大小寫互換
 * 支持數(shù)字常見形式的互換
 * 支持中文繁簡體互換
 * 支持英文常見形式的互換
 * 支持用戶自定義敏感詞和白名單
 * 支持數(shù)據(jù)的數(shù)據(jù)動態(tài)更新,實時生效

springboot集成sensitive-word

步驟一:引入pom

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

步驟二:自定義配置

@Configuration
public class MySensitiveWordBs {
    @Autowired
    private MyWordAllow myWordAllow;
    @Autowired
    private MyWordDeny myWordDeny;
    @Autowired
    private MyWordReplace myWordReplace;
    /**
     * 初始化引導類
     *
     * @return 初始化引導類
     * @since 1.0.0
     */
    @Bean
    public SensitiveWordBs sensitiveWordBs() {
        SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
//                .wordAllow(WordAllows.chains(WordAllows.defaults(), myWordAllow)) // 設(shè)置多個敏感詞,系統(tǒng)默認和自定義
//                .wordDeny(WordDenys.chains(WordDenys.defaults(), myWordDeny))     // 設(shè)置多個敏感詞,系統(tǒng)默認和自定義
                .wordAllow(WordAllows.chains(myWordAllow))  // 自定義
                .wordDeny(WordDenys.chains(myWordDeny))     // 自定義
                .wordReplace(myWordReplace)                                        // 自定義替換規(guī)則
                .ignoreCase(true)           // 忽略大小寫
                .ignoreWidth(true)          // 忽略半角圓角
                .ignoreNumStyle(true)       // 忽略數(shù)字的寫法
                .ignoreChineseStyle(true)   // 忽略中文的書寫格式
                .ignoreEnglishStyle(true)   // 忽略英文的書寫格式
                .ignoreRepeat(true)         // 忽略重復詞
                .enableNumCheck(true)       // 是否啟用數(shù)字檢測。默認連續(xù) 8 位數(shù)字認為是敏感詞
                .enableEmailCheck(true)     // 是有啟用郵箱檢測
                .enableUrlCheck(true)       // 是否啟用鏈接檢測
                .init();
        return sensitiveWordBs;
    }
}

步驟三:自定義敏感詞+白名單

/**
 * 自定義非敏感詞
 * 注意每一行為一個非敏感詞,單行不能只包括空格,否則,也會把空格識別為非敏感詞
 */
@Component
@Slf4j
public class MyWordAllow implements IWordAllow {
    @Override
    public List<String> allow() {
        List<String> allowWords = new ArrayList<>();
        try {
            ClassPathResource resource = new ClassPathResource("myAllowWords.txt");
            Path myAllowWordsPath = Paths.get(resource.getUrl().toURI());
            allowWords = Files.readAllLines(myAllowWordsPath, StandardCharsets.UTF_8);
        } catch (IOException ioException) {
            log.error("讀取非敏感詞文件錯誤:{}", ioException);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
        return allowWords;
    }
}
@Component
@Slf4j
public class MyWordDeny implements IWordDeny {
    @Override
    public List<String> deny() {
        List<String> denyWords = new ArrayList<>();
        try {
            ClassPathResource resource = new ClassPathResource("myDenyWords.txt");
            Path myAllowWordsPath = Paths.get(resource.getUrl().toURI());
            denyWords = Files.readAllLines(myAllowWordsPath, StandardCharsets.UTF_8);
        } catch (
                IOException ioException) {
            log.error("讀取敏感詞文件錯誤:{}", ioException);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
        return denyWords;
    }
}
/**
 * 自定義敏感詞對應的替換值.
 * 場景說明:有時候我們希望不同的敏感詞有不同的替換結(jié)果。比如【游戲】替換為【電子競技】,【失業(yè)】替換為【靈活就業(yè)】。
 */
@Configuration
public class MyWordReplace implements IWordReplace {
    @Override
    public void replace(StringBuilder stringBuilder, final char[] rawChars, IWordResult wordResult, IWordContext wordContext) {
        String sensitiveWord = InnerWordCharUtils.getString(rawChars, wordResult);
        if ("zhupeng".equals(sensitiveWord)) {
            stringBuilder.append("朱鵬");
        } else {
            // 其他默認使用 * 代替
            int wordLength = wordResult.endIndex() - wordResult.startIndex();
            for (int i = 0; i < wordLength; i++) {
                stringBuilder.append('-');
            }
        }
    }
}

步驟四:核心方法測試

public class SensitiveWordController {
    @Autowired
    private MyWordReplace myWordReplace;
    @Autowired
    private SensitiveWordBs sensitiveWordBs;
    private static final String text = "五星紅旗迎風飄揚,毛主席的畫像屹立在天安門前,zhuzhuhzu";
    @GetMapping("/pattern")
    public void testSensitiveWord2() {
        String text = "這是一個包含敏感詞匯的文本,例如色情、賭博等。";
        String[] sensitiveWords = {"色情", "賭博"};
        for (String word : sensitiveWords) {
            text = filterSensitiveWords(text, word);
        }
        System.out.println("過濾后的文本: " + text);
    }
    /**
     * 方案二:基于DFA算法的敏感詞過濾工具框架-sensitive-word:https://github.com/houbb/sensitive-word
     * 6W+ 詞庫,且不斷優(yōu)化更新
     * 基于 DFA 算法,性能較好
     * 基于 fluent-api 實現(xiàn),使用優(yōu)雅簡潔
     * 支持敏感詞的判斷、返回、脫敏等常見操作
     * 支持全角半角互換
     * 支持英文大小寫互換
     * 支持數(shù)字常見形式的互換
     * 支持中文繁簡體互換
     * 支持英文常見形式的互換
     * 支持用戶自定義敏感詞和白名單
     * 支持數(shù)據(jù)的數(shù)據(jù)動態(tài)更新,實時生效
     */
    @GetMapping("/filter")
    public void testSensitiveWord() {
        System.out.println("SensitiveWordHelper.contains(text) = " + SensitiveWordHelper.contains(text));
        System.out.println("SensitiveWordHelper.findAll(text) = " + SensitiveWordHelper.findAll(text));
        System.out.println("SensitiveWordHelper.replace(text,myWordReplace) = " + SensitiveWordHelper.replace(text, myWordReplace));
        // 如果自定義敏感詞,不要使用SensitiveWordHelper的方法,要使用SensitiveWordBs
        System.out.println("sensitiveWordBs.contains(text) = " + sensitiveWordBs.contains(text));
        System.out.println("sensitiveWordBs.findAll(text) = " + sensitiveWordBs.findAll(text));
        System.out.println("sensitiveWordBs.replace(text) = " + sensitiveWordBs.replace(text));
    }
}

到此這篇關(guān)于springboot集成sensitive-word實現(xiàn)敏感詞過濾的文章就介紹到這了,更多相關(guān)springboot敏感詞過濾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring?boot獲取session的值為null問題及解決方法

    spring?boot獲取session的值為null問題及解決方法

    我在登陸的時候,登陸成功后將name存進了session,然后在獲取個人信息時取出session里的name的值為null,接下來通過本文給大家分享springboot獲取session的值為null問題,需要的朋友可以參考下
    2023-05-05
  • Java實現(xiàn)驗證文件名有效性的方法詳解

    Java實現(xiàn)驗證文件名有效性的方法詳解

    在本文中,我們將討論使用?Java?驗證一個給定的字符串是否具有操作系統(tǒng)的有效文件名的不同方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-09-09
  • Java?@Scheduled定時器用法解析

    Java?@Scheduled定時器用法解析

    這篇文章主要介紹了Java?@Scheduled定時器用法解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • java處理字節(jié)的常用工具類

    java處理字節(jié)的常用工具類

    這篇文章主要為大家詳細介紹了java處理字節(jié)的常用工具類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Maven打包沒有指定主類問題(xxx.jar中沒有主清單屬性)

    Maven打包沒有指定主類問題(xxx.jar中沒有主清單屬性)

    這篇文章主要介紹了Maven打包沒有指定主類問題(xxx.jar中沒有主清單屬性),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 自定義log4j2中的Appender來獲取日志內(nèi)容的示例代碼

    自定義log4j2中的Appender來獲取日志內(nèi)容的示例代碼

    在 Log4j2 中,Appender 是負責將日志事件輸出到目標地點的組件,本文講述的是通過 log4j 中自定義的 Appender 來獲取需要打印的日志信息,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-02-02
  • Spring中容器創(chuàng)建的四種方式示例

    Spring中容器創(chuàng)建的四種方式示例

    這篇文章主要介紹了Spring中容器創(chuàng)建的四種方式示例,Spring容器是Spring框架的核心部分,它負責管理和組織應用程序中的對象,它提供了一種輕量級的、非侵入式的方式來實現(xiàn)對象的創(chuàng)建、依賴注入和生命周期管理,需要的朋友可以參考下
    2023-10-10
  • Mybatis 插入一條或批量插入 返回帶有自增長主鍵記錄的實例

    Mybatis 插入一條或批量插入 返回帶有自增長主鍵記錄的實例

    下面小編就為大家分享一篇Mybatis 插入一條或批量插入 返回帶有自增長主鍵記錄的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Spring動態(tài)注冊多數(shù)據(jù)源的實現(xiàn)方法

    Spring動態(tài)注冊多數(shù)據(jù)源的實現(xiàn)方法

    這篇文章主要介紹了Spring動態(tài)注冊多數(shù)據(jù)源的實現(xiàn)方法,小編覺的挺不錯的,現(xiàn)分享到腳本之家平臺,需要的朋友可以參考下
    2018-01-01
  • IDEA的maven設(shè)置代理方式

    IDEA的maven設(shè)置代理方式

    文章介紹了如何設(shè)置IntelliJ?IDEA系統(tǒng)代理,并在Maven的Importing和Runner中添加代理配置,包括設(shè)置代理主機和端口
    2025-01-01

最新評論

夹江县| 出国| 景泰县| 盐池县| 沈阳市| 台前县| 城固县| 平顺县| 环江| 根河市| 闸北区| 嵊州市| 保德县| 彰化市| 承德市| 青铜峡市| 天气| 白玉县| 德安县| 彰化市| 江油市| 额尔古纳市| 延长县| 和平县| 灌云县| 阿合奇县| 潮州市| 高邮市| 金阳县| 阜宁县| 越西县| 河东区| 望奎县| 吉首市| 安宁市| 大化| 通许县| 娱乐| 新巴尔虎左旗| 苗栗市| 宣武区|