20180912-3 词频统计

作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583

代码地址:https://e.coding.net/wangkefei/word_frequency.git

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

重点1:打开文本、读至文件结束、将文本中所有字母变为小写(防止因为大小写不同而把相同的单词记为不同)。

def read(filename):
    with open(filename, encoding='utf-8') as f:
        lines = f.read().lower()
        return lines
        f.close()

重点2:运用正则表达式,将得到的字符串分割,同时去除句中的标点符号;运用filter()函数,过滤掉空格。

import re
    words = re.split(r'[",", ".", "!", "?", ";", ""","--"]', lines)
    words = list(filter(None, words))

重点3:将单词存入字典。统计单词及其出现次数,并倒序排序。难点:使用sorted()函数, "key=itemgetter(1)" 对元素根据出现次数进行排序,“reverse=True”实现倒序。

    word_counter = {}
    max_len = 5
    for word in words:
        if len(word) > max_len:
            max_len += 5
        if word in word_counter.keys():
            word_counter[word] += 1
        else:
            word_counter[word] = 1
    d_sort = sorted(word_counter.items(), key=itemgetter(1), reverse=True)
    print('total', len(d_sort))
    print(' ')
    formation = "{0:<%ds}{1:<6d}" % max_len
    for tu in d_sort:
        print(formation.format(tu[0], tu[1]))

运行截图:

功能2:支持命令行输入英文作品的文件名

 重点:在功能1的基础上修改,运用range()函数,只输出前十个出现次数最多的单词。

    print(' ')
    formation = "{0:<%ds}{1:<6d}" % max_len
    for i in range(min(len(d_sort), 10)):
        print(formation.format(d_sort[i][0], d_sort[i][1]))

运行截图:

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

重点:在功能1的基础上,对读取文件的部分进行了修改。运用了os模块,对命令行的输入进行判断,使用os.path.isfile()和os.path.isdir()函数——如果是文件名,同功能1;如果是文件夹,则使用os.listdir() 函数,获得文件夹中所有的txt文件,对每一个txt文件进行功能2的操作。

def read(filename):
    if os.path.isfile(filename):
        with open(filename, encoding='utf-8') as f:
            lines = f.read().lower()
            statistics(lines)
    elif os.path.isdir(filename):
        dirs = os.listdir(filename)
        for txt in dirs:
            with open(filename+'/'+txt, encoding='utf-8') as f:
                lines = f.read().lower()
                print(txt)
                statistics(lines)
                print('---------------------------------------------')

运行截图:

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

 答:作业提交前还未完成,之后会继续学习。

PSP图

  预计花费时间 实际花费时间 花费时间差距 原因
功能1 180min

454min

274min

刚开始思路不清晰,预计会花费较长时间来完成。

决定使用python编写后一边查函数的使用方法一边编写代码。

调试阶段安装pip、将py程序打包成exe,实现从控制台输入命令也花费了一段时间。

功能2 60min 73min 13min 在功能一的基础上修改,进度比前一阶段快一些。不是很熟悉函数的使用,导致实际比预计时间长。
功能3 90min 106min 16min 涉及os模块内容,难度稍大,边学边做。
功能4 240min  97min  143min 对题意理解不深。
原文地址:https://www.cnblogs.com/wkf-/p/11518360.html