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演算法,因此我去研究了一下,增加自己的知識面。具...