本周作业是词频统计,编程具体要求如下:
https://edu.cnblogs.com/campus/nenu/2018fall/homework/2126
本篇博客主要介绍“项目”中每个功能的重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。
本周作业是词频统计,拿到题目最初的,我决定用C#来完成此次作业,因为大学期间我大多数时间学习的是C#,对C#有更多的理解,但是C#的编程能力并不是很强,于是我花了一些时间去复习C#的基础操作,又百度了许多不太会的知识点,来完成这次作业。
以下是每个功能的重点难点,重要代码片段以及执行效果。
一,重点难点以及得意与突破
功能一是小文件输入。需要在控制台下输入命令,得到文件中不重复的总单词数。并对单词出现的次数进行排序输出。
难点1.对我来说,如何导入文件是一个难点,查了许多资料。
难点2.如何分割字符串,将大写字母开头全部转换成小写字母?
难点3.如何将单词按从大到小排序?
难点4.如何实现输出对齐?
难点5.如何实现过滤重复单词?
重点:读入和输出文件,建立哈希表,用哈希表排序。
得意和突破的地方:前面试了许多次输出总单词数都是6,改了很多次,终于成功过滤重复词。
功能二是支持命令行输入英文作品的文件名,亲自录入,输出显示不重复单词总数,并对出现频率最高的前10的单词进行输出。
难点1.如何统计一本小说的单词量?
难点2.如何正确排出前十的单词数?
难点3.如何将功能1和2整合到一起?
难点4.如何实现版本控制?
重点:读入小说,将高频词汇排序。
得意的地方是成功排出前十的单词。
功能三和功能四研究了好久,bug许多,得不出结果,在此放弃。
二,重要代码片段
使用正则表达式
1 sline = Regex.Replace(sline, @"[^a-zA-Z0-9u4e00-u9fa5s]", " "); 2 sline = Regex.Replace(sline, "[!@#$%^&*()`,./;':"<>`?...]", " ");
建立哈希表,按哈希的值进行词频排序,结果的输出
1 Hashtable has = new Hashtable();//建立哈希表 2 for (int i = 0; i < M.Length; i++) 3 { 4 if (has.ContainsKey(M[i])) 5 { 6 has[M[i]] = (int)has[M[i]] + 1; 7 } 8 else 9 { 10 has.Add(M[i], 1); 11 } 12 }
1 if (has.Count <= 10)//输出文本单词个数 2 { 3 Console.WriteLine("total " + has.Count); 4 Console.WriteLine(); 5 6 } 7 else 8 { 9 Console.WriteLine("total " + has.Count + " words"); 10 Console.WriteLine(); 11 }
1 Array.Sort(hasValue, hasKey);//按哈希表的值排序 2 int n = 0; 3 for (int i = hasKey.Length - 1; i >= 0; i--) 4 { 5 if ((string)hasKey[i] != "") 6 { 7 if (has.Count <= 10) 8 { 9 10 Console.Write(hasKey[i].ToString().PadRight(12, ' ')); 11 12 Console.WriteLine(hasValue[i]);//从高到低输出单词 13 14 } 15 else 16 { 17 18 if (n < 10) 19 { 20 Console.Write(hasKey[i].ToString().PadRight(12, ' ')); 21 Console.WriteLine(hasValue[i]); 22 n++; 23 } 24 } 25 26 } 27 }
三,执行效果
功能一输出结果
功能二输出结果
功能一功能二合并后执行结果截图
四.PSP阶段表格
PSP | 预计时间 | 实际时间 | 时间差 | 时间差原因 |
复习C# | 60min | 74min | 14min | C#很多知识点都已经模糊 |
功能一的编写 | 160min | 253min | 93min | 不知道如何实现录入文件输出文字 |
功能一的完善 | 30min | 78min | 58min | 修复比如词数统计不准等问题,查了许多资料,试了很多方法 |
功能二的编写 | 200min | 244min | 44min | 有了一的基础,编写快了许多,但是有许多新加内容如小说字数多等问题比较耗时 |
功能二的完善 | 180min | 282min | 102min | 大文件输入后总是运行出错,调整了许多次 |
功能三 | 300min | 42min | 258min | 查了许多资料,头绪混乱,时间不足,就放弃了 |
整合功能一和功能二 | 60min | 219min | 159min | 以为会很简单,结果放在一起之后并不能实施,要么就只能完成一个功能,有时闪退,花了大量时间 |
五.代码及版本控制 【https://git.coding.net/lulululu88/ci.git】