201671030118 词频统计软件项目报告
(一).需求分析
—程序可读入任意的英文文本文件,该文件中的英文词数大于等于一个。
—能够读取容纳英文原版《哈利波特》10万词以上的文章。
—.要有指定单词的词频统计功能,即用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图;
—高频单词统计功能,即用户共键盘输入高频词输出个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词;
—统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt
(二)功能设计
基本功能:
—统计文件中单词,并输出到指定文件
—根据题目要求读入文件
— 查询文件中单词出现的次数
—文本中的词频数降序显示前K个单词以及柱状图
扩展功能:
目前没有
(三).设计实现
Figure.java :统计前K个出现的频次最高的单词及词频的柱状图
StatisticalWord.java: 输入一个单词统计单词在文章中出现的个数,如果不在提示不在!
WordList.java :统计文件中单词出现的频数并输出到文件
这三个类和一个Main()函数,用户可以根据不同功能进行选择
(四).测试运行
功能1: 统计单词个数,并把结果存到result.txt中。
功能2:输入一个单词,统计其在文中出现的词数。
没有此单词:
功能3:出入前最高K个词频从多到少并用柱状图(由于图片大小缘故柱状图没有显示明显的差距。)
(五).关键代码
显示柱状图:
System.out.println("请输入要查看的最高词频的个数:");
int k = sc.nextInt();
if(k>0&&k<=ordlist.size())
{
System.out.println("----------词频最高的前"+k+"个单词及其柱状图-----------");
for (Map.Entry<String, Integer> entry : ordlist) {
System.out.printf("单词 "+"%-8s" + "出现" +"%-3d"+"次 ",entry.getKey(),entry.getValue());
//用符号个数来显示模拟柱状图
for(int i=entry.getValue();i>0;i--)
{
System.out.print("▏");
}
System.out.println();
//System.out.println(entry.getKey() + ":" + entry.getValue());
if(--k==0)
break;//k=0,则不再输出后面的词频
}
System.out.println("------------------------------------------------");
}else{
System.out.println("输入有误!请重新输入!");
}
将输出结果发送到results.txt中:
try
{
FileWriter fw= new FileWriter("src\\results.txt");
System.out.println("词频统计结果已输出列 result.txt文件·");
}
catch (IOException e)
{
e.printStackTrace();
}
进行排序
Comparator<Map.Entry<String, Integer>> valcom = new Comparator<Map.Entry<String,Integer>>() {
public int compare(Map.Entry<String, Integer> rst1,Map.Entry<String, Integer> rst2) {
int sortrst=rst2.getValue()-rst1.getValue();
return sortrst;
}
};
List<Map.Entry<String, Integer>> ordlist = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
Collections.sort(ordlist,valcom);
(六).总结
通过这次的项目发现,之前学过的JAVA忘的一干二净,本来就基础不好,学到的一点也忘了,所以这次代码编写花费了很多时间,需要通过网上和课本以及同学的帮助下大概的完成了项目,但还是有很多问题,需要我花更多的时间学习。
(七).psp
psp | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 15 | 10 |
Estimate | 估计这个任务需要多少时间,并规划大致的工作步骤 | 5 | 10 |
Development | 开发 | 120 | 150 |
Analysis | 需求分析(包括学习新技术) | 30 | 60 |
Design Spec | 生成设计文档 | 30 | 20 |
Design Review | 设计复审(和同学审核设计文档) | 15 | 10 |
Coding Standard | 代码规范化(为目前的开发制定合适的规范) | 20 | 30 |
Design | 具体设计 | 120 | 180 |
Coding | 具体编码 | 180 | 220 |
Code Review | 代码复审 | 30 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 20 | 15 |
Reporting | 报告 | 50 | 35 |
Test Report | 测试报告 | 20 | 15 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem &Process Improvement plan | 事后总结,并提出过程改进计划 | 15 | 10 |