今天我慢下来啦,因为这三天没有新的课程学习内容,自己仅仅看啦一些,这让我停下来栖息片刻;说说现在的生活,简单的进行着,每天要奔波着去上课,然后回来,每天都在想怎样学习这个小知识点,大脑也在想怎样解决程序中的问题,每一天就是这样的开始,这样的结束;现在感觉:自己像一台电脑一样,难道被病毒入侵啦吗?但是这样的我仍然是快乐的,我因为兴趣而开始来习惯这样的生活的,所以一切的一切都是理所当然的,也是我已经预料到的,现在就是感觉有问题啦每次百度还是很难结局啊,不知道该怎么办,有点纠结,我的培训班的选择真的让我好失望啊,感觉社会是永远不会公平的,我们既然改变不了,就试着去接受吧。

下面就总结一下我今天学习的一些内容,今天学习啦一下怎样过滤敏感词的,由于之前我一个同学问我怎样去过滤文件中的敏感词,那时间做啦一下,但是做的结果不理想,现在就使用正则表达式来写一下啦。

一.敏感词的过滤

我们先创建一个窗体,然后在窗体上面拖拉两个控件,TextBox和Button,如下图所示:

  1. public partial class Form1 : Form
  2. {
  3. public Form1()
  4. {
  5. InitializeComponent();
  6. }
  7. List<string> mod = new List<string>(); //需要审核的,在这里我们定义一个泛型集合存储
  8. List<string> banned = new List<string>();//直接提示禁止使用的敏感词
  9. private void Form1_Load(object sender, EventArgs e)
  10. {
  11. string[] lines = File.ReadAllLines(@"F:\img\过滤词.txt", Encoding.Default);//在这里我们读取文件中的敏感词存放在一个数组中
  12. foreach (string line in lines) //遍历出来每一项
  13. {
  14. Match match = Regex.Match(line, @"(.+)=\{(\w+)\}"); //在这里使用的是正则表达式进行匹配
  15. if (match.Success) //在这里判断一下是否匹配成功
  16. {
  17. string key = match.Groups[].Value;//成功时间我们就把敏感词汇放在读出
  18. string type = match.Groups[].Value.ToLower(); //在这里是存储该敏感词的类型,是敏感词还是需要审核的词,要注意转换为小写,在这里容易出错的地方
  19. if (type.Equals("mod"))
  20. {
  21. mod.Add(key); //在这里是如果是mod类型的那么我们就记录一下,当发生按钮单击事件时我们可以提示
  22. }
  23. else if (type.Equals("banned"))
  24. {
  25. banned.Add(key);
  26. }
  27. }
  28. }
  29. }
  30.  
  31. private void button1_Click(object sender, EventArgs e)
  32. {
  33. string context = this.textBox1.Text;
  34.  
  35. #region 字符串判断是否包含敏感词
  36. foreach (string key in banned) //在这里有一个先后顺序,我们应该先判断是否含有敏感词
  37. {
  38. if (context.Contains(key)) //在这里需要注意的是:我们遍历出来的是key,一低昂判断的是是否包含key啦
  39. {
  40. MessageBox.Show("此文章中含有敏感词,禁止发表");
  41. return;
  42. }
  43. }
  44. foreach (string key in mod) //在这里有一个先后顺序,我们应该先判断是否含有敏感词
  45. {
  46. if (context.Contains(key))
  47. {
  48. MessageBox.Show("此文章中含有需要审核的词,我们需要审核");
  49. return;
  50. }
  51. }
  52. #endregion
  53.  
  54. #region 使用正则表达式判断
  55. //在这里需要注意我们的实际情况,例如:我们拿“教瘦”这个敏感词来说,我们可能会在它中间加一个空格.下划线等符号,然后使用字符串判断就可以成功,
  56. //而现在我们需要的是在其中添加任意符号,我们都是它禁止发表文章的啦,所以我们可以使用正则表达式来判断的啦
  57.  
  58. //把集合中的关键词组合成 正则表达式 123|abc|aaa
  59. //string str = string.Join("|",banned.ToArray());
  60. //if (Regex.IsMatch(context, str, RegexOptions.Singleline)) //在这里是注意IsMatch,而第三个参数为单行模式,是因为当这个敏感词之间有换行模式也可以判断其为敏感词的啦
  61. //{
  62. // MessageBox.Show("此文章中含有敏感词,禁止发表");
  63. // return;
  64. //}
  65. //string strr = string.Join("|", mod.ToArray());
  66. //if (Regex.IsMatch(context, strr, RegexOptions.Singleline))
  67. //{
  68. // MessageBox.Show("此文章中含有需要审核的词,我们需要审核");
  69. // return;
  70. //}
  71. #endregion
  72.  
  73. MessageBox.Show("发帖成功");
  74. }
  75. }

