201671030126赵佳平《英文文本统计分析》结对项目报告
信息表
项目 | 内容 |
---|---|
次作业所属课程 | 软件工程 |
作业要求 | 作业要求内容 |
课程学习目标 | 熟悉软件开发整体流程,提升自身能力 |
本次作业在哪个具体方面帮助我们实现目标 | 第一次体验一个完整的工程 |
任务一
- 博客地址
- 点评内容:整体博文的结构很好,但是一些图片的布局有一点不好,另外在菜单中要将具体实现的功能体现出来,不然不知道功能是否实现或者不清楚菜单的选择;最后应该要注意博文中的错别字。表格和代码的插入值得学习,使得整体界面更加美观。
- 点评心得:阅读完这位同学的博文之后,让我意识到我的博文整体还不是很美观,应该更少地使用截图的形式。
任务二
- 源码地址
- 1.需求分析
(1)实验2要求的功能;
(2)单词频数可视化柱状图
(3)统计该文本行数及字符数;
(4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
(5)可处理任意用户导入的任意英文文本;
(6)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(7)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
(8)附加分功能:统计前10个两个单词组成的词组频率。 - 2.软件设计
项目主要有3个包,2个登陆界面的类(loginFrame.java,loginPane.java),1个主函数Main,3个功能实现类(可视化柱状图类chart.java、统计文本中除冠词、代词、介词之外的高频词类Highword.java、其他要求功能类function.java),2个主运行界面的类(firstFrame.java,firstPanel.java) - 3.核心代码
读入文件并排序
String path = firstPanel.textField.getText();
try {
FileInputStream fis = new FileInputStream(path);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String temp="";
long startTime=System.currentTimeMillis();
startTime1=System.currentTimeMillis();
while((temp = br.readLine())!=null)
{
stmplength1+=temp.length();
String[] str = temp.split("([^a-zA-Z])"); //过滤出只含有字母的
stmplength++;
for(int i=0;i<str.length;i++)
{
String word = str[i].trim();
if(word.length()!=0) //去除长度为0的行
staff.put(word, staff.getOrDefault(word, 0)+1);
}
}
br.close();
endTime1=System.currentTimeMillis();
//System.out.println("Total time is:"+ (endTime-startTime) );
rank();//按值排序
long endTime=System.currentTimeMillis();
//System.out.println("文件读入成功!请继续...");
JOptionPane.showMessageDialog(null, "文件读入成功! \n 耗时:"+(endTime-startTime)+"ms");//提示登录成功
}catch(Exception e) {
//System.out.println("文件不存在!!!请重新确认!");
JOptionPane.showMessageDialog(null, "文件读入出错!");
}
按值排序
public static void rank()//按值排序
{
Set<Entry<String,Integer>> mapEntries = staff.entrySet();
aList = new ArrayList<Entry<String,Integer>>(mapEntries);
Collections.sort(aList, new Comparator<Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> ele1,
Entry<String, Integer> ele2) {
return ele2.getValue().compareTo(ele1.getValue());
}
});
/* for(Entry<String,Integer> entry: aList) {
System.out.println(entry.getKey() + " : " + entry.getValue());
} */
}
统计文本中除冠词、代词、介词之外的高频词
for(int i=0;i<k;i++)//10
{
boolean ok=false;
if(flag)
textArea.append(function.aList.get(i).getKey()+"\t"+function.aList.get(i).getValue()+"\n");
else
{
for(int j=0;j<function.stop.size();j++)
{
if(function.aList.get(i).getKey().toLowerCase().equals(function.stop.get(j)))
{
k++;
ok=true;
break;
}
}
if(!ok)
textArea.append(function.aList.get(i).getKey()+"\t"+function.aList.get(i).getValue()+"\n");
}
}
-
4.运行程序
登陆(nwnu,2019)
读入文件
主运行界面
指定单词词频统计及柱状图
前k个高频词汇统计
统计文本中除冠词、代词、介词之外的高频词
输出到文件
统计行数及字符数
-
5.结对编程
-
6.PSP
|任务内容|计划完成时间(min)|实际完成时间(min)|
|:--|:--|:--|
|计划|10|8|
| 估计这个任务需要多长时间,并规划大致工作步骤|5|6|
|开发|110|130|
| 需求分析(包括学习新技术)|8|6|
|生成设计文档|5|8|
|设计复审(和同事审核设计文档)|5|4|
|代码规范(为当前的开发制定合适的规范)|4|3|
|具体设计|15|10|
|具体编码|150|200|
|代码复审|5|6|
|测试(自我测试、修改代码、提交修改)|15|12|
|报告|9|5|
|测试报告|5|3|
|计算工作量|3|2|
|事后总结,并提出工程改进计划|5|3| -
7.小结感受
通过此次的结对项目编程,让我感受到了合作的利与弊,诚然,合作编程能提升整个过程的效率,但如果没有好的交流共通,加上对彼此代码风格的不适应,反而会降低团队的效率。