# 词频统计 **Repository Path**: kkkai55/word_frequency ## Basic Information - **Project Name**: 词频统计 - **Description**: No description available - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 115 - **Created**: 2019-04-08 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 零、任务背景 上次课我们了解了个体软件过程(PSP),并且基于该过程给大家介绍了在编码阶段如何使用源代码管理工具Git进行代码管理,如何在测试阶段使用单元测试保证模块质量和如何用功能测试验证软件功能。本次课我们了解了单元测试、效能分析,并且简单介绍了如何进行单元测试的测试用例设计,如何在Python中使用unittest等工具进行自动化单元测试和如何使用cProfile进行效能分析。此次作业我们将继续练习简单程序编写、源代码管理,同时练习简单的效能分析,任务主要有4项: 1. 获取仓库并创建分支 2. 完成并运行、提交代码 3. 简单性能分析并改进、提交代码 4. 按要求撰写作业博客并发布提交 # 一、任务要求 ## 1. 获取仓库并创建分支 1) Fork[北软软工/词频统计](https://gitee.com/sybrjsjrg_br_jsj_rg/word_frequency)项目到自己的码云账号 2) 将仓库通过Git克隆到本地,并创建分支和切换到新建分支,分支名称以SE+学号后四位(如SE3037),如何进行分支管理请参考如下文档: - [廖雪峰的官方网站-Git教程](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) - [菜鸟教程-Git教程](http://www.runoob.com/git/git-tutorial.html) ## 2. 完成并运行、提交代码 1) 切换到新建分支下,如何切换分支参考上文教程 2) 用编辑器或IDE打开word_freq.py,根据要求完成程序。该程序实现一个文本文件的词频统计功能,最终会输出文本文件中排名前10的单词。完成程序后可通过如下方法使用该程序: - 通过命令行进入该程序所在目录 - 运行命令:python word_freq.py [文件名],其中文件名替换为真实文件的名称,下文将提供所需文件 3) 下载测试数据,运行程序,将结果截图保存 - 测试数据下载: - 大文件:[Gone_with_the_wind](https://files.cnblogs.com/files/juking/Gone_with_the_wind.rar) - 小文件:[A_Tale_of_Two_Cities](https://files.cnblogs.com/files/juking/A_Tale_of_Two_Cities.rar) - 运行程序,示例命令如下: ``` python word_freq.py Gone_with_the_wind.txt ``` - 将结果截图保存,截图中应该包含命令以及程序运行出的结果 4) 将代码提交到代码仓库,推送到远程个人仓库 ## 3. 简单性能分析并改进、提交代码 1) 使用cProfile进行性能分析 - 用法如下: ``` python -m cProfile word_freq.py filescounted.txt [| grep word_freq.py] ``` - 示例:统计《飘》-Gone with the wind 的词频 ``` python -m cProfile word_freq.py Gone_with_the_wind.txt | grep word_freq.py ``` - 将分析结果截图,至少应该包含此次程序运行有多少次函数调用以及花费了多少时间 2) 找到的执行时间最长,执行次数最多的代码,尝试改进。并再次使用cProfile对改进后的程序进行效能分析,将结果截图,截图要求和上一个任务相同。 3) 将改进后的代码提交到代码仓库并推送到远程个人仓库后发起Pull Request,将代码推送给**北软软工/词频统计**。 **注意:** - 简单的效能分析教程:[《构建之法》教学笔记——Python中的效能分析与几个问题](https://www.cnblogs.com/xiadw/p/7455513.html) - 一个能够可视化性能监控结果的[博客:使用cProfile分析Python程序性能](https://blog.csdn.net/asukasmallriver/article/details/74356771) - 代码行级别性能分析工具:line_profiler ——一个能针对代码行级别的性能分析工具。 参考[博客:python模块-cProfile和line_profiler(性能分析器)](https://blog.csdn.net/weixin_40304570/article/details/79459811) ## 4. 按要求撰写作业博客并发布提交 将以上任务的完成情况撰写成博客随笔发布到博客园并提交到班级博客。博客随笔排版要求采用博客园的markdown排版,范飞龙 老师提供了[说明](http://www.cnblogs.com/math/p/se-tools-001.html)。 **注意**:发布博客后并不代表提交了作业,需要进入班级博客后点击进入作业界面并点击提交按钮,才能提交作业,若未提交作业,助教无法进行评分,所以务必提交作业。 1) 博客开头给出自己的基本信息,格式建议如下: - 学号(保留前4位和后4位,中间用星号代替,避免泄露个人信息); - 姓名:***,*用你的真实姓名替代 **注意:**务必给出跟人信息,评分需要个人信息。 2) 程序分析,对程序中的四个函数做简要说明。要求附上每一段代码及对应的说明。 3) 性能分析结果及改进。 - 指出执行次数最多的代码,执行时间最长的代码。 - 给出改进优化的方法以及你的改进代码 4) 程序运行命令、运行结果截图以及改进后的程序运行命令及结果截图 。 5) 给出你对此次任务的总结与反思。 # 二、评分标准 本次作业总分 **15**分。**切勿抄袭,一经发现,本次作业得-5分。** (1)博客开头给出了个人信息,得1分 (2)博客给出了程序分析说明,根据给出的分析说明质量给分,最高3分 (3)博客给出了性能分析结果及改进情况(5分) - 指出了正确的执行次数最多的代码和执行时间最长的代码,得1分 - 给出改进优化方法,根据方法的正确性以及语言描述质量给分,最高2分 - 给出改进代码,得2分 (4)程序运行命令、结果截图(2分) - 有程序运行命令、运行结果截图,得1分 - 有程序改进后的运行命令、结果截图,得1分 (5)[北软软工/词频统计](https://gitee.com/sybrjsjrg_br_jsj_rg/word_frequency)中有其分支和代码,得1分 (6)博客给出此次任务完成情况的总结反思,根据总结反思的详细与深入程度给分,最高得3分,最低不得分 **注:如能积极响应助教和老师的反馈并在评论2天内做出相应修改,会在已有评分上有一定加分,但原则上获得分数不超过本次作业总分。** **本作业根据南通大学相关课程作业改编**