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

Java DFA算法案例詳解

 更新時間:2021年08月13日 14:44:10   作者:小小華bk  
這篇文章主要介紹了Java DFA算法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

1.背景

項目中需要對敏感詞做一個過濾,首先有幾個方案可以選擇:

  1. 直接將敏感詞組織成String后,利用indexOf方法來查詢。
  2. 傳統(tǒng)的敏感詞入庫后SQL查詢。
  3. 利用Lucene建立分詞索引來查詢。
  4. 利用DFA算法來進行。

首先,項目收集到的敏感詞有幾千條,使用a方案肯定不行。其次,為了方便以后的擴展性盡量減少對數(shù)據(jù)庫的依賴,所以放棄b方案。然后Lucene本身作為本地索引,敏感詞增加后需要觸發(fā)更新索引,并且這里本著輕量原則不想引入更多的庫,所以放棄c方案。于是我們選定d方案為研究目標。

2.DFA算法簡介

DFA全稱為:Deterministic Finite Automaton,即確定有窮自動機。其特征為:有一個有限狀態(tài)集合和一些從一個狀態(tài)通向另一個狀態(tài)的邊,每條邊上標記有一個符號,其中一個狀態(tài)是初態(tài),某些狀態(tài)是終態(tài)。但不同于不確定的有限自動機,DFA中不會有從同一狀態(tài)出發(fā)的兩條邊標志有相同的符號。

簡單點說就是,它是是通過event和當前的state得到下一個state,即event+state=nextstate。理解為系統(tǒng)中有多個節(jié)點,通過傳遞進入的event,來確定走哪個路由至另一個節(jié)點,而節(jié)點是有限的。

3.敏感詞搜尋中的DFA算法

3.1敏感詞庫構(gòu)造描述

以王八蛋和王八羔子兩個敏感詞來進行描述,首先構(gòu)建敏感詞庫,該詞庫名稱為SensitiveMap,這兩個詞的二叉樹構(gòu)造為:

 

用hash表構(gòu)造為:

 

3.2基于敏感詞庫收索算法的描述

以上面例子構(gòu)造出來的SensitiveMap為敏感詞庫進行示意,假設(shè)這里輸入的關(guān)鍵字為:王八不好,流程圖如下:

  

4.代碼編寫

4.1構(gòu)造敏感詞實現(xiàn)代碼

4.2實現(xiàn)敏感詞查詢代碼

5.優(yōu)化思路

5.1敏感詞中間填充無意義字符問題

對于“王*八&&蛋”這樣的詞,中間填充了無意義的字符來混淆,在我們做敏感詞搜索時,同樣應(yīng)該做一個無意義詞的過濾,當循環(huán)到這類無意義的字符時進行跳過,避免干擾。

5.2敏感詞用拼音或部分用拼音代替

兩種解決思路:一種是最簡單是遇到這類問題,先豐富敏感詞庫進行快速解決。第二種是判斷時將敏感詞轉(zhuǎn)換為拼音進行對比判斷。

不過目前這兩種方案均不能徹底很好的解決該問題,此類問題還需進一步研究。

到此這篇關(guān)于Java DFA算法案例詳解的文章就介紹到這了,更多相關(guān)Java DFA算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情

    Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情

    這篇文章主要介紹了Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情,BeanFactory?和?FactoryBean?的區(qū)別卻是一個很重要的知識點,在本文中將結(jié)合源碼進行分析講解,需要的小伙伴可以參考一下
    2022-05-05
  • SpringBoot整合RabbitMQ實戰(zhàn)教程附死信交換機

    SpringBoot整合RabbitMQ實戰(zhàn)教程附死信交換機

    這篇文章主要介紹了SpringBoot整合RabbitMQ實戰(zhàn)附加死信交換機,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 動態(tài)上傳jar包熱部署的實戰(zhàn)詳解

    動態(tài)上傳jar包熱部署的實戰(zhàn)詳解

    開發(fā)系統(tǒng)過程中遇到的一個需求,系統(tǒng)給定一個接口,用戶可以自定義開發(fā)該接口的實現(xiàn),并將實現(xiàn)打成jar包,上傳到系統(tǒng)中。系統(tǒng)完成熱部署,并切換該接口的實現(xiàn)。本文詳細介紹了實現(xiàn)方法,需要的可以參考一下
    2022-10-10
  • Java中channel用法總結(jié)

    Java中channel用法總結(jié)

    這篇文章主要介紹了Java中channel用法,較為詳細的總結(jié)了channel的定義、類型及使用技巧,需要的朋友可以參考下
    2015-06-06
  • java基礎(chǔ)學(xué)習筆記之類加載器

    java基礎(chǔ)學(xué)習筆記之類加載器

    java中的類加載器:java虛擬機中可以安裝多個類加載器,系統(tǒng)默認三個主要類加載器,每個類負責加載特定位置的類:BootStrap, ExtClassLoader,AppClassLoader類加載器也是一個java類,因此類加載器也需要被加載,所以必須有第一個類加載器不是java類
    2016-02-02
  • java搭建一個Socket服務(wù)器響應(yīng)多用戶訪問

    java搭建一個Socket服務(wù)器響應(yīng)多用戶訪問

    本篇文章主要介紹了java搭建一個Socket服務(wù)器響應(yīng)多用戶訪問,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java手動配置線程池過程詳解

    Java手動配置線程池過程詳解

    這篇文章主要介紹了Java手動配置線程池過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-05-05
  • Java使用IntelliJ IDEA連接MySQL的詳細教程

    Java使用IntelliJ IDEA連接MySQL的詳細教程

    這篇文章主要給大家介紹了關(guān)于Java使用IntelliJ IDEA連接MySQL的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-04-04
  • SpringBoot中使用Session共享實現(xiàn)分布式部署的示例代碼

    SpringBoot中使用Session共享實現(xiàn)分布式部署的示例代碼

    這篇文章主要介紹了SpringBoot中使用Session共享實現(xiàn)分布式部署的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-07-07
  • Java基礎(chǔ)之內(nèi)存泄漏與溢出詳解

    Java基礎(chǔ)之內(nèi)存泄漏與溢出詳解

    今天帶大家來了解一下Java內(nèi)存泄漏與溢出的知識,文中有非常詳細的介紹,對正在學(xué)習Java基礎(chǔ)的各位小伙伴呢很有幫助喲,需要的朋友可以參考下
    2021-05-05

最新評論

万荣县| 西丰县| 托里县| 和田县| 鄂托克前旗| 三亚市| 侯马市| 闽清县| 宜君县| 扎鲁特旗| 新乡县| 习水县| 隆林| 清镇市| 阿拉善盟| 那曲县| 罗甸县| 淮安市| 平利县| 腾冲县| 武城县| 镇安县| 宁远县| 汝州市| 汉沽区| 休宁县| 岐山县| 平江县| 巴林右旗| 兰州市| 竹山县| 克拉玛依市| 襄城县| 方正县| 平果县| 邵阳市| 鹤岗市| 富顺县| 临洮县| 泌阳县| 略阳县|