今天我慢下來啦,因為這三天沒有新的課程學習內容,自己僅僅看啦一些,這讓我停下來棲息片刻;說說現在的生活,簡單的進行着,每天要奔波着去上課,然后回來,每天都在想怎樣學習這個小知識點,大腦也在想怎樣解決程序中的問題,每一天就是這樣的開始,這樣的結束;現在感覺:自己像一台電腦一樣,難道被病毒入侵啦嗎?但是這樣的我仍然是快樂的,我因為興趣而開始來習慣這樣的生活的,所以一切的一切都是理所當然的,也是我已經預料到的,現在就是感覺有問題啦每次百度還是很難結局啊,不知道該怎么辦,有點糾結,我的培訓班的選擇真的讓我好失望啊,感覺社會是永遠不會公平的,我們既然改變不了,就試着去接受吧。
下面就總結一下我今天學習的一些內容,今天學習啦一下怎樣過濾敏感詞的,由於之前我一個同學問我怎樣去過濾文件中的敏感詞,那時間做啦一下,但是做的結果不理想,現在就使用正則表達式來寫一下啦。
一.敏感詞的過濾
我們先創建一個窗體,然后在窗體上面拖拉兩個控件,TextBox和Button,如下圖所示:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } List<string> mod = new List<string>(); //需要審核的,在這里我們定義一個泛型集合存儲 List<string> banned = new List<string>();//直接提示禁止使用的敏感詞 private void Form1_Load(object sender, EventArgs e) { string[] lines = File.ReadAllLines(@"F:\img\過濾詞.txt", Encoding.Default);//在這里我們讀取文件中的敏感詞存放在一個數組中 foreach (string line in lines) //遍歷出來每一項 { Match match = Regex.Match(line, @"(.+)=\{(\w+)\}"); //在這里使用的是正則表達式進行匹配 if (match.Success) //在這里判斷一下是否匹配成功 { string key = match.Groups[1].Value;//成功時間我們就把敏感詞匯放在讀出 string type = match.Groups[2].Value.ToLower(); //在這里是存儲該敏感詞的類型,是敏感詞還是需要審核的詞,要注意轉換為小寫,在這里容易出錯的地方 if (type.Equals("mod")) { mod.Add(key); //在這里是如果是mod類型的那么我們就記錄一下,當發生按鈕單擊事件時我們可以提示 } else if (type.Equals("banned")) { banned.Add(key); } } } } private void button1_Click(object sender, EventArgs e) { string context = this.textBox1.Text; #region 字符串判斷是否包含敏感詞 foreach (string key in banned) //在這里有一個先后順序,我們應該先判斷是否含有敏感詞 { if (context.Contains(key)) //在這里需要注意的是:我們遍歷出來的是key,一低昂判斷的是是否包含key啦 { MessageBox.Show("此文章中含有敏感詞,禁止發表"); return; } } foreach (string key in mod) //在這里有一個先后順序,我們應該先判斷是否含有敏感詞 { if (context.Contains(key)) { MessageBox.Show("此文章中含有需要審核的詞,我們需要審核"); return; } } #endregion #region 使用正則表達式判斷 //在這里需要注意我們的實際情況,例如:我們拿“教瘦”這個敏感詞來說,我們可能會在它中間加一個空格.下划線等符號,然后使用字符串判斷就可以成功, //而現在我們需要的是在其中添加任意符號,我們都是它禁止發表文章的啦,所以我們可以使用正則表達式來判斷的啦 //把集合中的關鍵詞組合成 正則表達式 123|abc|aaa //string str = string.Join("|",banned.ToArray()); //if (Regex.IsMatch(context, str, RegexOptions.Singleline)) //在這里是注意IsMatch,而第三個參數為單行模式,是因為當這個敏感詞之間有換行模式也可以判斷其為敏感詞的啦 //{ // MessageBox.Show("此文章中含有敏感詞,禁止發表"); // return; //} //string strr = string.Join("|", mod.ToArray()); //if (Regex.IsMatch(context, strr, RegexOptions.Singleline)) //{ // MessageBox.Show("此文章中含有需要審核的詞,我們需要審核"); // return; //} #endregion MessageBox.Show("發帖成功"); } }
在上面我們一般使用字符串判斷比較方便,但是不是很嚴謹的啦。所以我們一定要注意使用正則表達式的做法和我們需要根據實際情況需要考慮的。在做上面時間我根本就沒考慮到會出現好多的情況的啦,但是在看啦人家的做法后自己對比啦一下知道自己考慮的太少啦。
二.XML的簡單創建
XML:可擴展的標記語言; 優點:容易讀懂;格式標准任何語言都內置了XML分析引擎,不用單獨進行文件分析引擎的編寫;XML語法規范:標簽要閉合,屬性值要用""包圍,標簽可以互相嵌套;大小寫敏感;XML和HTML的區別:XML中元素必須關閉!XML中元素的屬性值必須用引號。
下面就簡單的總結下在XML文件中創建XML文件和在調用方法創建XML文件啦。
1.XML文件中創建XML文件
<?xml version="1.0" encoding="utf-8" ?> <Books> <Book> <Name>c#圖解教程</Name> <Price>10</Price> </Book> <Book> <Name>c#圖解教程2</Name> <Price>20</Price> </Book> <Book> <Name>c#圖解教程3</Name> <Price>30</Price> </Book> <Book> <Name>c#圖解教程4</Name> <Price>20</Price> </Book> </Books>
在這里我們需要注意的是:第一行version="1.0"是版本號啦,而encoding="utf-8" 則是編碼方式啦,而為什么在這里需要拿出來記憶一下那,主要是因為我們在使用類創建XML文件時,這個是要自己添加的啦,嘿嘿。
2.下面就總結一下使用方法創建XML文件啦。
static void Main(string[] args) { //實例化一下內存中的xml文件 XmlDocument xd = new XmlDocument(); if (File.Exists("XMLFile1")) { xd.Load("XMLFile1"); //加載文件 XmlElement books = xd.DocumentElement; //xml文檔中的根節點,文件存在,找到根節點books,在他下面添加book節點 XmlElement book = xd.CreateElement("Book"); //book標簽 books.AppendChild(book); XmlElement name = xd.CreateElement("Name"); name.InnerText = "c#圖解教程"; book.AppendChild(name); XmlElement price = xd.CreateElement("Price"); price.InnerText = "10"; price.AppendChild(price); } else //當不包含文件的時間我們可以自己創建 { XmlDeclaration xmll = xd.CreateXmlDeclaration("1.0","utf-8",null); //創建文件的第一行,即版本號,編碼方式 xd.AppendChild(xmll); XmlElement books = xd.CreateElement("Books"); //添加根節點 Books xd.AppendChild(books); //添加文檔中 XmlElement book1 = xd.CreateElement("Book"); //添加book節點 第一本書 books.AppendChild(book1); XmlElement name1 = xd.CreateElement("Name"); //添加Name節點 name1.InnerText = "<b>c#圖解教程</b>"; //InnerText 如果內容中有<> 會自動轉義; //name1.InnerXml = "<b>c#圖解教程</b>"; //InnerXml <>不轉義 作為標簽 book1.AppendChild(name1); XmlElement price1 = xd.CreateElement("Price"); //添加價格Price price1.InnerText = "10"; book1.AppendChild(price1); XmlElement book2 = xd.CreateElement("Book"); //添加book節點 第二本書 books.AppendChild(book2); XmlElement name2 = xd.CreateElement("Name"); //Name name2.InnerText = "c#圖解教程2"; book2.AppendChild(name2); XmlElement price2 = xd.CreateElement("Price"); //Price price2.InnerText = "20"; book2.AppendChild(price2); XmlElement book3 = xd.CreateElement("Book"); book3.InnerXml = "<Name>c#圖解教程3</Name><Price>30</Price>"; //而InnerXml可以字節添加多個標簽 books.AppendChild(book3); } xd.Save("books.xml"); //保存文檔 Console.ReadKey(); }
在學習這個敏感詞過濾,感覺思想上面理解,但是還是沒有很好地寫出來啦,正則表達式也是我們的基礎,雖然不常用吧,但是我看啦一個公共類庫里面好像還是有使用正則表達式處理文件和圖片的啦,所以我們還是必須要知道的啦,這些對於我來說,和前面學習的C#基礎相比起來真的是有點進一步啦,這個需要我熟練地掌握啦,首先感覺處理敏感詞這個以后也會用到的啦,所以感覺很有興趣學習的啦。
而XML文件之前一直在迷茫,這是什么東東啦,感覺很難得感覺,那時間在項目中看到這個,都是好奇心啦,打開啦也沒看懂他是干嘛的,那時間也沒使用上它,所以百度都沒有查看他的啦,現在好啦,終於知道啦,嘿嘿,感覺很高興啦,突然發現知道啦一個新的知識點感覺不錯啦,以后會多動手查看自己不知道的問題啦,而且要多練習的啦。
好啦,今天就總結到這里吧,其實剛開始心情有點沉重,這里每次停電,恐怖。。。而且上課去也沒有老師。。。感覺很不好啦,不過現在還好啦,嘿嘿,有啦光明而且問題也解決啦。