国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

Java DFA算法案例詳解

瀏覽:4日期:2023-12-07 09:21:12
1.背景

項(xiàng)目中需要對敏感詞做一個(gè)過濾,首先有幾個(gè)方案可以選擇:

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

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

2.DFA算法簡介

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

Java DFA算法案例詳解

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

3.敏感詞搜尋中的DFA算法3.1敏感詞庫構(gòu)造描述

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

 Java DFA算法案例詳解

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

 Java DFA算法案例詳解

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

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

  Java DFA算法案例詳解

4.代碼編寫4.1構(gòu)造敏感詞實(shí)現(xiàn)代碼

Java DFA算法案例詳解

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

Java DFA算法案例詳解

5.優(yōu)化思路5.1敏感詞中間填充無意義字符問題

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

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

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

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 安阳市| 瑞金市| 博客| 余干县| 绥江县| 七台河市| 南岸区| 阳原县| 桂东县| 邛崃市| 苗栗市| 通城县| 民勤县| 怀集县| 虞城县| 宝清县| 壤塘县| 抚宁县| 临高县| 若羌县| 淮南市| 于都县| 沭阳县| 个旧市| 增城市| 肥西县| 宿迁市| 定南县| 宽甸| 昌都县| 安陆市| 建昌县| 丽江市| 高雄市| 溆浦县| 汝城县| 共和县| 巴林左旗| 隆安县| 遵义市| 随州市|