作业要求 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 没有实现,所以无法测试。

 

 

原文地址:https://www.cnblogs.com/luditong/p/9696645.html