201671010427 孙苗坤 词频统计软件项目报告
1.需求分析:
本实验用java语言进行编写,要求
-
程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
-
程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
-
指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。
-
高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
-
统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。
2. 功能设计:
- 文件读入功能
- 指定单词统计功能
- 显示指定单词统计的柱状图功能
- 文件高频词统计功能
- 所有单词数量及词频数统计,将结果输入到result.txt的功能
3. 设计实现:
- 文件读入功能:Main.java利用map集合的方法,把所有键值显示出来,之后再获取map方法即可。
- 指定单词统计功能: fengzhuang.java,对文件中的单词进行统计并显示出来。
- 显示指定单词统计的柱状图功能:Main.java,对文件中的单词统计后用柱状图显示。
- 文件高频词统计功能:fengzhuang.java,对文件中的高频词进行显示,并统计。
- 所有单词数量及词频数统计:Main.java,将整个文档的单词及词频数按字典顺序输出到result.txt中,保存。
4. 测试运行:
文件读入功能
指定单词统计功能
显示指定单词统计的柱状图功能
所有单词数量及词频数统计,将结果输入到result.txt的功能
5. 代码:
通过map集合、treemap、调用类方法、输入输出等方法实现对指定单词的统计功能。
System.out.println("请输入你要查找的单词,用逗号隔开");
String s1=sc.next();
//调用类方法
fengzhuang f1=new fengzhuang();
str=f1.one(map, s1);//s1查指定单词 map查所有的单词
Main s3=new Main();
s3.setVisible(true);
public String[] one(TreeMap<String,Integer> map,String str){
TreeMap<String,Integer> map1 = new TreeMap<String,Integer>();
String[] s2=str.split(",");
for (int i = 0; i < s2.length; i++) {
for(Entry<String,Integer> entry: map.entrySet()) {
if(s2[i].equals(entry.getKey())){
map1.put(entry.getKey(),entry.getValue());
System.out.println(entry.getKey()+"=="+entry.getValue());
break;
}
}
}
return s2;
6. 总结:
在程序设计中,将整个程序按不同的功能划分为不同的模块,并在这些模块之间建立必要的联系,共同完成程序所要实现的功能。但由于实力不足,高频词统计功能未能实现,以后要加强代码的练习,提高编程的能力。
7. PSP
||||||||||||||
|:--|:--|:--|:--|
|PSP2.1|任务内容|计划共完成需要的时间(min)|实际完成需要的时间(min)|
|Planning|计划|15|15|
|· Estimate|· 估计这个任务需要多少时间,并规划大致工作步骤|15|15|
|Development|开发|146|218|
|·· Analysis |需求分析 (包括学习新技术)|25|35|
|· Design Spec|· 生成设计文档|25|35|
|· Design Review|· 设计复审 |10|15|
|· Coding Standard |代码规范 |10|10|
|· Design| 具体设计|30|50|
|· Coding| 具体编码|120|240|
|· Code Review|· 代码复审|15|20|
|· Test|· 测试(自我测试,修改代码,提交修改)|30|50|
|Reporting|报告|25|30|
|·· Test Report|· 测试报告|30|40|
|· Size Measurement |计算工作量|10|10|
|· Postmortem & Process Improvement Plan|· 事后总结 ,并提出过程改进计划|15|20|
-
从PSP表中可以看出每个阶段的计划完成时间和实际完成时间还是有一定的差距的,由于对于Java语言的掌握不够好,导致这次作业刚开始做的时候思路不清晰,编码过程比较困难,但通过查阅资料和寻求同学的帮助,基本完成了这次作业。通过这次作业,我意识到自己对Java语言掌握的并不熟练,有一些方法也不懂,以后要加强自己的编程能力,提高自己对Java语言的掌握度,争取写出更好的程序。