zoukankan      html  css  js  c++  java
  • 作业要求 20180918-1 词频统计 卢帝同

    此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2126

    此作业的代码参见:https://coding.net/u/lew666/p/zuoye/git

    词频统计 SPEC 20180918

    功能需求:

    制作一个程序,支持命令行参数,可以统计英文文本的单词总数,各个单词的出现频数,可以同时统计多个文件并统计出现最多的十个单词。

    程序实现的语言:python

    难点1:如何读取文件?

    利用 open() 函数打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。open()函数的语法是:

    open(name[, mode[, buffering]]

    name是你要访问的文件名称的字符串值,mode是你打开文件的模式,我采用了模式r,以只读方式打开文件,buffering为寄存区的缓冲大小。

    难点2:如何实现访问多个文件?

    要同时统计多个文档,要把这个文档的路径进行赋值,直接用函数调用这个文档。

    代码:

    file_name1='E:\python_work1\gongneng1.txt'
    file_name2='E:\python_work1\gongneng3.txt'

    难点3:功能实现。

    利用python的re库和collections库里的方法。

    第一个函数是算单词总数。

    代码:

    def counts(file_name):
        total=0
        file=open(file_name,"r")
        for line in file.readlines():   //依次读取每行
             words=line.split(' ')    //以空格为分隔符分割每行的单词,并返回字符串列表
             total+=len(words)        //计算每行的单词数,然后得出一个总数
        print ("total",total)    //输出文档的所有单词

    第二个函数是算相同单词出现的次数。

    代码:

    def count_words(file_name):

        patt = re.compile("w+")//正则表达式

        count = collections.Counter(patt.findall(  //counter类用来跟踪值出现的次数,findall()方法返回file_name的一个字符串列表

        open(file_name,'rt').read()))  //在'rt'模式python在读取文本时会自动把 转换成 .

        for word, show in count.most_common():  //用word变量记录单词,用show变量记录单词出现的频数,返回一个topn列表,其中不对count.most_common(n)的n指定参数,返回所有元素

             print (word, show)

    第三个函数是算出现最高的相同单词次数的前十个。

    代码:

    def top_10(file_name):

        patt = re.compile("w+")

        count = collections.Counter(patt.findall(

        open(file_name,'rt').read()))

        for word, show in count.most_common(10)://其中对count.most_common(n)的n指定为10,返回出现相同单词次数最多的10个

     总结:

    这周实战我觉得对我意义很大,并且也很打击我。在我看来,一开始觉得做这个应该还好,慢慢学,然后做出来,实际上不知所措,走了特别多的弯路,因为之前并没有多少工程上的经历,代码基础又不太好,这周,天天跟我室友张宇研究怎么实现,看着一天一天的流逝,确实真的有在学习,但是并没有什么进展,技术方向都是弯路,挨个试。这门课对我来说是一个全新的方式,我也深知是我自身的能力不行,每天都特别愁,总想着超车,真的要方平自己的野心,一点一点来,积累下来,会学到很多很多。这周作业完成的不但没有实现老师的提出的功能,有的功能还不符合老师的要求,但是我真的努力了。

    功能1实现图:

    功能2实现图:

    功能3实现图:

     PSP阶段表格:

    PSP阶段 预计花费时间 实际花费时间 差距 原因
    功能1 120min 482min  362min 确定用C语言来写这个程序,回顾了一下C语言的知识点,并安装了VS,之前有vc6.0,在网上看了很多文档,写了一个程序命令行跑不出来,我直接用(int argc,char *argv[]),判断输入为三个参数的时候就执行,感觉不对,VS环境一直出错,一直提示我有错误,后来放弃了,改用python语言去写第一个功能,在RUNOOB0.COM看了基础教程,学习了它的库函数废了很长时间。
    测试功能1 15min 40min  25min 用C调试了好久,都没成功,测试数据比较离谱,废了很长时间,后来用python测试,实现了功能。
    功能1 180min 411min  231min 不知道怎么用参数在控制台输入,查了很多教程都没查到,功能能实现,无法用参数去实现,一直卡顿在这个问题上。
    测试功能2 30min 64min  34min 测试的时候结果不对,来回跑,换小说跑,有的对有的不对,有的多了,有的少了,到现在为止也不知道问题出在哪里。
    功能3 60min 211min  15min 对这个问题的分析时,我觉得用形参多添加打开路径,然后用什么方法一下子给它提出来前10多的就行,想简单了,从网上查文档学习了很长时间。
    测试功能3 15min 21min  6min 一开始得到的结果跟我想得到的不一样,后来又改了格式,测试了多个文档看是否成功。
    功能4 200min 234min  34min 这个功能没实现,实在不知道怎么做,当时读功能就没明白,咨询学长,同学。最后我自己也没整明白。
    测试功能4 0min 0min 0min 没有实现,所以无法测试。

     

     

  • 相关阅读:
    计算两张图的余弦相似度
    绘制heatmap
    TensorFlow图像识别(物体分类)入门教程
    毕业设计任务01-前期调查与选题
    个人附加作业
    个人作业3——个人总结(Alpha阶段)
    结对编程2——单元测试
    个人作业2——英语学习APP案例分析
    结对作业1----基于GUI的四则运算生成器
    个人作业1——四则运算题目生成程序
  • 原文地址:https://www.cnblogs.com/luditong/p/9696645.html
Copyright © 2011-2022 走看看