201671010408-达星斗-词频统计软件项目报告
在Github的仓库主页的链接地址:
https://github.com/daxd123/mygit/blob/master/词频统计代码.java
1.需求分析:
(1).程序可读入任意英文文本文件,该文件中英文词数大于等于1个。
(2).程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
(3).指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和 柱状图。
(4).高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
(5).统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。
2. 功能设计:
基本功能:
(1).可导入任意英文文本文件
(2).统计该英文文件中单词数和各单词出现的频率(次数),并能将单词按字典
顺序输出。
(3).将单词数量及频率写入文件。
扩展功能:无
3. 设计实现:
首先,设定文件读取路径,若读取不成功,则显示输出系统找不到指定的文件;若读取成功,则统计单词总数sum和每个单词个数及频率。
a. 预处理模块:
( 1 ) readText()
读文本数据,计算词频
(2)check()
过滤无意义的单词
(3)sort( )
对单词词频进行从高到底排序,取前20个单词。
b. 可视化模块:
单词云:将选出的数据通过大小,位置和颜色区分可视化出来。
初始化: text()构造函数
设置颜色: setColor()
设置大小: setTextSize()
运行(绘制):run( )
4. 测试运行:
5.部分代码:
while ((s = bufferedReader.readLine()) != null) {
Map<String, Integer> map = new TreeMap<String, Integer>();
//创建一个words数组,分割字符串,来统计单词出现的次数
String[] words = s.split("[【】、.。,\"!--;:?\'\\] ]");
for (int i = 0; i < words.length; i++) {
String key = words[i].toLowerCase();
if (key.length() > 0) {
if (!map.containsKey(key)) {
map.put(key, 1);
} else {// 如果不是第一次出现,就把value值++,那么value值是多少就是出现了几次
int value = map.get(key);
value++;
map.put(key, value);
}
}
6. 总结:
一个类只负责一项职责,是防止当由于其中一个类的需求发生改变而需要修改该类时,有可能会导致原本运行正常的另一个类的功能发生故障。
7.
展示PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 8 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 10 |
Development | 开发 | 150 | 200 |
Analysis | 需求分析 (包括学习新技术) | 10 | 6 |
Design Spec | 生成设计文档 | 15 | 16 |
Design Review | 设计复审 (和同事审核设计文档) | 3 | 5 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 6 | 6 |
Design | 具体设计 | 15 | 20 |
Coding | 具体编码 | 100 | 120 |
Code Review | 代码复审 | 15 | 25 |
Test | 测试(自我测试,修改代码,提交修改) | 15 | 10 |
Reporting | 报告 | 15 | 20 |
Test Report | 测试报告 | 10 | 15 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 20 | 15 |
8.分享心得:
通过这次软件工程个人项目的开发,让我感触很深。我觉得软件项目的开发应该是一个团队来做,因为过程很是繁琐。一个团队来做的话,会有明确的分工,就不会导致手忙脚乱的情况。还有就是,我觉得自己对java一点都不了解,代码也是问了很多的同学才写出来的。对于软件工程这门课来说,掌握一门编程语言很是必要的,所以我应该去好好学习一门编程语言。