(一)需求分析
(1)程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
(2)程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
(3)指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的 次数和柱状图。
(4)高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
(5)统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt
(二)功能设计
基本功能:
- 程序能够读入任意文本文件
-用户能够查找文件中的单词及出现的次数
-能够对前k个高频单词降序输出
扩展功能:
无
(三). 设计实现
MainClass该类主要进行文件的读取,调用其他类,以及首页功能界面的显示。
Sort该类进行统计文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。
Wordcount,该类有两个函数,count函数实现用户输入若干单词后词频及柱状图的显示,Highcount函数实现用户想要查看的前k个高频单词。
(四)测试运行
首页功能界面
查看单词词频及柱状图
查看高频单词
查看所有单词词频
退出系统
(五)代码片段,
/*对原文件中的单词按词频进行排序*/
File file = new File("src/result.txt");
Set<Entry<String,Integer>> mapEntries = Map.entrySet();
LinkedList<Entry<String, Integer>> List = new LinkedList<Entry<String,Integer>>(mapEntries);
Collections.sort(List, new Comparator<Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> ele1, Entry<String, Integer> ele2) {
return ele1.getKey().compareTo(ele2.getKey());
}
});
try {
if(file.exists()) {
file.createNewFile();
}
FileWriter writer = new FileWriter(file.getAbsoluteFile());
for(Entry<String,Integer> e : Map2.entrySet()) {
writer.write(e.getKey()+": "+e.getValue()+"
");
}
writer.close();
System.out.println("存储结束!可以在文件中查看");
}catch(IOException e) {e.printStackTrace();
(六)总结:
在本次设计过程中我设计了3个模块,一个是文件读取模块,一个是统计词频模块,三是文件写入模块。模块化的设计让我在设计过程中每一个过程的完成都有不同的成就感。而且在调试代码时也让我能更加快速的找到原因并且解决。
(七) 展示PSP
在本次的项目中耗时最长的就是编写代码的环节,一是由于长时间没有练习Java,好多基础知识已经忘记了,花了一段时间来复习这些,二是由于要学习新的内容花费了较长的时间,因为当时学习Java时文件这部分的内容时略讲的所以其中的有些方法不是很清楚,三是由于自己水平的问题,平时练习编写代码的时间较少,应该在今后的时间多练习。