• 201671010401 包稚潼+《英文文本统计分析》结队项目报告


    实验目的与要求

    -体验软件项目开发中的两人合作,练习结对编程(Pair programming)。
    -掌握Github上增量发布软件的操作方法。

    项目名称:英文文本统计分析 项目要求:https://www.cnblogs.com/nwnu-daizh/p/10569690.html
    任课教师:代老师 博客地址:http://www.cnblogs.com/nwnu-daizh/
    结队人:201671010413葛进花 博客地址:https://www.cnblogs.com/gejinhua/p/10550323.html/
    点评内容: 排版比较整齐,功能设计的描述不够完整,没有实现柱状图,从博客中看出来前期还是深入学习的,就psp而言,规划较为完美,但是后期拖延较多,说明准备不够充分。计划和完成程度有误差,可能对于计划的初期分配不正确。
    点评心得: 点评的过程中发现,两人的进度基本一致,对于实验的要求一致,部分没有实现的功能也相似。需要后期一起加深学习,互相学习对方的优点,弥补自身缺点,争取这次结队项目完成顺利。

    实验内容与步骤

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

    -对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究。
    -克隆结对方项目源码到本地机器,阅读并测试运行代码,结合运行结果评论程序代码,评论要点包括:软件结构、代码规范、功能实现、人机交互等。
    -尝试利用github中的Fork、Clone、Push、Pull request、Merge pull request对结对方仓库中的源码进行合作修改。

    任务二:采用两人合作方式,设计开发一个英文文本统计分析软件,使之具有以下功能:

    -实验2要求的功能;
    -单词频数可视化柱状图要求是以下样式:

    -统计该文本行数及字符数;
    -各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
    -可处理任意用户导入的任意英文文本;
    -人机交互界面要求GUI界面(WEB页面、APP页面都可);
    -附加分功能:统计文本中除冠词、代词、介词之外的高频词;
    -附加分功能:统计前10个两个单词组成的词组频率。

    软件设计:

    -需求分析:
    -1.可处理用户任意输入的英文文本
    -2.统计该文本的行数及字符数功能
    -3.指定单词词频统计功能
    -4.前k个高频词的输出
    -5.统计该文本的单词数,然后输出到result.txt文件。
    -6.统计功能耗时
    -7.GUI人机交互界面
    -8.统计文本除冠词、代词、介词之外的高频词

    核心功能代码展示:

    public class CountOccurrenceOfWords {
    	public static void main(String[] args) {
    		long t1 = System.currentTimeMillis();
    		String s;
    		String fileName1 = "D:\Workspaces\jiedui\src\text.txt";
    		String fileName2 = "D:\Workspaces\jiedui\src\result.txt";
    		try {
    			BufferedReader br = new BufferedReader(new FileReader(fileName1));
    			BufferedWriter bw = new BufferedWriter(new FileWriter(fileName2));
    			StringBuffer sb = new StringBuffer();
    			//将文件内容存入StringBuffer中
    			while((s = br.readLine()) != null) {
    				sb.append(s);
    			}
    			String str = sb.toString().toLowerCase();
    			//分隔字符串并存入数组
    			String[] elements = str.split("[^a-zA-Z0-9]+");
    			int count = 0;
    			Map<String, Integer> myTreeMap = new TreeMap<String, Integer>();
    			//遍历数组将其存入Map<String, Integer>中
    			for(int i = 0; i < elements.length; i++) {
    				if(myTreeMap.containsKey(elements[i])) {
    					count = myTreeMap.get(elements[i]);
    					myTreeMap.put(elements[i], count + 1);
    				}
    				else {
    					myTreeMap.put(elements[i], 1);
    				}
    			}                                          
    			System.out.println("单词统计的结果请见当前目录result.txt文件");
    			//将map.entrySet()转换成list
    			List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());
    			//通过比较器实现排序
    			Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
    				//降序排序
    				public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
    					return o2.getValue().compareTo(o1.getValue());
    				}
    			});
    			int num = 1;
    			//将结果写入文件
    			for(Map.Entry<String, Integer> map : list) {
    				
    				if(num <= sb.length()) {
    					bw.write("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次");
    					bw.newLine();
    					System.out.println(map.getKey() + ":" + map.getValue());
    					num++;
    				}
    				else break;
    			}
    			bw.write("耗时:" + (System.currentTimeMillis() - t1) + "ms");
    			br.close();
    			bw.close();
    			System.out.println("耗时:" + (System.currentTimeMillis() - t1) + "ms");
    		} catch (FileNotFoundException e) {
    			System.out.println("找不到指定文件!");
    		} catch (IOException e) {                                    
    			System.out.println("文件读取错误!");
    		}
    	}
    }
    
    public class Word {
        // 统计数字或者字符出现的次数
        public static TreeMap<Character, Integer> Pross(String str) {
            char[] charArray = str.toCharArray();
     
            TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
     
            for (int x = 0; x < charArray.length; x++) {
                if (!tm.containsKey(charArray[x])) {
                    tm.put(charArray[x], 1);
                } else {
                    int count = tm.get(charArray[x]) + 1;
                    tm.put(charArray[x], count);
                }
            }
            return tm;
        }
     
        public static void main(String[] args) {
            BufferedReader br = null;
            int line = 0;
            String str = "";
            StringBuffer sb  = new StringBuffer();
            try {
                br = new BufferedReader(new FileReader("D:\Workspaces\jiedui\src\text.txt"));
                while ((str = br.readLine()) != null) {
                  sb.append(str);
                    ++line;
                }
                System.out.println("
    文件行数: " + line);
                TreeMap<Character, Integer> tm = Pross(sb.toString());
                System.out.println("
    字符统计结果为:" + tm);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    程序运行截图:






    结队过程:

    -初期寻找队友,两人互评博客,找出对方的优势和不足,然后相互补充,做出psp表,初期有了大致的计划,后期投入实践,在编程过程遇到的问题较多。

    结队照片:

    实验总结:

    -从实验二到实验四,老师给出的实验,在开发和代码编写上花费大量时间,错误频繁出现修改失败,一直有bug,很崩溃,但是bug修复后心情也是很激动。在结队中我们相互促进,共同寻找实现的方法,但是很可惜由于技术方面的不足,附加功能没有实现。PSP展示了我们的开发过程,计划赶不上变化,实际操作的时间远远大于计划时间,程序语言方面存在很大问题,在中途也请教过其他同学,有所收获,但是仍然有解决不了的问题,后续要强加练习和学习,相互讨论和监督,得到了不同的提升,在合作过程中磨合不断,要学会发现别人身上的闪光点。

    任务三:博文信息表psp:

    PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成所需要的时间(min)
    Planning 计划 15 13
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 15 10
    Development 开发 600 850
    Analysis 需求分析(包括学习新技术) 18 12
    Design Spec 生成设计文档 20 35
    Design Review 设计复审(审核设计文档) 15 22
    Coding Standard 代码规范(为目前的开发制定合适的规范) 18 25
    Design 具体设计 15 20
    Coding 具体编码 600 930
    Code Review 代码复审 20 30
    Test 测试(自我测试,修改代码,提交修改) 50 68
    Reporting 报告 50 60
    Test Report 测试报告 30 40
    Size Measurement 计算工作量 15 20
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 20 32

    Github地址:https://github.com/aaabaoo/wordcount

  • 相关阅读:
    创建基于MailKit和MimeKit的.NET基础邮件服务
    MailKit---获取邮件
    C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
    .net 开源 FTP 组件 edtFTPnet
    Consul1-window安装consul
    通信传输利器Netty(Net is DotNetty)介绍
    工作中,如何衡量一个人的 JavaScript 编码水平?
    10个有趣又能编译为JavaScript的语言,你用过哪些?
    一定要你明白Java中的volatile
    面试总被问到HTTP缓存机制及原理?看完你就彻底明白了
  • 原文地址:https://www.cnblogs.com/aaabaoo/p/10642656.html
Copyright © 2020-2023  润新知