日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

新人小白过滤敏感词方案

發布時間:2023/12/13 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 新人小白过滤敏感词方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、小談過濾算法

敏感詞過濾功能在很多地方都會用到,理論上在Web應用中,只要涉及用戶輸入的地方,都需要進行文本校驗,如:XSS校驗、SQL注入檢驗、敏感詞過濾等。

每一種過濾算法會都它的適用的地方。簡單的循環遍歷也有它的使用場景,如在SQL注入檢驗,使用List<string>集合,遍歷所有敏感詞,逐個檢測輸入的文本中是否含有指定的敏感SQL關鍵詞。

在我知曉的過濾算法,檢驗速度越快,它的初始構造成本越大,如:

    循環遍歷 < Tried Tree < AC自動機 < ToolGood.Words < ToolGood.TextFilter

防止初始構造過長,一般有兩種方案解決:1)單例模式,2)將構造后結構序列化后保存本地,第二次加載時直接讀取文件。

二、使用List<string>遍歷所有敏感詞

 1         public static bool Find(string test)
 2         {
 3             var txts = File.ReadAllLines("sensitiveWords.txt");
 4             foreach (var txt in txts) {
 5                 if (test.Contains(txt)) {
 6                     return true;
 7                 }
 8             }
 9             return false;
10         }

三、使用正則方式查尋敏感詞

 1         public static bool Find2(string test)
 2         {
 3             var txts = File.ReadAllLines("sensitiveWords.txt");
 4             StringBuilder stringBuilder = new StringBuilder();
 5             for (int i = 0; i < txts.Length; i++) {
 6                 if (stringBuilder.Length > 0) {
 7                     stringBuilder.Append("|");
 8                 }
 9                 var txt = txts[i].Replace(@"", @"").Replace(@"?", @"?").Replace(@".", @".")
10                       .Replace(@"^", @"^").Replace(@"$", @"$")
11                       .Replace(@"*", @"*").Replace(@"+", @"+")
12                       .Replace(@"[", @"[").Replace(@"]", @"]")
13                       .Replace(@"(", @"(").Replace(@")", @")")
14                       .Replace(@"{", @"{").Replace(@"}", @"}");
15                 stringBuilder.Append(txt);
16             }
17             txts = File.ReadAllLines("sensitiveWords_regex.txt");
18             for (int i = 0; i < txts.Length; i++) {
19                 if (stringBuilder.Length > 0) {
20                     stringBuilder.Append("|");
21                 }
22                 stringBuilder.Append(txts[i]);
23             }
24             return Regex.IsMatch(test, stringBuilder.ToString());
25         }

四、敏感詞過濾算法比較

1)循環遍歷過濾算法,代碼十分簡單,能夠滿足要求小量敏感詞檢測。這個方案有一個很大的問題是,隨著敏感詞數量的增多,敏感詞檢測的時間會呈線性增長。如果項目中有成千上萬個敏感詞,使用這種方案就會很耗CPU了。

2)正則表達式過濾算法,一個非常取巧的方法。熟練掌握正則,能在各種場景玩出花來,變體、重復詞、跳詞統統不在話下。但綜合速度比Tried Tree低很多。

3)Tried Tree 網上最常見的算法。在敏感詞檢測方面效率很高。缺點不支持跳詞、不支持重復詞、不支持變種,想支持變種就得增加敏感詞匯。

4)AC自動機是Tried Tree算法在文本匹配方面的優化算法。敏感詞檢測比Tried Tree算法更快,缺點繼承了Tried Tree,不支持跳詞、不支持重復詞、不支持變種。

5)ToolGood.Words是一個算法合集,核心算法是在AC自動機基礎上優化。

    其中IllegalWordsSearch類更符合敏感詞過濾這種場景,支持全角轉半角,忽略大小寫,跳詞,重復詞。

    而WordsMatch類更像是AC自動機向正則表達式方面試探。

后記:

下次介紹 Tried Tree 及 AC自動機。

ToolGood.Words 為開源項目,地址:https://github.com/toolgood/ToolGood.Words

ToolGood.TextFilter 為商業項目《ToolGood 內容審核系統》的核心算法,是一個綜合算法,由敏感詞檢測、NLP分詞排錯、多組敏感詞檢測,Html解析、Json解析等多個算法組成。

總結

以上是生活随笔為你收集整理的新人小白过滤敏感词方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。