zoukankan      html  css  js  c++  java
  • 20200917-2 词频统计

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

    词频统计 SPEC

    老五在寝室吹牛他熟读过《鲁滨逊漂流记》,在女生面前吹牛热爱《呼啸山庄》《简爱》和《飘》,在你面前说通读了《战争与和平》。但是,他的四级至今没过。你们几个私下商量,这几本大作的单词量怎么可能低于四级,大家听说你学习《构建之法》,一致推举你写个程序名字叫wf,统计英文作品的单词量并给出每个单词出现的次数,准备用于打脸老五。

    希望实现以下效果。以下效果中数字纯属编造。

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

    >type test.txt
    My English is very very pool.
    
    >wf -s test.txt
    total 5
    
    very    2
    my      1
    english 1
    is      1
    pool    1

    为了评估老五的词汇量而不是阅读量,total一项中相同的单词不重复计数数,出现2
    次的very计数1次。

    因为用过控制台和命令行,你早就知道,上面的">"叫做命令提示符,是操作系统的一部分,而不是你的程序的一部分。

    此功能完成后你的经验值+10.

    答:

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

    >wf gone_with_the_wand
    total  1234567 words
    
    the    5023
    a      4783
    love   4572
    fire   4322
    run    3822
    cheat  3023
    girls  2783
    girl   2572
    slave  1322
    buy     822

    此功能完成后你的经验值+30. 输入文件最大不超过40MB. 如果你的程序中途崩
    了,会被老五打脸,不增加经验值。

    答:

     功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。
    >dir folder
    gone_with_the_wand
    runbinson
    janelove
    >wf folder
    gone_with_the_wand
    total 1234567 words
    the 5023

    a 4783
    love 4572
    fire 4322
    run 3822
    cheat 3023
    girls 2783
    girl 2572
    slave 1322
    buy 822
    ----
    runbinson
    total 1234567 words

    friday    5023
    sea       4783
    food      4572
    dog       4322
    run       3822
    hot       3023
    cood      2783
    cool      2572
    bible     1322
    eat        822
    ----
    janelove
    total  1234567 words
    
    love    5023
    chat    4783
    lie     4572
    run     4322
    money   3822
    inheritance     3023
    class   2783
    attribute       2572
    data    1322
    method  822

    因为单词量巨大,只列出出现次数最多的10个单词。
    此功能完成后你的经验值+8.

    答:

     

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

    >wf -s < the_show_of_the_ring
    
    total 176
    the  6
    a    3
    festival   2
    dead 2
    for 2
    ...

    此功能完成后你的经验值+10.

    答:

    功能5 此功能为选做题,如果完成正确得30经验值,如果不做得0经验值,不会倒扣分数。

    你完成了所有功能,后面的博客、PSP等也都精心准备了,去食堂的路上心情大悦。坐下挠了挠手机访问cnblogs上的班级,却发现大家的作业也都非常优秀,自己并不突出,心下黯然。怎么才能更加杰出呢?一抬头,看到老杨老师和和邹欣老师正坐桌对面吃饭,你说出了自己的困惑。

    老杨说,“精益求精,一步步榨出自己的潜力来,正是走向杰出的开始啊。”

    你说,“老师你具体点呗。”

    邹欣老师说,“这样,我想知道5个字母的单词中最频繁出现的是哪10个单词,top10,你怎么办呢?”

    你一下就想到了,说了思路,应该blablabla。邹欣老师又问,“6个字母的单词中最频繁出现的是哪10个单词呢,top10?”

    老杨追问,“6个字母的字母的单词中最频繁出现的是哪100个单词呢,top100?”

    你问,“算法我想好了,性能估计也没问题,命令行参数老师怎么规定呢?”

    老杨说,"你来规定,写个简单的文档,包括如何运行,给出运行实例的截图。"

    "可变的参数就是(1)几个字母和(2)排行前多少是吧?没有问题。"

    此时,你想起自己一直做作业还没有吃饭。肚子咕咕叫得声音如此之大,把你吵醒了。是赶紧去吃饭呢,还是做完这题再说?

    答:前面的数字代表单词字母的个数,后面的数字代表显示top多少,分别对应四个功能

           功能一                                         功能二

     

                     功能三                                                   功能四

    功能实现

    (以上每1经验值对应 1分。)
    要求在同一个可执行程序中实现全部功能,而不是每个功能单独用一个可执行程序实现。

    博客
    (10分)
    发表博客,介绍上述“项目”中每个功能的重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。

    答:(1)我是把每个功能看成一个整体,每个功能都必须将文件里的单词处理好,

    处理单词的重点,要考虑不是所有单词都由空格分开,有可能是逗号,句号等等。

    所以需要除了字母以外都要分开。

     1 Map<String,Integer> map = new HashMap<String,Integer>();
     2 String data = null;
     3 //读取文本一行
     4 while((data=br.readLine())!=null) {
     5     String[] word = data.split("[^a-zA-Z]"); 
     6     for (int i = 0; i < word.length; i++) {
     7         if(!word[i].equals("")) {       
     8             if(map.containsKey(word[i])) {
     9                 Integer word_num = map.get(word[i]);
    10                 map.put(word[i],++word_num);
    11             }else {
    12                 map.put(word[i],1);
    13             }
    14         }    
    15     }
    16 }

    (2)下一个难点是文件夹,文件处理这块,比较复杂,功能三文件夹处理利用递归的方式

    public static void fileName(String str) throws IOException  {
        File file = new File(System.getProperty("user.dir")+"/"+str);
        //功能三,处理目录
        if(file.isDirectory()){
            File[] tempList = file.listFiles();
            for (int i = 0; i < tempList.length; i++) {
                System.out.println(tempList[i].getName());
                fileName(str+"/"+tempList[i].getName());
                System.out.println("------------");
            }    
        }else {
            if(str.contains(".txt")) {
                minFile(str);
            }else {
                englishFile(str);
            }
        }    
    }    

    (3)下一个难点是参数处理,要考虑在控制台输入的参数的位置,要考虑这五种功能的情况

    if(args.length != 0) {
        if(args[0].equals("-s")) {
            if(args.length == 2) {
                fileName(args[1]);
            }else {
                if(args.length == 4) {
                    wordNum = Integer.parseInt(args[2]);
                    wordTop    = Integer.parseInt(args[3]);
                    fileName(args[1]);
                }else if(args.length == 3){
                    wordNum = Integer.parseInt(args[1]);
                    wordTop    = Integer.parseInt(args[2]);
                    redir();
                }else {
                    redir();
                }
            }    
        }else {
            if(args.length == 3) {
                wordNum = Integer.parseInt(args[1]);
                wordTop = Integer.parseInt(args[2]);
            }
            fileName(args[0]);
        }
    }

    代码片断要求1 凡不缩进的,此题目拒绝接收。不知道什么是“缩进”的同学,请自行补课,不接受以“不知道”作为理由。
    代码片断要求2 要求使用cnblogs代码控件,参见往届同学黄兴、宫成荣的作业。凡粘贴IDE中的代码截图,或者贴文字而没有关键字高亮或彩色的,0分。
    [http://www.cnblogs.com/huangxman/p/5871201.html]
    [http://www.cnblogs.com/gongcr/p/5873493.html]

    图表过小、字迹不清、错别字、句子不通顺的,教师会因为读不懂而对此题扣分。

    PSP
    (8分)

    在同一篇博客中,参照教材第35页表2-2和表2-3,为上述“项目”制作PSP阶段表格。
    PSP阶段表格第1列分类,如功能1、功能2、测试功能1等。

    要求1 估算你对每个功能 (或/和子功能)的预计花费时间,填入PSP阶段表格,时间颗粒度为分钟。
    要求2 记录词频统计项目实际花费时间,填入PSP阶段表格,时间颗粒度要求分钟。
    要求3 对比要求1和要求2中每项时间花费的差距,分析原因。

    代码及版本控制
    (5分。虽然只有5分,但此题如果做错,因为教师得不到你的代码,所以会导致“功能实现”为负分。)
    代码要求在 coding.net 做版本控制。要求push&pull时使用git客户端,不允许使用web页面。
    要求频繁checkin。要求在PSP中记录的每次离开键盘5分钟以上,需要checkin。如果你持续长达4小时不离开键盘,教师要求展示此项能力。
    推荐git客户端tortoisegit。
    推荐先pull [https://github.com/weijunying2019102969/novelsfortest.git],里面有测试用例。

    答:Github:https://github.com/zhaoyw456/wf.git

    coding.net:https://e.coding.net/zhaoyingwei/zyw/wf.git

  • 相关阅读:
    2018年度总结
    SQL特殊comment语法
    mysql 主从复制change master to
    mysql 主从复制参数slave_net_timeout
    show master status, show slave status中的Executed_Gtid_Set
    mysql重复start slave、stop slave测试
    golang database sql DSN (Data Source Name)中的timeout, readTimeout
    mysql show master status为空值
    Linux 建立 TCP 连接的超时时间分析(解惑)
    golang 原子操作函数
  • 原文地址:https://www.cnblogs.com/zhaoyw456/p/13707172.html
Copyright © 2011-2022 走看看