国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Individual Project

2019-11-17 02:51:55
字體:
來源:轉載
供稿:網友

Individual PRoject - Word_frequency

作業說明詳見:http://m.survivalescaperooms.com/jiel/p/3978727.html

一.預先準備和時間規劃

1.安裝Microsoft Visual Studio Ultimate 2012,之前安裝過一次,預計2小時左右,但是安裝過程中可以繼續進行其它任務。

2.閱讀題目要求,理解要實現的功能,預計20min左右。

3.根據題目,設計程序框架,預計10min左右。

4.閱讀相關文檔,學習所需要的類的命名空間,屬性和方法,預計1小時左右。

5.初步完成程序編寫,預計3小時左右。

6.設計測試數據,對出現的Bug進行改進,預計2小時左右。

二.實際用時和具體過程

1.安裝Microsoft Visual Studio Ultimate 2012,網址如下:

  http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=30678

網速較快用時1小時。

2.閱讀題目要求,理解要實現的功能:實現一個文本詞頻統計器,可以實現統計單詞數目,2聯短語數目,3聯短語數目。單詞比較忽略大小寫,輸出時按照詞頻從大到小排序,相等時按字典序排序,用時15min。

3.根據題目,設計程序框架,完善代碼:(用時大約4小時)

  (1)根據讀入目錄路徑,獲取目錄子文件:

1 String[] files = Directory.GetFiles(path);
View Code

  (2)讀取每個文件的內容:

 1 foreach (String i in files) 2 { 3     String extension = i.Substring(i.LastIndexOf(".")+1, i.Length - i.LastIndexOf(".")-1); 4     if (!extension.Equals("txt") && 5         !extension.Equals("cpp") && 6         !extension.Equals("h") && 7         !extension.Equals("cs")) continue;//只處理特定格式的文件 8     if (i.Equals(path+"http://"+"12061162.txt")) continue; 9     String[] text = rgxwords.Split(File.ReadAllText(i));10 }
View Code

  (3)對于獲取的文本信息整理:先將文本拆分成若干行或者句子,設定三個Regex類,分別匹配單個單詞,2兩個由單個空格隔開的單詞,3個由單個單詞隔開的單詞。調用Regex.Match()方法和Regex.NextMatch方法匹配所有可匹配項:

    數據存放數組定義如下:

1 ArrayList data = new ArrayList();//當前小說的單詞數據2 ArrayList word_word = new ArrayList();//e2模式短語的數據3 ArrayList word_word_word = new ArrayList();//e3模式短語的數據
View Code

    模板定義如下:

1 Regex rgxwords = new Regex("[/n/r,.//(//)//{//}//{//]:/"!;]+");//將文本拆分成一句或一行一個2 Regex regword1 = new Regex("[a-zA-Z]{3}[0-9a-zA-Z]*");//Simple mode的模式3 Regex regword2 = new Regex("[a-zA-Z]{3}[0-9a-zA-Z]* [a-zA-Z]{3}[0-9a-zA-Z]*");//Extended mode2的模式4 Regex regword3 = new Regex("[a-zA-Z]{3}[0-9a-zA-Z]* [a-zA-Z]{3}[0-9a-zA-Z]* [a-zA-Z]{3}[0-9a-zA-Z]*");//Extended mode3的模式
View Code

    具體過程如下:

 1 Match match = regword1.Match(text[j], 0); 2 while (match.Success) 3 { 4     data.Add(new Data(match.Value, 1));//simple mode的數據更新 5     match = match.NextMatch(); 6 } 7 Match match2 = regword2.Match(text[j], 0); 8  Match match1 = regword1.Match(text[j],match2.Index); 9 while (match2.Success)10 {11     word_word.Add(new Data(match2.Value, 1));12     match2 = regword2.Match(text[j], match1.Index+1);13     match1 = match1.NextMatch();14 }//extend mode2的數據更新15 match2 = regword3.Match(text[j], 0);16 match1 = regword1.Match(text[j],match2.Index);17 while (match2.Success)18 {19     word_word_word.Add(new Data(match2.Value, 1));20     match2 = regword3.Match(text[j], match1.Index + 1);21     match1 = match1.NextMatch();22 }//extend mode3的數據更新   
View Code

   (4)對于存取數據的ArrayList類整理排序:主要運用ArrayList.sort(IComparer)方法,需要自己實現IComparer接口。

 1         class myReverserClass1 : IComparer 2         //自定義比較器,用于字典序排序 3         { 4             int MyStringCompare(String x, String y) 5             //自定義了字符串比較方法: 6             //忽略大小寫排序,但是大寫相對靠前 7             //如hello,world,World,zoo 8             //排序后變成hello,World,world,zoo 9             {10                 int lx = x.Count(), ly = y.Count(), i;11                 String xx = x.ToUpper();12                 String yy = y.ToUpper();13                 for (i = 0; i < lx && i < ly; i++)14                     if (xx[i] == yy[i]) continue;15                     else return xx[i] - yy[i];16                 if (i == lx && i < ly) return -1;17                 else if (i < lx && i == ly) return 1;18                 else19                 {20                     for (i = 0; i < lx && i < ly; i++)21                         if (x[i] == y[i]) continue;22                         else return y[i] - x[i];23                     return 0;24                 }25             }26             int IComparer.Compare(Object x, Object y)27             {28                 return MyStringCompare(((Data)y).word, ((Data)x).word);29             }30         }31         class myReverserClass2 : IComparer32         //自定義比較器,用于單詞頻率排序33         {34             int MyStringCompare(String x, String y)35             //自定義了字符串比較方法:36             //忽略大小寫排序,但是大寫相對靠前37             //如hello,world,World,zoo38             //排序后變成hello,World,world,zoo39             {40                 int lx = x.Count(), ly = y.Count(), i;41                 String xx = x.ToUpper();42                 String yy = y.ToUpper();43                 for (i = 0; i < lx && i < ly; i++)44                     if (xx[i] == yy[i]) continue;45                     else return xx[i] - yy[i];46                 if (i == lx && i < ly) return -1;47                 else if (i < lx && i == ly) return 1;48                 else49                 {50                     for (i = 0; i < lx && i < ly; i++)51                         if (x[i] == y[i]) continue;52                         else return y[i] - x[i];53                     return 0;54                 }55             }56             int IComparer.Compare(Object x, Object y)57             {58                 if (((Data)x).num > ((Data)y).num) return -1;59                 else if (((Data)x).num < ((Data)y).num) return 1;60                 else return MyStringCompare(((Data)x).word, ((Data)y).word);61             }62         }
View Code

   設計相關方法去掉重復單詞,記錄次數:

   

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河源市| 景东| 大名县| 石河子市| 思南县| 隆德县| 若尔盖县| 肇源县| 北川| 长子县| 肇庆市| 应用必备| 微博| 恩施市| 南靖县| 石狮市| 靖州| 沙雅县| 扶沟县| 娱乐| 获嘉县| 富平县| 尚义县| 平果县| 新和县| 楚雄市| 霍城县| 大新县| 神农架林区| 海门市| 龙井市| 福州市| 虹口区| 金华市| 绥芬河市| 寿宁县| 来安县| 隆子县| 响水县| 甘孜县| 栾城县|