C#敏感词过滤实现方法

本文实例讲述了C#敏感词过滤实现方法。分享给大家供大家参考。具体如下:

这两天突然想到了敏感词过滤 就结合网上找到的资料自己写了一个,脏字数量700+(效率不是很高 测试在110多KB的情况下比replace快 3-4倍)
测试结果图 单位:秒

代码如下:

System.Text.StringBuilder sb = new System.Text.StringBuilder(text.Length);
 string filterText = "需要过滤的脏字 以|分开";
 //脏字 可根据自己的方式用分隔符
 string[] filterData = filterText.Split('|');
 foreach (var item in filterData)
 {
  char value = item[0];
  if (dicList.ContainsKey(value))
   dicList[value].Add(item);
  else
   dicList.Add(value, new List<string>() { item });
 }
 int count = text.Length;
 for (int i = 0; i < count; i++)
 {
  char word = text[i];
  if (dicList.ContainsKey(word))//如果在字典表中存在这个key
  {
   int num = 0;//是否找到匹配的关键字 1找到0未找到
   var data = dicList[word].OrderBy(g => g.Length);
   //把该key的字典集合按 字符数排序(方便下面从少往多截取字符串查找)
   foreach (var wordbook in data)
   {
    if (i + wordbook.Length <= count)
    //如果需截取的字符串的索引小于总长度 则执行截取
    {
     string result = text.Substring(i, wordbook.Length);
     //根据关键字长度往后截取相同的字符数进行比较
     if (result == wordbook)
     {
      num = 1;
      sb.Append(GetString(result));
      i = i + wordbook.Length - 1;
      //比较成功 同时改变i的索引
      break;
     }
    }
   }
   if (num == 0)
    sb.Append(word);
  }
  else
   sb.Append(word);
 }
 return sb.ToString();
}
/// <summary>
/// 替换星号
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private static string GetString(string value)
{
 string starNum = string.Empty;
 for (int i = 0; i < value.Length; i++)
 {
  starNum += "*";
 }
 return starNum;
}

还有待优化的地方