在上面我们一般使用字符串判断比较方便,但是不是很严谨的啦。所以我们一定要注意使用正则表达式的做法和我们需要根据实际情况需要考虑的。在做上面时间我根本就没考虑到会出现好多的情况的啦,但是在看啦人家的做法后自己对比啦一下知道自己考虑的太少啦。

二.XML的简单创建

XML:可扩展的标记语言; 优点:容易读懂;格式标准任何语言都内置了XML分析引擎,不用单独进行文件分析引擎的编写;XML语法规范:标签要闭合,属性值要用""包围,标签可以互相嵌套;大小写敏感;XML和HTML的区别:XML中元素必须关闭!XML中元素的属性值必须用引号。

下面就简单的总结下在XML文件中创建XML文件和在调用方法创建XML文件啦。

1.XML文件中创建XML文件

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <Books>
  3. <Book>
  4. <Name>c#图解教程</Name>
  5. <Price></Price>
  6. </Book>
  7. <Book>
  8. <Name>c#图解教程2</Name>
  9. <Price></Price>
  10. </Book>
  11. <Book>
  12. <Name>c#图解教程3</Name>
  13. <Price></Price>
  14. </Book>
  15. <Book>
  16. <Name>c#图解教程4</Name>
  17. <Price></Price>
  18. </Book>
  19. </Books>

在这里我们需要注意的是:第一行version="1.0"是版本号啦,而encoding="utf-8" 则是编码方式啦,而为什么在这里需要拿出来记忆一下那,主要是因为我们在使用类创建XML文件时,这个是要自己添加的啦,嘿嘿。

2.下面就总结一下使用方法创建XML文件啦。

  1. static void Main(string[] args)
  2. {
  3. //实例化一下内存中的xml文件
  4. XmlDocument xd = new XmlDocument();
  5. if (File.Exists("XMLFile1"))
  6. {
  7. xd.Load("XMLFile1"); //加载文件
  8. XmlElement books = xd.DocumentElement; //xml文档中的根节点,文件存在,找到根节点books,在他下面添加book节点
  9.  
  10. XmlElement book = xd.CreateElement("Book"); //book标签
  11. books.AppendChild(book);
  12.  
  13. XmlElement name = xd.CreateElement("Name");
  14. name.InnerText = "c#图解教程";
  15. book.AppendChild(name);
  16.  
  17. XmlElement price = xd.CreateElement("Price");
  18. price.InnerText = "";
  19. price.AppendChild(price);
  20. }
  21. else //当不包含文件的时间我们可以自己创建
  22. {
  23. XmlDeclaration xmll = xd.CreateXmlDeclaration("1.0","utf-8",null); //创建文件的第一行,即版本号,编码方式
  24. xd.AppendChild(xmll);
  25.  
  26. XmlElement books = xd.CreateElement("Books"); //添加根节点 Books
  27. xd.AppendChild(books); //添加文档中
  28.  
  29. XmlElement book1 = xd.CreateElement("Book"); //添加book节点 第一本书
  30. books.AppendChild(book1);
  31.  
  32. XmlElement name1 = xd.CreateElement("Name"); //添加Name节点
  33.  
  34. name1.InnerText = "<b>c#图解教程</b>"; //InnerText 如果内容中有<> 会自动转义;
  35. //name1.InnerXml = "<b>c#图解教程</b>"; //InnerXml <>不转义 作为标签
  36. book1.AppendChild(name1);
  37.  
  38. XmlElement price1 = xd.CreateElement("Price"); //添加价格Price
  39. price1.InnerText = "";
  40. book1.AppendChild(price1);
  41.  
  42. XmlElement book2 = xd.CreateElement("Book"); //添加book节点 第二本书
  43. books.AppendChild(book2);
  44.  
  45. XmlElement name2 = xd.CreateElement("Name"); //Name
  46. name2.InnerText = "c#图解教程2";
  47. book2.AppendChild(name2);
  48.  
  49. XmlElement price2 = xd.CreateElement("Price"); //Price
  50. price2.InnerText = "";
  51. book2.AppendChild(price2);
  52.  
  53. XmlElement book3 = xd.CreateElement("Book");
  54. book3.InnerXml = "<Name>c#图解教程3</Name><Price>30</Price>"; //而InnerXml可以字节添加多个标签
  55. books.AppendChild(book3);
  56. }
  57. xd.Save("books.xml"); //保存文档
  58. Console.ReadKey();
  59. }

在学习这个敏感词过滤,感觉思想上面理解,但是还是没有很好地写出来啦,正则表达式也是我们的基础,虽然不常用吧,但是我看啦一个公共类库里面好像还是有使用正则表达式处理文件和图片的啦,所以我们还是必须要知道的啦,这些对于我来说,和前面学习的C#基础相比起来真的是有点进一步啦,这个需要我熟练地掌握啦,首先感觉处理敏感词这个以后也会用到的啦,所以感觉很有兴趣学习的啦。

