作业 5:词频统计——增强功能
一、基本信息
1.1 本次作业地址:https://edu.cnblogs.com/campus/ntu/Embedded_Application/homework/2088
1.2 项目的Git地址:https://gitee.com/ntucs/PairProg
1.3合作:1613072005 蒋晓明 1613072006 陈扬
二、项目分析
程序运行模块(方法、函数)介绍
Task1:接口封装 —— 将基本功能封装成(类或独立模块)
将统计文本总词数,统计文本最多的十个单词及其词频这两个方法封装在类workCount中
import reclass workCount:def process_file(dst): # 读文件到缓冲区try: # 打开文件f = open(dst, 'r')except IOError as s:print(s)return Nonetry: # 读文件到缓冲区bvffer = f.read()except:print("Read File Error!")return Nonef.close()return bvfferdef process_buffer(bvffer):if bvffer:word_freq = {}# 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freqbvffer = bvffer.lower() # 大小写转换,将大写字母转化为小写字母for s in '“”!?,.;:$':bvffer = bvffer.replace(s, ' ') # 将找出的特殊符替换为空格list = re.findall(r'[a-z]{4}\w*', bvffer) # 利用re模块的查找功能与正则表达式相结合,找出符合单词定义的单词,存入listfor str in list:word_freq[str] = word_freq.get(str, 0) + 1 # 计数return word_freqdef process_count(bvffer): # 统计总词数数count = bvffer.count(" ") + 1return countdef output_result(word_freq):if word_freq:sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)for item in sorted_word_freq[:10]: # 输出 Top 10 的单词print(item)return sorted_word_freq[:10]def print_result(dst):bvffer = workCount.process_file(dst)word_freq = workCount.process_buffer(bvffer)count = workCount.process_count(bvffer)print('单词数:' + str(count))print('最多的10个单词及其词频')workCount.output_result(word_freq)
编写TEST.py测试类,通过import argparse模块,可以在cmd命令行中调用
import cla
import argparse
if __name__ == '__main__':parser = argparse.ArgumentParser(description="your script description") # description参数可以用于插入描述脚本用途的信息,可以为空parser.add_argument('--file', '-file', type=str, default='E:\作业\软件工程1\SE16_WordCount\Gone_with_the_wind.txt',help="读取文件路径") # default属性是默认值,当参数输入错误时使用默认参数 type后表示参数的类型args = parser.parse_args() # 将变量以标签-值的字典形式存入args字典dst = args.filecla.workCount.print_result(dst)
在pycharm环境下运行截图
在命令行传参截图
Task 2. 增加新功能
- 词组统计:能统计文件夹中指定长度的词组的词频
- 自定义输出:能输出用户指定的前n多的单词与其数量
类cla的代码:
import reclass workCount:def __init__(self, dst, m, n, o): # dst:打开文件路径;m:词组长度;n:输出的单词数量;o表示输出文件的存储路径self.dst = dstself.m = mself.n = nself.o = odef process_file(self): # 读文件到缓冲区try: # 打开文件f = open(self.dst, 'r')except IOError as s:print(s)return Nonetry: # 读文件到缓冲区bvffer = f.read()except:print("Read File Error!")return Nonef.close()return bvfferdef process_lines(self): # 读取行数countline = 0for index, line in enumerate(open(self.dst, 'r')):countline += 1return countlinedef process_buffer(self,bvffer):if bvffer:word_freq = {}# 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freqbvffer = bvffer.lower() # 大小写转换,将大写字母转化为小写字母for s in '“”!?,.;:$':bvffer = bvffer.replace(s, ' ') # 将找出的特殊符替换为空格match = '[a-z]+'for i in range((self.m) - 1):match += '\s[a-z]+' # m长度词组的正则表达式list = re.findall(match, bvffer) # 利用re模块的查找功能与正则表达式相结合,找出符合单词定义的单词,存入listfor str in list:word_freq[str] = word_freq.get(str, 0) + 1 # 计数return word_freqdef process_count(bvffer): # 统计总词数数count = bvffer.count(" ") + 1return countdef output_result(self,word_freq):if word_freq:sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)for item in sorted_word_freq[:self.n]: # 输出单词print(item)return sorted_word_freq[:self.n]def print_result(self):print('查询路径为:' + str(self.dst) + '的文本')print('统计词组长度为:' + str(self.m) + '且词频前' + str(self.n) + '的单词')bvffer = workCount.process_file(self)word_freq = workCount.process_buffer(self,bvffer)count = workCount.process_count(bvffer)countline = workCount.process_lines(self)lines = 'lines:' + str(countline)words = 'words:' + str(count)print(words)print(lines)items = workCount.output_result(self, word_freq)w = open(self.o, 'w+')w.write(lines + '\n')w.write(words + '\n')for item in items: # 格式化item = '<' + str(item[0]) + '>:' + str(item[1]) + '\n'w.write(item)print('写入' + self.o + '文件已完成!')w.close()
TEST测试类代码:
import cla
import argparse
if __name__ == '__main__':parser = argparse.ArgumentParser(description="your script description") # description参数可以用于插入描述脚本用途的信息,可以为空# parser.add_argument('--file', '-file', type=str, default='E:\作业\软件工程1\SE16_WordCount\Gone_with_the_wind.txt',help="读取文件路径") # default属性是默认值,当参数输入错误时使用默认参数 type后表示参数的类型parser.add_argument('--i', '-i', type=str, default='E:\作业\软件工程1\SE16_WordCount\Gone_with_the_wind.txt', help="读取文件路径")parser.add_argument('--m', '-m', type=int, default=3, help="输出的单词数量")parser.add_argument('--n', '-n', type=int, default=3, help="输出的单词个数")parser.add_argument('--o', '-o', type=str, default='E:/作业/软件工程1/SE16_WordCount/result.txt', help="写入文件路径")args = parser.parse_args() # 将变量以标签-值的字典形式存入args字典dst = args.im = args.mn = args.no = args.oobj = cla.workCount(dst, m, n, o) # 将参数传给类obj.print_result() # 调用类里面的自定义的输出函数,将数据呈现出来
在pycharm中的截图:
在命令行传参截图
三、性能分析
本次实验在作业4基础上进行,性能相差不大。
1.调用次数
2.运行时间
3.性能图表
四、PSP 表格
五、事后分析与总结
- 简述结对编程时,针对某个问题的讨论决策过程。(1分)
- 主要通过上网查找资料,一起商讨解决。
- 评价对方:请评价一下你的合作伙伴,又哪些具体的优点和需要改进的地方。 这个部分两人都要提供自己的看法。(1分)
- 陈扬同学对蒋晓明同学的评价:
在整个结对编程的过程中,蒋晓明同学都很认真负责。对于新鲜的东西上手很快,遇到一些问题,我们也能很好地沟通解决,在整个编程过程中该同学付出了很大的努力!期待着和蒋晓明同学的下次合作。 - 蒋晓明对陈扬的评价:
- 陈扬同学积极主动,十分好学,在我们学习python的时候理解的很快也理解的很好,马上就可以学以致用,和他合作感到很舒服。
- 评价整个过程:关于结对过程的建议(1分)
通过这两次的结对编程,我觉得对我们的合作能力有了很大的提升,同时也考验了相互协作能力,结对编程就是一次小型的合作项目,只有有效地分工合作,才能很好地完成本次编程,一次一次地沟通,一次一次地改正。结对编程也能很好地解决一个问题,有时候一个人想一个问题总是想不到解决的方法,但是两个人一起想总是可以互补,快速地解决问题,期待着以后还可以结对编程,由两个人慢慢变成三个人。逐渐向工作的环境靠拢,模拟以后工作的项目分工。
- 结对编程照片(0.5分)
- 其它 (0.5分)
- 经过两次合作,我们默契更高,工作更加顺利。
转载于:https://www.cnblogs.com/1613072005jxm/p/10044469.html
作业 5:词频统计——增强功能相关推荐
- 软工作业 5:词频统计——增强功能
一.基本信息 1.1 编译环境.项目名称.作者 1 #编译环境:python3.6 2 #项目名称:软工作业5-词频统计-增强功能 3 #作者:1613072055 潘博 4 # 1613072056 ...
- 2018(秋)软工作业 5:结对项目之词频统计——增强功能
一.基本信息 (1)编译环境:python3.7.1.pycharm2018 (2)结对同学:1613072013 刘赛.1613072011 蒋兆丰 (3)本次作业地址:https://edu ...
- java大作业国际比赛奖牌榜,java大作业之词频统计
[实例简介] 开发工具idea,统计方式为java8的stream方式,不是传统的字节流统计方式,内含答辩PPT以及统计单词的文本,配置好后可直接使用 [实例截图] [核心代码] java大作业之词频 ...
- 软工作业3—词频统计
一.案例课程分析 1.编译环境 pycharm2018.python3.7 2.读文件到缓存区(process_file(dst)) def process_file(dst): # 读文件到缓冲区 ...
- 作业4:词频统计——基本功能
一.基本信息 1.本次作业的地址: https://edu.cnblogs.com/campus/ntu/Embedded_Application/homework/2088 2.项目Git的地址:h ...
- 第三次作业(词频统计及其效能分析)
博客开头给出自己的基本信息,格式建议如下: 学号2017035107122: 姓名:张炜一 码云地址:https://gitee.com/weiyi1208/word_frequency 调用次数最多 ...
- 软工作业4:词频统计
一.基本信息 # 编译环境:Pycharm2018.Python3.7# 项目名称:词频统计--基本功能(结对编程)# 作者: 1613072050:马钰# 1613072051:朱佳豪# 16130 ...
- Python文本词频统计
背景信息 本文实现英文文本词频统计,功能与Mapreduce中的wordcount是类似的.本文主要是为之后词向量训练做准备工作. 本地实现词频统计函数,输入一个文本文件,最终以dict的形式返回词频 ...
- 201671010403 陈倩倩 词频统计软件项目报告
一.需求分析 一个英文文本词频统计的软件开发,其基本需求有: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上 ...
- 个人项目(词频统计及其效能分析)
1. 博客开头给出自己的基本信息,格式建议如下: 学号:2017*****7212: 姓名:张佳欢; 码云项目仓库:https://gitee.com/zhangjiahuan123456 ...
最新文章
- 深入理解jQuery插件开发【转】
- 谷歌参展攻略!AI皮影戏、3D作画、与AI共舞...嗨翻魔都(附视频)
- xmpp这一段蛋疼的 坑,
- c或c++语言什么时候用补码来运算,C/C++(基础编码-补码详解)
- qt mysql 系统时间_使用QT和参数在SQLite数据库中插入日期时间
- 可应用于实际的14个NLP突破性研究成果(四)
- 20 PP配置-生产计划-定义计划订单计划参数
- php 下拉菜单 不提交 选中的值,在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值...
- 修正IE6不支持position:fixed的bug
- 服务器常用的状态码及其对应的含义
- Activity之间的跳转和四种启动模式
- 在线可视化python网站_利用Python优雅地可视化数据
- R 语言与简单的回归分析
- 联想笔记本摄像头故障处理方法
- 弹性碰撞后速度方向_碰撞模型中的速度关系推导
- ARM发布Cortex-X1,是为了向苹果自研A系列处理器发起冲击吗?
- C语言五子棋--人机对弈--人人对弈
- Android数据加密传输
- qt样式表设置边框_QT样式表
- flutter bloc记录