gpt4 book ai didi

高效.NET脏字过滤算法与应用实例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章高效.NET脏字过滤算法与应用实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了高效.NET脏字过滤算法。分享给大家供大家参考,具体如下:

BadWordsFilter.cs类 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using System.Data;
namespace WNF
{
   public class BadWordsFilter
   {
     private HashSet< string > hash = new HashSet< string >(); //关键字
     private byte [] fastCheck = new byte [ char .MaxValue];
     private byte [] fastLength = new byte [ char .MaxValue];
     private BitArray charCheck = new BitArray( char .MaxValue);
     private BitArray endCheck = new BitArray( char .MaxValue);
     private int maxWordLength = 0;
     private int minWordLength = int .MaxValue;
     public BadWordsFilter()
     {
     }
     //初始化关键字
     public void Init(DataTable badwords)
     {
       for ( int j = 0; j < badwords.Rows.Count; j++)
       {
         string word = badwords.Rows[j][0].ToString();
         maxWordLength = Math.Max(maxWordLength, word.Length);
         minWordLength = Math.Min(minWordLength, word.Length);
         for ( int i = 0; i < 7 && i < word.Length; i++)
         {
           fastCheck[word[i]] |= ( byte )(1 << i);
         }
         for ( int i = 7; i < word.Length; i++)
         {
           fastCheck[word[i]] |= 0x80;
         }
         if (word.Length == 1)
         {
           charCheck[word[0]] = true ;
         }
         else
         {
           fastLength[word[0]] |= ( byte )(1 << (Math.Min(7, word.Length - 2)));
           endCheck[word[word.Length - 1]] = true ;
           hash.Add(word);
         }
       }
     }
     public string Filter( string text, string mask)
     {
       throw new NotImplementedException();
     }
     //检查是否有关键字
     public bool HasBadWord( string text)
     {
       int index = 0;
       while (index < text.Length)
       {
         int count = 1;
         if (index > 0 || (fastCheck[text[index]] & 1) == 0)
         {
           while (index < text.Length - 1 && (fastCheck[text[++index]] & 1) == 0) ;
         }
         char begin = text[index];
         if (minWordLength == 1 && charCheck[begin])
         {
           return true ;
         }
         for ( int j = 1; j <= Math.Min(maxWordLength, text.Length - index - 1); j++)
         {
           char current = text[index + j];
           if ((fastCheck[current] & 1) == 0)
           {
             ++count;
           }
           if ((fastCheck[current] & (1 << Math.Min(j, 7))) == 0)
           {
             break ;
           }
           if (j + 1 >= minWordLength)
           {
             if ((fastLength[begin] & (1 << Math.Min(j - 1, 7))) > 0 && endCheck[current])
             {
               string sub = text.Substring(index, j + 1);
               if (hash.Contains(sub))
               {
                 return true ;
               }
             }
           }
         }
         index += count;
       }
       return false ;
     }
   }
}

引用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string sql = "select keywords from tb_keyword" ;
BadWordsFilter badwordfilter = new BadWordsFilter();
//初始化关键字
badwordfilter.Init(oEtb.GetDataSet(sql).Tables[0]);
//检查是否有存在关键字
bool a = badwordfilter.HasBadWord(TextBox1.Text);
if (a == true )
{
     Page.RegisterClientScriptBlock( "a" , "<script>alert('该评论含有不合法文字!')</script>" );
}
else
{
     PingLun(); //写入评论表
}

  。

希望本文所述对大家asp.net程序设计有所帮助.

最后此篇关于高效.NET脏字过滤算法与应用实例的文章就讲到这里了,如果你想了解更多关于高效.NET脏字过滤算法与应用实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com