filterhelper類
#region 非法關鍵字過濾 bate 1.1
///
///
public
class
filterhelper
public
filterhelper
(string dictionarypath)
private
string dictionarypath =
string
.empty;
///
/// 詞庫路徑
///
public
string dictionarypath
set}
///
/// 記憶體詞典
///
private wordgroup[
] memorylexicon =
newwordgroup[(
int)
char
.maxvalue]
;private
string sourcttext =
string
.empty;
///
/// 檢測源
///
public
string sourcttext
set}
///
/// 檢測源游標
///
int cursor =0;
///
/// 匹配成功後偏移量
///
int wordlenght =0;
///
/// 檢測詞游標
///
int nextcursor =0;
private list<
string
> illegalwords =
newlist
<
string
>()
;///
/// 檢測到的非法詞集
///
public list<
string
> illegalwords
}///
/// 判斷是否是中文
///
///
///
private
bool
ischs
(char character)
///
/// 判斷是否是數字
///
///
///
private
bool
isnum
(char character)
///
/// 判斷是否是字母
///
///
///
private
bool
isalphabet
(char character)
///
/// 轉半形小寫的函式(dbc case)
///
/// 任意字串
/// 半形字串
//////全形空格為12288,半形空格為32
///其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248
/// private
string
todbc
(string input)
if(c[i]
>
65280
&& c[i]
<
65375
) c[i]=(
char
)(c[i]
-65248);
}return
newstring
(c).
tolower()
;}///
/// 載入記憶體詞庫
///
private
void
loaddictionary()
comparison<
string
> cmp =
delegate
(string key1,
string key2)
; wordlist.
sort
(cmp)
;for
(int i = wordlist.count -
1; i >
0; i--)}
foreach
(var word in wordlist)
group
.add
(word.
substring(1
));}
}}}///
/// 檢測
///
///
///
private
bool
check
(string blackword)
else
else
break;}
if((int
)blackword[i]==(
int)sourcttext[nextcursor + offset]
)else
} nextcursor = nextcursor +
1+ offset;
wordlenght++;}
return found;
}///
/// 查詢並替換
///
///
public
string
filter
(char replacechar)
illegalwords.
add(blackword)
; cursor = cursor + wordlenght;
i = i + wordlenght;}}
} cursor++;}
return
newstring
(tempstring);}
else}}
///
/// 具有相同首字元的片語集合
///
class
wordgroup
///
/// 新增詞
///
///
public
void
add(
string word)
///
/// 獲取總數
///
///
public
intcount()
///
/// 根據下標獲取詞
///
///
///
public
string
getword
(int index)
}#endregion
呼叫
//該**為net core下的控制台demo
string path = directory.
getcurrentdirectory()
.replace(,
"");filterhelper filter =
newfilterhelper
(path+
"/暴恐詞庫.txt");
//存放敏感詞的文件
filter.sourcttext =
"你個大推背"
;string resultstr = filter.
filter
('*');
//用*號代替敏感詞
var list=filter.illegalwords;
//這個可以獲取所有敏感詞集合
foreach
(string s in list)
console.
writeline
(resultstr)
;
敏感詞過濾演算法實現
說到敏感詞過濾,我也覺得這裡沒有必要寫這個文章,因為前人已經前前後後有過很多種演算法解決該問題。這裡我之所以寫這個文章,是因為我自己自創了一種演算法 真的是自創哦,因為我在寫這個演算法的時候,完全是自己想出來的方式,沒有借鑑任何 靈感來自於一篇文章中的一句話 如果能掃瞄一遍文字就能將所有的詞找出來,...
Java Web 敏感詞過濾演算法
1.dfa演算法 dfa演算法的原理可以參考這裡,簡單來說就是通過map構造出一顆敏感詞樹,樹的每一條由根節點到葉子節點的路徑構成乙個敏感詞,例如下圖 簡單實現如下 public class textfilterutil 構建敏感詞庫 param keyword private static voi...
Java Web敏感詞過濾演算法
1.dfa演算法 dfa演算法的原理可以參考 這裡 簡單來說就是通過map構造出一顆敏感詞樹,樹的每一條由根節點到葉子節點的路徑構成乙個敏感詞,例如下圖 簡單實現如下 public class textfilterutil 構建敏感詞庫 param keyword private static vo...