一、基本信息

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:词频统计——增强功能相关推荐

  1. 软工作业 5:词频统计——增强功能

    一.基本信息 1.1 编译环境.项目名称.作者 1 #编译环境:python3.6 2 #项目名称:软工作业5-词频统计-增强功能 3 #作者:1613072055 潘博 4 # 1613072056 ...

  2. 2018(秋)软工作业 5:结对项目之词频统计——增强功能

     一.基本信息 (1)编译环境:python3.7.1.pycharm2018 (2)结对同学:1613072013 刘赛.1613072011 蒋兆丰   (3)本次作业地址:https://edu ...

  3. java大作业国际比赛奖牌榜,java大作业之词频统计

    [实例简介] 开发工具idea,统计方式为java8的stream方式,不是传统的字节流统计方式,内含答辩PPT以及统计单词的文本,配置好后可直接使用 [实例截图] [核心代码] java大作业之词频 ...

  4. 软工作业3—词频统计

    一.案例课程分析 1.编译环境 pycharm2018.python3.7 2.读文件到缓存区(process_file(dst)) def process_file(dst): # 读文件到缓冲区 ...

  5. 作业4:词频统计——基本功能

    一.基本信息 1.本次作业的地址: https://edu.cnblogs.com/campus/ntu/Embedded_Application/homework/2088 2.项目Git的地址:h ...

  6. 第三次作业(词频统计及其效能分析)

    博客开头给出自己的基本信息,格式建议如下: 学号2017035107122: 姓名:张炜一 码云地址:https://gitee.com/weiyi1208/word_frequency 调用次数最多 ...

  7. 软工作业4:词频统计

    一.基本信息 # 编译环境:Pycharm2018.Python3.7# 项目名称:词频统计--基本功能(结对编程)# 作者: 1613072050:马钰# 1613072051:朱佳豪# 16130 ...

  8. Python文本词频统计

    背景信息 本文实现英文文本词频统计,功能与Mapreduce中的wordcount是类似的.本文主要是为之后词向量训练做准备工作. 本地实现词频统计函数,输入一个文本文件,最终以dict的形式返回词频 ...

  9. 201671010403 陈倩倩 词频统计软件项目报告

    一.需求分析 一个英文文本词频统计的软件开发,其基本需求有: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上 ...

  10. 个人项目(词频统计及其效能分析)

    1. 博客开头给出自己的基本信息,格式建议如下:   学号:2017*****7212:   姓名:张佳欢;   码云项目仓库:https://gitee.com/zhangjiahuan123456 ...

最新文章

  1. 深入理解jQuery插件开发【转】
  2. 谷歌参展攻略!AI皮影戏、3D作画、与AI共舞...嗨翻魔都(附视频)
  3. xmpp这一段蛋疼的 坑,
  4. c或c++语言什么时候用补码来运算,C/C++(基础编码-补码详解)
  5. qt mysql 系统时间_使用QT和参数在SQLite数据库中插入日期时间
  6. 可应用于实际的14个NLP突破性研究成果(四)
  7. 20 PP配置-生产计划-定义计划订单计划参数
  8. php 下拉菜单 不提交 选中的值,在html中怎样可以做到下拉菜单提交后保留选中值不返回默认值...
  9. 修正IE6不支持position:fixed的bug
  10. 服务器常用的状态码及其对应的含义
  11. Activity之间的跳转和四种启动模式
  12. 在线可视化python网站_利用Python优雅地可视化数据
  13. R 语言与简单的回归分析
  14. 联想笔记本摄像头故障处理方法
  15. 弹性碰撞后速度方向_碰撞模型中的速度关系推导
  16. ARM发布Cortex-X1,是为了向苹果自研A系列处理器发起冲击吗?
  17. C语言五子棋--人机对弈--人人对弈
  18. Android数据加密传输
  19. qt样式表设置边框_QT样式表
  20. flutter bloc记录

热门文章

  1. opencv--normalize函数详解
  2. 深度linux12.12安装,深度Linux 12.12 Alpha发布
  3. 刻录cd(不同系统的方式)
  4. 2022-2028年全球与中国细菌生物农药行业市场深度调研及投资预测分析
  5. MySQL的 初步认识 - 细节狂魔
  6. dropbox无法访问后国内网盘对比选择
  7. 【Gsutil】使用手册
  8. BZOJ 1406 [AHOI2007]密码箱 数论
  9. 我常去逛的iOS干货文章、blog等【持续更新】 --转
  10. 双人五子棋Python