一.需求分析

根据实验二 软件工程个人项目的要求本次软件项目的需求有以下几点:
1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个,程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。
2.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。
3.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。
4.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。

二.功能设计

1.对于需求1、需求4需要有读入文本数据、向文本输出数据的功能。
2.对于需求3和需求4需要有排序的功能
3.整个项目要求有对词频进行统计的功能

三.设计实现

1.本次项目有两个类:
(1)main.java主要实现文本读入和功能选择的功能,根据用户输入的选择调用function.java中相应的功能函数。
(2)function.java实现排序(sort函数),查找单词词频显示柱状图(find函数),输出前n个高频词(print函数),单词及词频数按字典顺序输出到文件result.txt(Sort函数)四个主要功能。
2.数据结构:
本次项目采用TreeMap存储从文本读入的数据,用LinkedList进行词频排序。
3.流程图:
本项目总的流程图为:

四.测试运行

1.显示单词词频和柱状图

2.输出前K个高频词

3.向result.txt写入单词和词频

五.主要代码

1.文件读入并统计词频

// 读取要处理的文件BufferedReader b = new BufferedReader(new FileReader("src/HarryPotter.txt"));//<单词:词频>Map<String, Integer> map = new TreeMap<String, Integer>();String value= b.readLine();while (value!= null) {//处理标点符号String[] words = value.split("[【】、.。,\"!--;:?\'\\] ]"); for (int i = 0; i < words.length; i++) {//将大写字母转换为小写字母String key = words[i].toLowerCase();if (key.length() > 0) {if (!map.containsKey(key)) {map.put(key, 1);} else { int k = map.get(key)+1;// 如果不是第一次出现,就把k值++map.put(key, k);}}} value = b.readLine();}

2.按词频或字母排序

       Set<Entry<String,Integer>> m= map.entrySet();   LinkedList<Entry<String, Integer>> List = new LinkedList<Entry<String,Integer>>(m);//按值排序if(a==2) {Collections.sort(List, new Comparator<Entry<String,Integer>>() {     public int compare(Entry<String, Integer> a,  Entry<String, Integer> b) {  return b.getValue().compareTo(a.getValue());  }     });  //按键排序else if(a==3) {Collections.sort(List, new Comparator<Entry<String,Integer>>() {     public int compare(Entry<String, Integer> a,  Entry<String, Integer> b) {  return a.getKey().compareTo(b.getKey());  }     });  }//排序后存入Map中for(Entry<String,Integer> entry: List) {  Map.put(entry.getKey(), entry.getValue());  }  } 

3.向文件写入单词词频

        //创建文件File file = new File("result.txt");//向文件写入FileWriter f = new FileWriter(file.getAbsoluteFile());for(Entry<String,Integer> w: Map.entrySet()) {f.write(w.getKey() + "/" + w.getValue()+"     ");}f.close();System.out.println("结束!");

六.总结

1.本次项目中各功能在function类中,用函数实现各个功能,通过用户输值调用相应的功能,以此来实现模块化。
2.在刚开始设计读入文件数据的时候,打算采用二维数组存放单词,相应的一维数组存放个数,但发现数组太大,而且在进行排序的时候不方便因此采用了<键:值>的映射存放数据。
3.在进行柱状图绘制时,由于除以500后的小数无法表示,只能表示出大概的趋势。

七.PSP

任务内容 计划完成时间(min) 实际完成时间(min)
计划 5 3
规划工作步骤 10 7
开发 173 202
需求分析 10 15
生成文档 5 10
设计复审 3 2
代码规范 20 15
具体编码 100 120
代码复审 10 5
测试 25 40
报告 15 12
测试报告 5 7
计算报告量 5 2
事后总结 5 3

从表中可以看出在编码阶段时间较多且和自己估计的时间差距较大,主要是在进行数据结构的选择上错误,浪费大量时间进行修改,并且由于长时间没有使用Java,所有有些生疏,在测试阶段时间也比较长,自己开始的逻辑上有些混乱导致结果不正确显示,一步步的调试最终实现了相应功能。
点击源码可查看项目源代码

转载于:https://www.cnblogs.com/zhoulin52/p/10535111.html

