zoukankan      html  css  js  c++  java
  • 201671030122杨凡亿《英文文本统计分析》结对项目报告

    项目 内容
    课程名称 2016级计算机科学与工程学院软件工程(西北师范大学)
    作业要求 实验四 软件工程结对项目
    课程学习目标 熟悉软件开发整体流程,提升自身能力
    具体方面的帮助 第一次体验一个完整的工程


    任务一 两两自由结对,对结对方的《实验二 软件工程个人项目》的项目成果进行评价

    项目 内容
    点评博客 201671030126 赵佳平词频统计软件项目报告
    Github github地址
    点评内容 博文结构整体很清楚,很简洁。对需求分析做了认真分析,基本完成了各项功能。但在博文排版上有所不足,表格和代码部分尽量不要使用截图;另外可以把所实现功能的截图尽可能详细的写到博文中。在具体代码方面,希望可以把不同的类分开,不要都写在一个java文件里面,这样可以使代码结构更加清晰。希望博主可以不断完善,继续努力。
    点评心得 通过阅读结对方的代码,首先感觉到的是我们两个代码风格有很大的不同。其次在思考和解决问题的方法上也有很大的差别。了解了对方的编码习惯,为任务二的开展奠定了一些基础。当然通过阅读也注意的到自己在编码时需要进一步改进的问题。在接下来的结对编程中,会充分听取对方的意见,共同讨论完成本次项目


    任务二 采用两人合作方式,设计开发一个英文文本统计分析软件

    • 结对项目源码Github链接地址

    • a.需求分析

      (1)实验2要求的功能;
      
      (2)单词频数可视化柱状图;
      
      (3)统计该文本行数及字符数;
      
      (4)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
      
      (5)可处理任意用户导入的任意英文文本;
      
      (6)人机交互界面要求GUI界面(WEB页面、APP页面都可);
      
      (7)附加分功能:统计文本中除冠词、代词、介词之外的高频词;
      
    • b.软件设计

      • 类图
      (1) 本次项目主要有三部分构成,登录界面(login)、主界面、主类(Main)。
      
      (2) 高频词的统计在Highword.java中实现,指定单词词频和柱状图在chart.java中实现,其余功能在function.java实现。
      
      (3) 计时功能主要是利用函数System.currentTimeMillis()实现。
      
    • c.核心功能代码展示

      • 单词频数可视化柱状图部分,主要采用外部包jcommon-1.0.23.jar,jfreechart-1.0.19.jar实现。另参考这篇博文完成
         JFreeChart chart = ChartFactory.createBarChart(
                 "指定单词的词频柱状图",    //标题
                 "",    //x轴名称
                 "",    //y轴名称
                 dataset,//数据集
                 PlotOrientation.VERTICAL,//使用垂直柱状图
                 true,//是否使用legend
                 false,//是否使用tooltip
                 false);   //是否使用url
         
         Font kfont = new Font("宋体", Font.PLAIN, 20);    // 底部   
         Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题   
         // 图片标题   
         chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));   
         // 底部   
         chart.getLegend().setItemFont(kfont);   
         ChartFrame cf = new ChartFrame("词频显示", chart);
         cf.pack();
         cf.setVisible(true);
      
      • 行数和字符数统计。该部分主要是在读入文件的时候进行统计。
      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);
          }
      }
      
      • 除去介词,冠词,代词的高频词汇。该部分的实现是在输出的时候与介词,冠词,代词表进行比对,然后决定是否输出。
      /*该部分主要是通过flag来控制要显示的界面*/
      ok.addActionListener(new ActionListener() {
       		@Override
       		public void actionPerformed(ActionEvent arg0) {
       			// TODO Auto-generated method stub
       			
       			textArea.setText("");
       			
       			long startTime=System.currentTimeMillis();
       			int k=Integer.parseInt(textField.getText().toString());
       			for(int i=0;i<k;i++)//10
       			{
       				boolean ok=false;
       				if(flag)   //flag为true显示正常高频词界面,否则显示除去代词,冠词,介词的界面
       					textArea.append(function.aList.get(i).getKey()+"	"+function.aList.get(i).getValue()+"
      ");
       				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()+"	"+function.aList.get(i).getValue()+"
      ");
       				}
       			}
       			long endTime=System.currentTimeMillis();
       			JOptionPane.showMessageDialog(null, "耗时:"+(endTime-startTime)+"ms");
       		}  
             });
      
    • d.程序运行截图

      • 登录界面:用户名(nwnu),密码(2019)

      • 主界面

      • 点击浏览,选择需要读入的文件,然后点击开始读入

      • 指定单词词频统计及柱状图

      • 前k个高频词统计

      • 前k个高频词统计

      • 统计行数和字符数

      • 附加1:除去代词,介词,冠词的高频词

    • e.结对的过程

      • 在结对过程,我们首先提出自己对某一功能的想法,然后经过讨论决定采用其中的一种实现。采用谁的想法,谁编程。在讨论过程也可能会有新的想法出现,也会很明显的感到自己的有些想法不太好。


    • 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


    • 小结

       通过此次项目,体会了结对编程的过程,很大的一个感受是在编码、测试以及复审时能够很容易的发现代码中的一些逻辑错误,相比一个来说编码效率比较高。另外通过这次项目也感受到了编码规范也是很重要的,当对变量随意定义,没有相应注释的时候,读代码非常的耗时。在项目中我们主要是先讨论某个功能怎么实现,充分听取对方的想法,最后用谁的想法,谁编程实现。总之,在此次项目中,彼此配合的还是很友好的,也有很大的收获。在以后的过程中也会注意在此次项目中遇到的问题,不断完善,继续努力。
  • 相关阅读:
    node搭建文件服务器
    es6快速排序
    vue+koa+mysql简易demo
    linux常用命令
    su: Authentication failure 的解决方案
    安装gensim报错:Original error was: DLL load failed: 找不到指定的模块。 Command "python setup.py egg_info" failed with error code 1 in C:UsersxubingAppDataLocalTemppip-install-nta89iepgensim
    使用服务器上的Jupyter notebook。
    tf.nn.conv2d()需要搞清楚的几个变量。
    tf入门-池化函数 tf.nn.max_pool 的介绍
    tf入门-卷积步长strides参数的具体解释
  • 原文地址:https://www.cnblogs.com/yangfy2019/p/10646189.html
Copyright © 2011-2022 走看看