而XML文件之前一直在迷茫,这是什么东东啦,感觉很难得感觉,那时间在项目中看到这个,都是好奇心啦,打开啦也没看懂他是干嘛的,那时间也没使用上它,所以百度都没有查看他的啦,现在好啦,终于知道啦,嘿嘿,感觉很高兴啦,突然发现知道啦一个新的知识点感觉不错啦,以后会多动手查看自己不知道的问题啦,而且要多练习的啦。

好啦,今天就总结到这里吧,其实刚开始心情有点沉重,这里每次停电,恐怖。。。而且上课去也没有老师。。。感觉很不好啦,不过现在还好啦,嘿嘿,有啦光明而且问题也解决啦。

敏感词过滤和XML的创建的更多相关文章

  1. Jsp敏感词过滤

    Jsp敏感词过滤 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实 ...

  2. Java实现敏感词过滤 - IKAnalyzer中文分词工具

    IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...

  3. 5分钟构建无服务器敏感词过滤后端系统(基于FunctionGraph)

    摘要:开发者通过函数工作流,无需配置和管理服务器,以无服务器的方式构建应用,便能开发出一个弹性高可用的后端系统.托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行,极大地提高了开发和运维效率,减小 ...

  4. 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统

    前言 在上一篇“5分钟Serverless实践”系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例,介绍如何构建一个无 ...

  5. C# 实现敏感词过滤

    实现 该 敏感词过滤 采用的是 DFA算法,参考文章:https://blog.csdn.net/chenssy/article/details/26961957 具体 实现 步骤 如下: 第一步,构 ...

  6. 基于DFA算法、RegExp对象和vee-validate实现前端敏感词过滤

    面临敏感词过滤的问题,最简单的方案就是对要检测的文本,遍历所有敏感词,逐个检测输入的文本是否包含指定的敏感词. 很明显上面这种实现方法的检测时间会随着敏感词库数量的增加而线性增加.系统会因此面临性能和 ...

  7. java实现敏感词过滤(DFA算法)

    小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxo ...

  8. 用php实现一个敏感词过滤功能

    周末空余时间撸了一个敏感词过滤功能,下边记录下实现过程. 敏感词,一方面是你懂的,另一方面是我们自己可能也要过滤一些人身攻击或者广告信息等,具体词库可以google下,有很多. 过滤敏感词,使用简单的 ...

  9. 浅析敏感词过滤算法(C++)

    为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个TreeNode. STL::map是按照operator<比较判断元素是否相同,以及 ...

随机推荐

  1. git使用情景2:commit之后,想撤销commit

    ================实际操作============================== 提交到git上撤回 git reset head^1 提交到本地 撤回 git reset --s ...

  2. tornado 的 define 和options方法解读

    一.源码解读 tornado是facebook开源的非阻塞web容器,类似java的netty,tornado.options是负责解析tornado容器的全局参数的,同时也能够解析命令行传递的参数和 ...

  3. Numpy 的数学和统计方法

    可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算.sum.mean以及标准差std等 聚合计算(aggregation, 通常叫做约简(reduction))既可以当做数组的实例方法 ...

  4. Android ListView实现单击item出现删除按钮以及滑动出现删除按钮

    我自己一个人弄的公司的产品客户端,所以还是想记录下来以免忘记或者丢失... 在我的上一篇博文(点击打开链接)是一个文件管理的东西,基础组件也是ListView所以在此只是改动一下而已. 单击: 点击出 ...

  5. 用ARM实现音乐电子相册

    (前段时间在做嵌入式的课程设计,特将学习心得整理如下) 一.开发工具及环境介绍 1.ARM处理器 ARM处理器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计. ARM ...

  6. LCL Socket基类

    SocketBase类库主要是方便创建Socket客户端和Socket服务端的基础实现. 抽象基类:主要实现创建Socket public abstract class NetworkBase{} 通 ...

  7. js 正则去重

    split():字符串中的方法,把字符串转成数组. sort():数组中的排序方法,按照ACALL码进行排序. join():数组中的方法,把数组转换为字符串 var demo="ababb ...

  8. Mybatis中#和$区别(带脑图)

    零.引言 使用 #{name} 的时候,MyBatis会进行预编译,防止SQL注入的问题(官方话) 用一个通俗一点的例子来解释,比如有如下MyBatis的SQL语句 21.#{}和${}的区别.png ...

  9. Mac homebrew类似apt-get命令安装包

    INSTALL brew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/in ...

  10. 为npm设置代理

    npm全称为Node Packaged Modules.它是一个用于管理基于node.js编写的package的命令行工具.其本身就是基于node.js写的,这有点像gem与ruby的关系. 在我们的 ...