Java Web 敏感詞過濾演算法

2021-06-28 07:12:38 字數 2095 閱讀 2708

1.dfa演算法

dfa演算法的原理可以參考這裡,簡單來說就是通過map構造出一顆敏感詞樹,樹的每一條由根節點到葉子節點的路徑構成乙個敏感詞,例如下圖:

**簡單實現如下:

public class textfilterutil 

}/**

* 構建敏感詞庫

** @param keyword

*/private static void createkeyword(string keyword)

map nowmap = sensitivewordmap;

for (character c : keyword.tochararray()) else

}nowmap.put("isend", "true");

}/**

* 讀取敏感詞檔案

** @return

*/private static setreadsensitivewords()

} catch (unsupportedencodingexception e) catch (filenotfoundexception e) catch (ioexception e) finally catch (ioexception e)

reader = null;}}

return keywords;

}/**

* 檢查敏感詞

** @return

*/private static listchecksensitiveword(string text)

listsensitivewords = new arraylist<>();

map nowmap = sensitivewordmap;

for (int i = 0; i < text.length(); i++)

int j = i + 1;

map childmap = (map) obj;

while (j < text.length())

obj = childmap.get(text.charat(j));

if (obj != null) else

j++;}}

return sensitivewords;}}

2.ttmp演算法

ttmp演算法由網友原創,關於它的起源可以檢視這裡,ttmp演算法的原理是將敏感詞拆分成「髒字」的序列,只有待比對字串完全由「髒字」組成時,才去判斷它是否為敏感詞,減少了比對次數。這個演算法的簡單實現如下:

public class textfilterutil 

/*** 讀取本地的敏感詞檔案

** @return

*/private static void readsensitivewords()

}} catch (unsupportedencodingexception e) catch (filenotfoundexception e) catch (ioexception e) finally catch (ioexception e)

reader = null;}}

return;

}/**

* 檢查敏感詞

** @return

*/private static listchecksensitiveword(string text)

listsensitivewords = new arraylist<>();

for (int i = 0; i < text.length(); i++)

int j = i;

while (j < text.length())

string key = text.substring(i, j + 1);

if (sensitivewordset.contains(key))

j++;}}

return sensitivewords;}}

注:以上**實現僅用於展示思路,在實際使用中還有很多地方可以優化。

Java Web敏感詞過濾演算法

1.dfa演算法 dfa演算法的原理可以參考 這裡 簡單來說就是通過map構造出一顆敏感詞樹,樹的每一條由根節點到葉子節點的路徑構成乙個敏感詞,例如下圖 簡單實現如下 public class textfilterutil 構建敏感詞庫 param keyword private static vo...

敏感詞過濾演算法實現

說到敏感詞過濾,我也覺得這裡沒有必要寫這個文章,因為前人已經前前後後有過很多種演算法解決該問題。這裡我之所以寫這個文章,是因為我自己自創了一種演算法 真的是自創哦,因為我在寫這個演算法的時候,完全是自己想出來的方式,沒有借鑑任何 靈感來自於一篇文章中的一句話 如果能掃瞄一遍文字就能將所有的詞找出來,...

演算法 DFA敏感詞過濾

最近剛好有群友問到關於敏感詞過濾的問題,當時有人給出了一些辦法。1.利用hashset,對傳多來的字串進行比較。或者將敏感詞儲存到資料庫或者其他地方,然後和傳入的詞做匹配。2.正規表示式匹配。上述兩個方法不用想肯定都是很慢的。後來有人說道可以利用dfa演算法,因此我去研究了一下,增加自己的知識面。具...