201671030128+词频统计软件项目报告相关推荐

  1. 201671010411+巩定定+词频统计软件项目报告

    课程名 软件工程 实验二 词频统计软件项目报告 词频(TF) 是一个词语出现的次数除以该文件的总词语数. 实验目的 (1)掌握软件项目个人开发流程. (2)掌握Github上发布软件项目的操作方法. ...

  2. 201671010417 金振兴 词频统计软件项目报告

    1.需求分析 按照<构建之法>第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发. .程序可读入任意英文文本文件,该文件中英文词数大于等于1个. . ...

  3. 201671030125+词频统计软件项目报告

    项目 内容 这个作业属于哪个课程? 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里? 实验二 软件工程个人项目 我在这个课程的目标是? 按时完成老师给的任务,复习JAVA ...

  4. 201671030130+词频统计软件项目报告

    (一)需求分析 根据实验二 软件工程个人项目的要求该软件项目的基本功能要求如下: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特 ...

  5. 201671010433 | 词频统计软件项目报告

    1.需求分析 使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发.软件基本功能要求如下: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原 ...

  6. 实验二 词频统计软件项目报告

    实验要求 实验二 软件工程个人项目 GitHib链接 https://github.com/Z-zt/Count 一.需求分析 通过分析实验二题目要求,得出的用户需求主要为: 程序可读入任意英文文本文 ...

  7. 201671010403 陈倩倩 词频统计软件项目报告

    一.需求分析 一个英文文本词频统计的软件开发,其基本需求有: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上 ...

  8. 201671010423 词频统计软件项目报告

    需求分析 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. 基本功能 1.指定单词词频统计功能:用户可 ...

  9. 201671010444 夏向明 词频统计软件项目报告

    该项目实施过程主要包括以下7部分. 一.需求分析 1.程序需要读入至少一个词,可读入任意英文文本. 2.至少可以统计10万词及以上的文本. 3.用户可以同时查询多个单词的统计,并显示出其个数和柱状图. ...

最新文章

  1. 计算机网络实训简介,计算机网络实验报告介绍.doc
  2. java 线程安全性_i++是线程安全的吗?如何解决线程安全性?
  3. PM_我们是怎么做Code Review的
  4. oracle ora27072,ORA-27072: skgfdisp
  5. Atitit 文件读取规范 目录 1.1. 以fgetss取代fgets读取一行并过滤掉 HTML 和 PHP 标记。 1 1.2. 3. 以二进制读取 fread取代fgets 1 1.3. 4.
  6. 简练软考知识点整理-中国制造2025
  7. 仿 qq音乐播放器 html代码,仿QQ音乐播放器
  8. MATLAB 只是冰山一角!海外资深程序员聊被卡脖子……
  9. PS大神最全脑洞合集
  10. tensorboard可视化问题projector无法展示
  11. 百度地图 和百度导航及语音集成冲突解决办法
  12. 给众多IT行业开发者的一个建议,要注意避开黑心的培训机构
  13. 解决vue项目路由出现message: “Navigating to current location (XXX) is not allowed“的问题(点击多次跳转)
  14. 通过PC控制、操作andriod 手机-androidscreencast
  15. ThinkPHP门面源码解析
  16. Android---Toolbar
  17. 「高效程序员的修炼」快速上手python主流测试框架pytest以及单元测试编写
  18. android收集备忘录恢复工具,手机小小备忘录数据恢复大问题轻松恢复文件看这里...
  19. ABP框架心得系列-1.本土化和ABP核心
  20. JQuery点击按钮 数字递增递减

热门文章

  1. zx1 android版本,蔡司发布全画幅卡片机ZX1:安卓系统 内置Lightroom
  2. java 枚举_Java中的枚举类型(Enum)详解
  3. group by很多字段是不是会很慢_面试官:数据量很大,分页查询很慢,有什么优化方案?...
  4. 不间断电源ups标准_什么是ups不间断电源,ups电源的重要性。
  5. kafka消费中的partition与消费者的关系
  6. stacking与blending的区别
  7. python字典新的定义方式
  8. 如何用df的两列作复杂的运算
  9. hosts文件_电脑修改hosts文件屏蔽网站方法
  10. java中输入char类型_java中如何输入char类型