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.小结感受
    通过此次的结对项目编程,让我感受到了合作的利与弊,诚然,合作编程能提升整个过程的效率,但如果没有好的交流共通,加上对彼此代码风格的不适应,反而会降低团队的效率。

posted @ 2019-04-03 00:38  Zip-j  阅读(173)  评论(1编辑  收藏  举报