201671030128+词频统计软件项目报告
一.需求分析
根据实验二 软件工程个人项目的要求本次软件项目的需求有以下几点:
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+词频统计软件项目报告相关推荐
- 201671010411+巩定定+词频统计软件项目报告
课程名 软件工程 实验二 词频统计软件项目报告 词频(TF) 是一个词语出现的次数除以该文件的总词语数. 实验目的 (1)掌握软件项目个人开发流程. (2)掌握Github上发布软件项目的操作方法. ...
- 201671010417 金振兴 词频统计软件项目报告
1.需求分析 按照<构建之法>第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发. .程序可读入任意英文文本文件,该文件中英文词数大于等于1个. . ...
- 201671030125+词频统计软件项目报告
项目 内容 这个作业属于哪个课程? 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里? 实验二 软件工程个人项目 我在这个课程的目标是? 按时完成老师给的任务,复习JAVA ...
- 201671030130+词频统计软件项目报告
(一)需求分析 根据实验二 软件工程个人项目的要求该软件项目的基本功能要求如下: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特 ...
- 201671010433 | 词频统计软件项目报告
1.需求分析 使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发.软件基本功能要求如下: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原 ...
- 实验二 词频统计软件项目报告
实验要求 实验二 软件工程个人项目 GitHib链接 https://github.com/Z-zt/Count 一.需求分析 通过分析实验二题目要求,得出的用户需求主要为: 程序可读入任意英文文本文 ...
- 201671010403 陈倩倩 词频统计软件项目报告
一.需求分析 一个英文文本词频统计的软件开发,其基本需求有: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上 ...
- 201671010423 词频统计软件项目报告
需求分析 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. 基本功能 1.指定单词词频统计功能:用户可 ...
- 201671010444 夏向明 词频统计软件项目报告
该项目实施过程主要包括以下7部分. 一.需求分析 1.程序需要读入至少一个词,可读入任意英文文本. 2.至少可以统计10万词及以上的文本. 3.用户可以同时查询多个单词的统计,并显示出其个数和柱状图. ...
最新文章
- 计算机网络实训简介,计算机网络实验报告介绍.doc
- java 线程安全性_i++是线程安全的吗?如何解决线程安全性?
- PM_我们是怎么做Code Review的
- oracle ora27072,ORA-27072: skgfdisp
- Atitit 文件读取规范 目录 1.1. 以fgetss取代fgets读取一行并过滤掉 HTML 和 PHP 标记。	1 1.2. 3. 以二进制读取 fread取代fgets	1 1.3. 4.
- 简练软考知识点整理-中国制造2025
- 仿 qq音乐播放器 html代码,仿QQ音乐播放器
- MATLAB 只是冰山一角!海外资深程序员聊被卡脖子……
- PS大神最全脑洞合集
- tensorboard可视化问题projector无法展示
- 百度地图 和百度导航及语音集成冲突解决办法
- 给众多IT行业开发者的一个建议,要注意避开黑心的培训机构
- 解决vue项目路由出现message: “Navigating to current location (XXX) is not allowed“的问题(点击多次跳转)
- 通过PC控制、操作andriod 手机-androidscreencast
- ThinkPHP门面源码解析
- Android---Toolbar
- 「高效程序员的修炼」快速上手python主流测试框架pytest以及单元测试编写
- android收集备忘录恢复工具,手机小小备忘录数据恢复大问题轻松恢复文件看这里...
- ABP框架心得系列-1.本土化和ABP核心
- JQuery点击按钮 数字递增递减
热门文章
- zx1 android版本,蔡司发布全画幅卡片机ZX1:安卓系统 内置Lightroom
- java 枚举_Java中的枚举类型(Enum)详解
- group by很多字段是不是会很慢_面试官:数据量很大,分页查询很慢,有什么优化方案?...
- 不间断电源ups标准_什么是ups不间断电源,ups电源的重要性。
- kafka消费中的partition与消费者的关系
- stacking与blending的区别
- python字典新的定义方式
- 如何用df的两列作复杂的运算
- hosts文件_电脑修改hosts文件屏蔽网站方法
- java中输入char类型_java中如何输入char类型