作业要求 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在读取文本时会自动把\r\n转换成\n.
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 | 没有实现,所以无法测试。 |