各位有更好的方法还请分享指点一下,说明原理

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • java中Filter过滤器处理中文乱码的方法

    注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处理乱码的格式不一致.所以编译出错. 解决方法:所有地方都用utf-8或gbk 复制代码 代码如下: //过滤器类CharactorFilter.jsppackage cn.com.Filter; import java.io.IOException; import javax.servlet.Fil

  • JavaEE Filter敏感词过滤的方法实例详解

    我们在聊天的时候的或者留言的时候,有部分词是不允许发表出来.我们可以采用过滤器实现这个功能. 我们只是简单利用过滤器实现这个过滤的功能,有些地方没写的很全 前台代码: <body> <form action="<c:url value='/WordServlet'/>" method="post"> 姓名:<input type="text" name="name"/><b

  • javascipt:filter过滤介绍及使用

    javascipt : filter  过滤 var List = sizes.filter(function (size) { return size.id == 12; }); sizes = [ {id : 10,,stock:130},{id : 11,stock:120},{id : 12,stock:100} ] filter是new一个新的array,然后给他过滤后的对象,最后var list 起来

  • Java 的 FileFilter文件过滤与readline读行操作实例代码

    复制代码 代码如下: package com.cjonline.foundation.evisa; import java.io.BufferedReader;import java.io.File;import java.io.FileFilter;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.math.BigDecimal; publ

  • php过滤敏感词的示例

    复制代码 代码如下: $badword = array(    '张三','张三丰','张三丰田');$badword1 = array_combine($badword,array_fill(0,count($badword),'*'));$bb = '我今天开着张三丰田上班';$str = strtr($bb, $badword1);echo $str; 复制代码 代码如下: $hei=array('中国','日本');$blacklist="/".implode("|&

  • C#敏感词过滤实现方法

    本文实例讲述了C#敏感词过滤实现方法.分享给大家供大家参考.具体如下: 这两天突然想到了敏感词过滤 就结合网上找到的资料自己写了一个,脏字数量700+(效率不是很高 测试在110多KB的情况下比replace快 3-4倍) 测试结果图 单位:秒 代码如下: System.Text.StringBuilder sb = new System.Text.StringBuilder(text.Length); string filterText = "需要过滤的脏字 以|分开"; //脏字

  • python 实现敏感词过滤的方法

    如下所示: #!/usr/bin/python2.6 # -*- coding: utf-8 -*- import time class Node(object): def __init__(self): self.children = None # The encode of word is UTF-8 def add_word(root,word): node = root for i in range(len(word)): if node.children == None: node.c

  • PHP实现的敏感词过滤方法示例

    本文实例讲述了PHP实现的敏感词过滤方法.分享给大家供大家参考,具体如下: 1.敏感词过滤方法 /** * @todo 敏感词过滤,返回结果 * @param array $list 定义敏感词一维数组 * @param string $string 要过滤的内容 * @return string $log 处理结果 */ function sensitive($list, $string){ $count = 0; //违规词的个数 $sensitiveWord = ''; //违规词 $st

  • Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去屏蔽这些敏感词.下面我来介绍一些简单版本的敏感词屏蔽的方法. (我已经尽量把脏话做成图片的形式了,要不然文章发不出去) 方法一:replace过滤 replace就是最简单的字符串替换,当一串字符串中有可能会出现的敏感词时,我们直接使用相应的replace方法用*替换出敏感词即可. 缺点: 文本和敏感词少

  • java利用DFA算法实现敏感词过滤功能

    前言 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxoo相关的文字时)时要能检 测出来,很多项目中都会有一个敏感词管理模块,在敏感词管理模块中你可以加入敏感词,然后根据加入的敏感词去过滤输 入内容中的敏感词并进行相应的处理,要么提示,要么高亮显示,要么直接替换成其它的文字或者符号代替. 敏感词过滤的做法有很多,我简单描述我现在理解的几种: ①查询数据库当中的敏感词,循环每一个敏感词,然后去输入的文本中从头到尾搜索一遍,看是否存在此敏感词,有则做相 应的处理,

  • Jsp敏感词过滤的示例代码

    大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本网站的特殊敏感词. 比如,当你发贴的时候带有某些事先设定的词时,这个贴是不能发出的.或者这个词被自动替换为星号(*)或叉号(X)等,或者说是被和谐掉了. 在我看来敏感词过滤最重要的是在写过滤词汇的算法,如何过滤出大批量的敏感词,我感觉DFA的思想不错 DFA简介 在实现文字过滤的算法中,DF

  • Java实现敏感词过滤实例

    敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来一看,整个过程如下:读取敏感词库.如果HashSet集合中,获取页面上传文字,然后进行匹配.我就想这个过程肯定是非常慢的.对于他这个没有接触的人来说我想也只能想到这个,更高级点就是正则表达式.但是非常遗憾,这两种方法都是不可行的.当然,在我意识里没有我也没有认知到那个算法可以解决问题,但是Googl

  • servlet实现简单的权限管理和敏感词过滤功能

    前言 JavaEE课要求用servlet和过滤器实现权限管理和敏感词过滤功能,故有此文. 虽然早已知道了原理和用法,但是实际操作起来还是遇到了各种奇葩的情况. 一.如何实现权限管理 1.思路 当用户访问某个资源时,我们必须对其权限控制,所以得用到servlet中过滤器来对请求做一次预处理,判断该用户是否有权限访问该资源,如果有则放行;如果没有则返回拒绝访问的通知. 那么我们如何判断该用户是否有权限访问呢? 这就要求我们在用户登录的时候保存其登录状态. 可我们知道http请求是无状态的,即这次请求

  • Python基于DFA算法实现内容敏感词过滤

    DFA 算法是通过提前构造出一个 树状查找结构,之后根据输入在该树状结构中就可以进行非常高效的查找. 设我们有一个敏感词库,词酷中的词汇为: 我爱你 我爱他 我爱她 我爱你呀 我爱他呀 我爱她呀 我爱她啊 那么就可以构造出这样的树状结构: 设玩家输入的字符串为:白菊我爱你呀哈哈哈 我们遍历玩家输入的字符串 str,并设指针 i 指向树状结构的根节点,即最左边的空白节点: str[0] = ‘白’ 时,此时 tree[i] 没有指向值为 ‘白’ 的节点,所以不满足匹配条件,继续往下遍历 str[1

随机推荐