词频统计:

对每个功能预计时间:

功能 预计(min) 实际(min)
数据流读入 20 40
正则规范字符串 15 20
排序 30 45
输出 20 30
其他   25

词频统计psp

日期 类型 任务 开始时间 结束时间 被打断时间 实际 计划
9.11 分析需求 看词频统计spec 10:30 10:50 5 15 10
9.12 具体设计

设计词频分析流程包括

(读入文件流、去掉文章中非单词、按词频value降序排列、输出)

10:00 11:00 10 50 40
9.12 具体编码

阅读上次代码,加入排序以及测试

(当前完成从控制台输入文件名称)

15:00 18:00 20 160 120
9.12 代码复审 写博客,边写边看 分段上传 22:40 23:17 7 30 40

对比分析原因:首先以前对代码的练习不够,不能熟练编码。

对于数据流部分,多出来的时间是浪费在类型转换上,string类型与文件流之间的转换花费了很长时间。

对于正则表达式不熟悉,这样的东西总是记不住,浪费了时间。

sort方法是后学习的,原来只会用c++来理解,转换成Java花费了时间。

功能1:小文件输入键盘在控制台下输入命令。

在控制台输入文件名:使用scanner获取控制台数据

System.out.println("请输入要统计的文件路径");
Scanner sc = new Scanner(System.in);
String road = sc.nextLine();
FileInputStream fis = new FileInputStream(road);// 要读的文件路径
InputStreamReader isr = new InputStreamReader(fis);// 字符流
BufferedReader infile = new BufferedReader(isr); // 缓冲

从读取的txt文件中获取单词,使用正则,将非单词的部分转换成空格

String words[];
file = file.toLowerCase();
//正则将非字母,符号等用空格代替
file = file.replaceAll("[^A-Za-z]", " ");
file = file.replaceAll("\\s+", " ");
words = file.split("\\s+");

将获取的键值对存入hashmap

for (int i = 0; i < words.length; i++) {
String key = words[i];
if (map.get(key) != null) {
int value = ((Integer) map.get(key)).intValue();
value++;
map.put(key, new Integer(value));
} else {
map.put(key, new Integer(1));
}
}

对单词按词频(即键值对的value)进行降序排列。重写Collection类中的sort方法,完成降序。

List<Map.Entry<String,Integer>> list =new ArrayList<Map.Entry<String,Integer>(map.entrySet());

Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
@Override
public int compare(Entry<String, Integer> arg0, Entry<String, Integer> arg1) {
// TODO Auto-generated method stub
return arg1.getValue().compareTo(arg0.getValue());
}
});

对完成排序的键值对进行输出。使用util.Map包下的Entry对hashMap进行遍历输出

for(Map.Entry<String, Integer>mapping:list){
System.out.println(mapping.getKey()+","+mapping.getValue());
}

运行结果:

 
长篇小说结果:

功能2. 支持命令行输入英文作品的文件名

>wf gone_with_the_wand

total 1234567 words

部分代码如下:

System.out.println("请输入要统计的文件名称");
Scanner sc = new Scanner(System.in);
String road = "E:\\artical\\";
road+=sc.nextLine();
road+=".txt";

将文件位置在代码中进行拼接,运行结果如下

功能3. 支持命令行输入存储有英文作品文件的目录名,批量统计。
读入目录名,循环遍历每个txt文件,部分代码如下

