## 信息表:
项目 | 内容 |
---|---|
作业所属课程 | http://www.cnblogs.com/nwnu-daizh/ |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/10569690.html/ |
课程学习目标 | 熟悉软件开发整体流程,提升自身能力 |
帮助实现目标 | 第一次体验一个完整的工程 |
任务1
- 点评内容:通过阅读你的博文,我认为你的博文的结构不是很清晰,没有充分利用Markdown编辑的特点,我建议可以将每个模块用加粗字体或副标题加以区分。博客内容很简练。通过浏览你的PSP,发现你的计划时间与实际运行时间几乎相同,我认为你的计划做得很到位,但是看了实际的代码运行结果,我发现你的很多功能都没有实现,希望下次可以继续努力,完善项目。
- 点评心得:阅读完这位同学的博文,我认为她对时间的把控能力很好,PSP表可以看出是一个很会计划时间的人,这一点值得我去学习。但是她的部分任务没有完善,希望这次的结对项目对她有所帮助,也希望通过这次的结对项目,相互学习,共同进步。
任务2
【 源码地址 】
1.需求分析
- (1)实验2要求的功能;
- (2)单词频数可视化柱状图:
- (3)统计该文本行数及字符数;
- (4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
- (5)可处理任意用户导入的任意英文文本;
- (6)人机交互界面要求GUI界面(WEB页面、APP页面都可);
- (7)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
- (8)附加分功能:统计前10个两个单词组成的词组频率。
2.软件设计
项目主要包含三个类,一个是主函数Main,一个是统计单词的类SortResult,还有一个是绘制柱状图paint。
- 主函数Main中实现图形用户界面,实现各个功能。输入框3个,分别是原文本文件的文件名(采用相对路径),想要查找的一个或多个单词及绘制柱状图,想要查找的N个高频词及其词频数。两个按钮,分别是“确定”和“取消”。由于两个查找在同一个面板,防止出现冲突,若两个输入框均有输入,则实现第一个输入框的功能。点击确定后,直接将字典顺序输出到result.txt文本中,并且实现相应功能。
- SortResult中将文本中的每个单词按照字典顺序将单词及词频数输出到result.txt文本文件中。
- paint中对柱状图美化。
3.核心功能代码展示
除去冠词、代词、介词两种方法
直接删除
int i,j;
for(j=0;j<List.size();j++)
{
for(i=0;i<Eword.size();i++)
{
if(Eword.get(i).equals(List.get(j).getKey()))
{
List.remove(j);
break;
}
}
}
新建一个Map存放删选后的单词映射:
Map<String, Integer> map1=new LinkedHashMap<String, Integer>();
for(Entry<String,Integer> m: map)
{
for(i=0;i<Eword.size();i++)
{
if(Eword.get(i).equals(m.getKey()))
{
break;
}
}
if(i>=Eword.size())
{
map1.put(m.getKey(), m.getValue());
}
}
Set<Entry<String,Integer>> Map1=map1.entrySet();
LinkedList<Entry<String, Integer>> List = new LinkedList<Entry<String,Integer>>(Map1);
//排序
Collections.sort(List, new Comparator<Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> wk1, Entry<String, Integer> wk2) {
return wk1.getKey().compareTo(wk2.getKey());
}
});
原本的代码实现在paint中画图显示,但是为了传参,new main()后显示出柱状图后会跳出Main函数的主框架
public paint(){
JFreeChart chart = ChartFactory.createBarChart3D(
"词频统计",
"单词",
"数量",
new Main().dataset,
PlotOrientation.VERTICAL,
true,
false,
false
);
CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
CategoryAxis domainAxis=plot.getDomainAxis(); //水平底部列表
domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14)); //水平底部标题
domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12)); //垂直标题
ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体
frame1=new ChartPanel(chart,true);
}
为了解决问题,将建立图表信息的代码写入在main中,统计用户输入单词词频及绘制柱状图
for(i=0; i<input.length; i++)
{
for(Entry<String, Integer> entry : wordsStatistics.entrySet())
{
if(input[i].equals(entry.getKey()))
{
map.put(entry.getKey(), entry.getValue());
print2+=entry.getKey()+":
";
for(int j=0;j<entry.getValue()/100;j++)
print2+="*";
print2+="
";
print += entry.getKey() + ":" + entry.getValue()+" ";
dataset.addValue(entry.getValue(),entry.getKey(),entry.getValue());
break;
}
}
}
long end = System.currentTimeMillis();
JOptionPane.showConfirmDialog(null, print+print2+"
运行时长"+(end-start)+"ms","结果",JOptionPane.DEFAULT_OPTION);
JFreeChart chart = ChartFactory.createBarChart3D(
"词频统计", // 图表标题
"单词", // 文件夹轴的显示标签
"数量", // 数值轴的显示标签
dataset,//.dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
paint p = new paint(chart);
JFrame frame=new JFrame("Java数据统计图");
frame.setLayout(new GridLayout(2,2,10,10));
frame.add(p.getChartPanel()); //加入柱形图
frame.setBounds(50, 50, 800, 600);
frame.setVisible(true);
}
统计行数、列数
while((read = br.readLine()) != null)
{
linenumber++;//行数
charnumber+=read.length();//字符数
for (String w:read.split("[^a-zA-Z]"))
{
if(w.length()!= 0)
{
list.add(w);
}
}
}
4.程序运行
程序运行前添加自定义jar包Libraries:
统计用户输入单词的词频,显示系统运行时间:
生成相应的柱状图:
若不退出程序继续查看其它单词词频,则柱状图将相应的单词柱状图添加到原有的图中:
要除去的冠词、代词、介词:
统计用户输入的n个文本中除冠词、代词、介词之外的高频词并显示运行时间:
统计该文本行数、字符数及每个单词和相应的词频,并将其写入到文件中,生成result.txt文件:
5.结对过程:
6.PSP
PSP2.1 | 任务内容 | 计划完成时间(min) | 实际完成时间(min) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
.Estimate | .估计这个任务需要多少时间,并规划大致工作步骤 | 20 | 20 |
Development | 开发 | 700 | 9600 |
.Analysis | .需求分析(包括学习新技术) | 30 | 30 |
.Design Spec | .生成设计文档 | 35 | 30 |
.Design Review | .设计复审 | 10 | 10 |
.Coding Standard | .代码规范 | 5 | 5 |
.Design | .具体设计 | 60 | 60 |
.Coding | .具体编码 | 480 | 720 |
.Code Review | .代码复审 | 60 | 80 |
.test | .测试 | 20 | 25 |
Reporting | 报告 | 120 | 120 |
.Test Report | .测试报告 | 100 | 100 |
.Size Measurement | .计算工作量 | 20 | 20 |
.Postmortem & Process Improvement Plan | .事后总结,病提出过程改进计划 | 28 | 20 |
7.小结感受
这次的合作让我切身感受到结对项目的过程,让我体会到了交流沟通对结对合作的重要性,有时候两个人的想法会发生分歧,很好的沟通会使我们的效率变得更高。
分工明确会使项目进展较快,不会在同一个问题上浪费时间。遇到问题时,会相互沟通交流,解决问题。