• 20200917-2词频统计


    此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11206

    词频统计 SPEC

    本题有功能3和功能4未实现

    已实现功能1,2,5运行截图如下:

    我的思路是读取文件,失败的话显示读取失败,成功的话进而统计单词总数以及每个单词的频率。

    功能1 小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键盘在控制台下输入命令。

    本题难点(1)需要用FileBuffered和FileReader读取文件

                   (2)读取文件统计每个单词出现的次数,并且重复单词不能重复计数,并且特殊字符也不计数。

    关键代码:

    if (f.length() < 40000) {
    
    
                try {
                    BufferedReader a = new BufferedReader(new FileReader(file1));
                    StringBuffer c = new StringBuffer();
                    //将文件内容存入StringBuffer中
                    while ((s = a.readLine()) != null) {
                        //用于拼接字符串
                        c.append(s);
                    }

    功能2:支持命令行输入英文作品的文件名,请老五亲自录入。

    本题难点:本题也是读入再统计,只不过文件内存稍微大一些。与功能1有相似之处。

    关键代码:

    //将StringBuffer转换成String,然后再将所有字符转化成小写字符
                    String m = c.toString().toLowerCase();
                    System.out.println(m + '
    ');
                    //匹配由数字和26个字母组成的字符串
                    String[] d = m.split("[^a-zA-Z0-9]+");
                    //遍历数组将其存入Map<String, Integer>中
                    Map<String, Integer> myTreeMap = new TreeMap<String, Integer>();
                    for (int i = 0; i < d.length; i++) {
                        //containsKey()方法用于检查特定键是否在TreeMap中映射
                        if (myTreeMap.containsKey(d[i])) {
                            count = myTreeMap.get(d[i]);
                            myTreeMap.put(d[i], count + 1);
                        } else {
                            myTreeMap.put(d[i], 1);
                        }
                    }
                    System.out.println("total" + d.length );
                    //通过比较器实现排序
                    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> k1, Entry<String, Integer> k2) {
                            //返回两个单词出现次数较多的那个单词的出现次数
                            return k2.getValue().compareTo(k1.getValue());
                        }
    
                    });

    功能3(未实现):支持命令行输入存储有英文作品文件的目录名,批量统计。

    本题难点:这道题要批量读入文件,之前只会读一个文件,这次要批量读入,接下来就和功能1、2有相似之处了。虽然 查了资料但是我没有完成批量读入文件。

    关键代码:无

    功能4:从控制台读入英文单篇作品,这不是为了打脸老五,而是为了向你女朋友炫酷,表明你能提供更适合嵌入脚本中的作品(或者如她所说,不过是更灵活的接口)。如果读不懂需求,请教师兄师姐,或者 bing: linux 重定向,尽管这个功能在windows下也有,搜索关键词中加入linux有利于迅速找到。

     本题未实现

    功能5:

    本题难点:本题将限定单词的长度,并把频率最高的top几单词输出,就需要在统计每个单词个数的时候也把长度统计,然后按排序输出。

    关键代码:

    System.out.println("请输入单词长度j位:");
    n2 = sc.nextInt();
    
    System.out.println("请输入词频前i位:");
    n = sc.nextInt();
    for (Entry<String, Integer> map : list) {
        if (map.getKey().length() <= n2){
            if (num <= n) {
                //输出到程序控制台
                System.out.println(map.getKey() +'	' + map.getValue());
                num++;
            }
        }
    
    }

     2.PSP

    本次作业没有将功能全部实现的原因:

    (1)自己本身编程能力薄弱,经过此次作业更加验证会一门编程语言的重要性。

    (2)没有在第一时间开始本次作业,导致后面有些着急,对于未实现的功能如果有更多时间或许可以再研究出来。

    (3)虽然已经预测到自己惨淡的分数,但尽量将功能5实现,希望能够弥补。

    3.此程序上交在guithub,地址 

    https://github.com/zhaoxinping-arch/work

     

     
  • 相关阅读:
    AsyncTask,MailTask,ScheduledTask
    Mysql的事务理解
    MySQL初识
    HTTP 的原理零散知识点
    SpringBoot简单搭建开发
    Android 的生命周期
    C51 虚拟元器件
    JavaSE 知识整合 (更新中……)
    java关键字篇
    Android开启网络权限
  • 原文地址:https://www.cnblogs.com/zhaoxp1/p/13712930.html
Copyright © 2020-2023  润新知