项目名称:英文文本统计分析 | 项目要求 |
任课教师:代老师 | 博客地址 |
结对人:201671010401包稚潼 | 博客地址 |
(源码)html
-统计该文本行数及字符数;
-各类统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
-可处理任意用户导入的任意英文文本;
-人机交互界面要求GUI界面(WEB页面、APP页面均可);
-附加分功能:统计文本中除冠词、代词、介词以外的高频词;
-附加分功能:统计前10个两个单词组成的词组频率。java
-需求分析:
-1.可处理用户任意输入的英文文本
-2.统计该文本的行数及字符数功能
-3.指定单词词频统计功能
-4.前k个高频词的输出
-5.统计该文本的单词数,而后输出到result.txt文件。
-6.统计功能耗时
-7.GUI人机交互界面
-8.统计文本除冠词、代词、介词以外的高频
-单词频数可视化柱状图要求是如下样式:
git
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("\n文件行数: " + line); TreeMap<Character, Integer> tm = Pross(sb.toString()); System.out.println("\n字符统计结果为:" + 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(); } } } } }
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 |
总结:从实验二到实验四,老师给出的实验,在开发和代码编写上花费大量时间,错误频繁出现修改失败,一直有bug,很崩溃,可是bug修复后心情也是很激动。在结队中咱们相互促进,共同寻找实现的方法,可是很惋惜因为技术方面的不足,附加功能没有实现。PSP展现了咱们的开发过程,计划赶不上变化,实际操做的时间远远大于计划时间,程序语言方面存在很大问题,在中途也请教过其余同窗,有所收获,可是仍然有解决不了的问题,后续要强加练习和学习,相互讨论和监督,获得了不一样的提高,在合做过程当中磨合不断,要学会发现别人身上的闪光点。github