System.out.println("请输入要批量统计的文件集合路径");
Scanner sc = new Scanner(System.in);
String road = sc.nextLine();
//批量文件
File f= new File(road);
File lis[]=f.listFiles();
for(int w=0;w<lis.length;w++){
String fileName=lis[w].getName();
System.out.println(fileName);
}
System.out.println("************");
for(int w=0;w<lis.length;w++){
String fileName=lis[w].getName();
System.out.println(fileName);
FileInputStream fis = new FileInputStream(lis[w]);

运行结果部分截图如下:

功能4. 从控制台读入英文单篇作品

在控制台可以输入英文文章名字或者文章内容

		if(args.length==0){
Scanner in= new Scanner(System.in);
FileWriter fr = new FileWriter(new File("E:\\artical\\restlt.txt"));
while(in.hasNext()){
fr.write(in.nextLine()+"\r\n");
}
fr.close();
in.close();
}

以上代码将要识别的txt文件先写到result.txt文件中。< 为重定向对标准输入的控制

git:git://git.coding.net/yumiaomiao/WordCount.git

http:https://git.coding.net/yumiaomiao/WordCount.git

ssh:git@git.coding.net:yumiaomiao/WordCount.git

【week2】 词频统计第一次更新的更多相关文章

  1. HW—词频统计

    第一次个人作业——词频统计 第一次做这种大作业,明显感觉陌生,各种规范和技能也是第一次使用,希望自己好运. 目录:一.基本要求 二.需求分析及时间估计 三.实现思路及过程 四.测试用例.时间性能分析及 ...

  2. 软件工程第一次个人项目——词频统计by11061153柴泽华

    一.预计工程设计时间 明确要求: 15min: 查阅资料: 1h: 学习C++基础知识与特性: 4-5h: 主函数编写及输入输出部分: 0.5h: 文件的遍历: 1h: 编写两种模式的词频统计函数: ...

  3. 词频统计的java实现方法——第一次改进

    需求概要 原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 ...

  4. C# 词频统计 东北师范大学 软件项目管理 第一次作业

    一.作为杨老师的学生第一次听杨老师讲课,印象最深的就是:工程中所有步骤之间是乘法,如果任何一步为0,工程就做不出来了.以前所有老师讲到的都是不要太在乎结果,努力的过程很重要,但是这在软件工程中不合适了 ...

  5. 2nd 词频统计更新

    词频统计更新 实现功能:从控制台输入文件路径,并统计单词总数及不重复的单词数,并输出所有单词词频,同时排序. 头文件 #include <stdio.h> #include <std ...

  6. USTC《现代软件工程》春季学期——第一次个人作业:词频统计

    截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...

  7. 效能分析——词频统计的java实现方法的第一次改进

    java效能分析可以使用JProfiler 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms ...

  8. 作业3-个人项目<词频统计>

    上了一天的课,现在终于可以静下来更新我的博客了.       越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”.                词频统计 单词: 包含有4个或4个以上的字 ...

  9. 使用HDFS完成wordcount词频统计

    任务需求 统计HDFS上文件的wordcount,并将统计结果输出到HDFS 功能拆解 读取HDFS文件 业务处理(词频统计) 缓存处理结果 将结果输出到HDFS 数据准备 事先往HDFS上传需要进行 ...

随机推荐

  1. 使用maven下载cdh版本的大数据jar包

    在pom文件中添加 cloudera 配置文件 <repositories> <repository> <id>cloudera</id> <ur ...

  2. QEP之init()和dispatch()流程图

    抽象状态机类QFsm或QHsm有一个函数指针,用于在继承的具体状态机类中指向具体的状态函数,其有两个对外的接口函数init()和dispatch(),其工作原理是理解状态机处理事件过程的关键. 具体状 ...

  3. 使用idea上传项目到gitHub

    上传项目到gitHub 创建好后开始提交本地项目代码如图: 选中VCS选中图中的按钮如图所示: 然后再选中Src点中add按钮如图所示: 然后点中commit Directory后 打开终端进行项目根 ...

  4. 笔记-sql语句

    笔记-sql语句 1.      sql语句基础 虽然经常使用sql语句,但没有一个整体式的文档,整理了一下. 1.1.    select foundation: select <colnum ...

  5. NoSQL入门第三天——Redis配置文件与持久化

    一.解析Redis配置文件redis.conf (Linux下配置多于编码) 1.它在哪 由于我是在root的家目录下载安装的,默认的安装位置就是: conf就在这里: 根据经验,出厂的conf永远不 ...

  6. NavRouter

    使用方法只需要跟vue-router一样正常使用即可,这里我们新加了一个路由跳转方法nav: router.nav()//参数同router.replace一样. 路由跳转策略 首先说下路由跳转过程, ...

  7. OSG-OSG中的observer_ptr指针

    看array大神的CookBook后一些感想,在代码上添加了一些注释,也对源码做了一些研读,记录下学习的过程. CookBook中第一个例子就是observer_ptr指针,这个指针和它的名字一样,就 ...

  8. 怎么设计好移动APP测试用例

    软件测试工作中我们需要不断的储备和总结自己的知识和经验,怎么设计好移动APP测试用例?如:手机.平板.智能设备,并在特定网络环境下. 我们需要关注的功能点,容易出错的位置,这将对我们整个测试过程起着至 ...

  9. 怎样下载JDBC驱动

    MySQL官网: https://www.mysql.com/ 请注意: 需要把mysql-connector-java-5.1.45-bin.jar放到C:\JMeter\apache-jmeter ...

  10. Git 与 GitHub

    Git 这个年代,不会点Git真不行啦,少年别问问什么,在公司你就知道了~ Git是一个协同开发的工具,主要作用是进行版本控制,而且还能自动检测代码是否发生变化. 一. 安装 下载地址:https:/ ...