第二周:词频统计改进

需求:

1.在控制台输入命令;

2.输入必须是在硬盘上已经存在的路径或者是文件;

3.输入的是目录名就把目录统计出来;
4.输入时文件就把文件里面的单词统计出来.

分析:
1.读取文件使用BufferedReader类按行读取;
2.定义一个正则表达式过滤字符串符号;
3.创建hashmap;
4.使用StringTokenizer来分词;
5.把分的单词加入haspmap存储的键值对;
6,遍历HashMap输出结果;
7.让用户在控制台输入一个路径;
8.对用户输入的路径进行判断如果是目录就遍历目录,在统计里面的单词;
9.否则就是文件,就遍历文件,在使用Collections.sort()方法排序在统计文件里面的单词.

具体代码实现:

1.判断输入的是否是目录,是目录遍历并统计。

 1 File file = new File(url);//创建File对象
 2         if(file.isDirectory()){    //判断file 对象是否是目录
 3             String[] names = file.list();//获取目录下的所有文件的文件名
 4             for (String name : names) {
 5                 System.out.println(name);
 6                 if(!hashMap.containsKey(name)){        //判断hashMap里面是否有该单词
 7                     hashMap.put(name, new Integer(1));
 8                     //如果没有 把word的值当作键 ,key值记作一次
 9
10                 }else{
11                     int k=hashMap.get(name).intValue()+1;   //如果有 把word的值当作键 ,key值在原来基础上在加一次
12                     hashMap.put(name, new Integer(k));
13
14                 }
15                      for(String key : hashMap.keySet()){
16                             //打印单词 以及单词的 个数
17                              System.out.println(key + ":\t"+ hashMap.get(key));
18                         }
19
20
21             }
22
23
24         }

2.如果输入的是文件,就读取文件里面的单词。

        //当时文件的时候统计文件里面的单词
            else{
                BufferedReader br=new BufferedReader(new FileReader(url));
                 String value;
                 while((value=br.readLine())!=null){  //读取文本,读一行,直到读完为止
                     value=value.replaceAll(fregex, " ");  //用空格 代替文本中的一些特殊符号
                     //使用StringTokenizer来分词(StringTokenizer用来分隔String的应用类)
                     StringTokenizer tokenizer = new StringTokenizer(value);
                     while(tokenizer.hasMoreTokens()){
                         String word=tokenizer.nextToken();
                         if(!hashMap.containsKey(word)){        //判断hashMap里面是否有该单词
                             hashMap.put(word, new Integer(1));    //如果没有 把word的值当作键 ,key值记作一次
                             }else{
                                 int k=hashMap.get(word).intValue()+1;   //如果有 把word的值当作键 ,key值在原来基础上在加一次
                                 hashMap.put(word, new Integer(k));
                             }
                         }
                     }
                 

3.统计单词并排序。

 ArrayList<Map.Entry<String, Integer>> Com = new ArrayList<Map.Entry<String, Integer>>(hashMap.entrySet());
                     //使用Collections 工具类  里面的sort方法进行排序
                    Collections.sort(Com,
                        new Comparator<Map.Entry<String, Integer>>()
                    {
                            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)
                            {
                                return (o2.getValue() - o1.getValue());
                            };
                        });
                    System.out.println("Total :" + hashMap.size());  //遍历HashMap,输出结果 

                    int count = 50;
                        for (Map.Entry<String, Integer>comp : Com)
                        {
                            if (count-- < 0) break;
                            System.out.println(comp.getKey() + ":\t" + comp.getValue());
                        }

            }
    }

4.在控制台输入命令。

/**
     * 控制台下输入命令
     * 可以是目录或者是文件
     *
     */
    public static String scan(){
        Scanner sc = new Scanner(System.in);
          System.out.print("请输入目录或者文件:");
         String text = sc.next();
          return text;
    }
}

运行结果:

1.读取目录。

2.读取目录中的文件。

时间: 2024-10-24 02:20:50

第二周:词频统计改进的相关文章

第二周-词频统计更新

词频统计功能新增: HTTPS:https://git.coding.net/li_yuhuan/WordFrequency.git SSH:[email protected]:li_yuhuan/WordFrequency.git 代码: static void Main(string[] args) { string str = ""; int length = args.Length; switch (length) { case 0: { string line = Conso

第二周 词频统计

原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命令行输入英文作品的文件名 3. 支持命令行输入存储有英文作品文件的目录名,批量统计 4. 从控制台读入英文单篇作品,重定向输出 1. #include <stdio.h>#include <string.h>#include <stdlib.h>int main(){ FI

java词频统计——改进后的单元测试

测试项目 博客文章地址:[http://www.cnblogs.com/jx8zjs/p/5862269.html] 工程地址:https://coding.net/u/jx8zjs/p/wordCount/git ssh://[email protected]:jx8zjs/wordCount.git 测试用例: 1. 1 My English is very very pool 2.地址 [http://www.gutenberg.org/files/2600/2600-0.txt] 待测单

第一周 词频统计

这是我的第一篇博客,说起来有些惭愧,作为一个程序猿竟然至今没写过一篇技术博客.在这里,先向读到这篇博客的读者致歉,原谅我粗糙的表达能力. 在读研究生之前,“程序员”对我来说,只是三个字的组合,我并不了解程序员的世界,也不知道一个程序员的基本素养(这个词是从亮哥那听来的,但是是从杨老师那了解的).在这里,我要向我的导师--杨贵福老师表示深深的感谢,他教会了我许多作为一个程序员应有的工作的态度以及责任. 接下来谈谈我第一次上我导师的课的感受.我现在是研二,两年来我从没听过我的导师上的课.上周五是我第

第二周-频统计效能分析

根据作业要求对个人项目词频统计进行效能分析 工具:vs2015自带的效能分析工具: 1.第一次分析结果 string.split()方法和dictionary.contain()方法占比例较高; 由于水平问题暂时未想到解决方案,会继续探索,完善个人项目;

补交第一周词频统计 四则运算的地址

由于不会用codind.net .现在补上 四则运算HTTPS SSH :https://git.coding.net/brilliant/1hao.git [email protected]:brilliant/1hao.git 词频统计HTTPS SSH :https://git.coding.net/brilliant/cptj11.git https://git.coding.net/brilliant/cptj11.git

第三周 词频统计

HTTP:https:https://git.coding.net/liqiao085/wf--week2.gitssh://[email protected]:liqiao085/wf--week2.git 功能1: void f1()//完成自己输入文章统计功能 {        int sum = 0;    gets(str);  //  printf("%s\n",str);     int len = strlen(str);//文章长度      for(int i = 

第二周:PSP&amp;进度条

PSP: 一.词频统计改进 1.表格:     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(hrs) 学习 <构建之法>.Java 8:46 12:18 28 152 3  分析 读需求.分析需求 13:12 14:52 30 130 1.5  编码 具体编码 14:54 20:17 82 241 4  调试 修改代码.代码复审 20:32 21:54 18 64 1 总结 总结结果 23:06 23:39 0 33 0.5 2.饼图: 3.总结分析

第二周作业-词频统计

本周作业是词频统计,编程具体要求如下: https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/922 对实现功能进行简要的介绍: 功能一:小文件输入,为表明程序能跑.需要在控制台下输入命令,得到文件中不重复的总单词数.并对单词出现的次数进行排序输出. 功能二:支持命令行输入英文作品的文件名,亲自录入,输出显示不重复单词总数,并对出现频率最高的前10的单词进行输出 功能三:支持命令行输入存储有英文作品文件的目录名,批量统计词频. 功能四: