zoukankan      html  css  js  c++  java
  • 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 对题意理解不深。
  • 相关阅读:
    FCK常用Js,获取FCK内容,统计FCK字数,向FCK写入指定代码
    asp 点击链接 下载图片文件
    使用微软的 Visual Studio International Pack 1.0 进行网站简体与繁体的互转和得到汉字、拼音、笔画
    mysql alter 语句用法,添加、修改、删除字段等
    C#指定窗口显示位置的方法
    Soukey采集软件源码
    [转](收藏)《博客园精华集》分类索引
    YUI CSS Foundation讲座 博客文库 博客园
    sql group by 和having
    sql 多表查询
  • 原文地址:https://www.cnblogs.com/wkf-/p/11518360.html
Copyright © 2011-2022 走看看