一、基本信息

(1)编译环境:python3.7.1、pycharm2018

(2)结对同学:1613072013 刘赛、1613072011 蒋兆丰

  (3)本次作业地址:https://edu.cnblogs.com/campus/ntu/Embedded_Application/homework/2088

(4)项目Git地址:https://gitee.com/ntucs/PairProg/tree/SE013_011

二、项目分析

1.步骤:

(1)按照作业要求将函数封装成类,以便让使用不同环境的用户(例如,命令行、Windows图形界面程序,网页程序,手机App)进行方便的调用。

import reclass WordCount():def __init__(self, dst, m, n, o):  # dst:文件路径;m:每个词组长度;n:输出的单词数量;o:设定生成文件的存储路径self.dst = dstself.m = mself.n = nself.o = odef process_file(self):  # 读取文件d = open(self.dst, "r")bvffer = d.read()return bvfferdef process_rowCount(self, bvffer):  # 计算文章的行数if bvffer:count = 1for word in bvffer:  # 开始计数if word == '\n':count = count + 1return countdef process_wordNumber(self, bvffer):if bvffer:bvffer = bvffer.lower()  # 将文本中的大写字母转换为小写for ch in '{}!"#%()*+-,-.\/:;<=>?&@“”[]^_|':bvffer = bvffer.replace(ch, " ")  # 将文本中非法字符转化为空格words = bvffer.split()  # 用空格分割字符串if words:wordNew = []words_select = '[a-z]{4}(\w)*'for i in range(len(words)):word = re.match(words_select, words[i])  # 如果不匹配,返回NULL类型if word:wordNew.append(word.group())word_freq = {}for word in wordNew:  # 将正则匹配的结果进行统计word_freq[word] = word_freq.get(word, 0) + 1return wordNew, word_freqdef process_MPhrase(self, bvffer):  # 查找m个单词组成的词组if bvffer:model = ''for i in range(self.m):model += '[a-z]+'if i < self.m - 1:model += '\s'result = re.findall(model, bvffer)  # 正则查找词组word_freq = {}for word in result:  # 将正则匹配的结果进行统计word_freq[word] = word_freq.get(word, 0) + 1return word_freqdef 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]:  # 输出前n个频率最高的单词print('<' + str(item[0]) + '>:' + str(item[1]))return sorted_word_freq[:self.n]def print_result(self):print('查询路径为:' + str(self.dst) + '的文本')print('统计词组长度为:' + str(self.m) + '且词频前' + str(self.n) + '的单词')bvffer = WordCount.process_file(self)  # 文件读入缓冲区lines = WordCount.process_rowCount(self, bvffer)  # 计算文章的行数wordNew, word_freq = WordCount.process_wordNumber(self, bvffer)  # 筛选出符合单词标准的单词词组sum_words = len(wordNew)  # 计算出符合单词标准的单词数量phrase_freq = WordCount.process_MPhrase(self, bvffer)show_sum_words = 'words:' + str(sum_words)show_lines = 'lines:' + str(lines)print(show_sum_words)  # 显示文章单词总数print(show_lines)  # 显示文章的行数itemsWord = WordCount.output_result(self, word_freq)itemsPhrase = WordCount.output_result(self, phrase_freq)with open(self.o, 'w+') as w:w.write(show_lines + '\n')w.write(show_sum_words + '\n')# 单词的可视化输出for itemWord in itemsWord:item = '<' + str(itemWord[0]) + '>:' + str(itemWord[1]) + '\n'w.write(item)# 词组的可视化输出for itemPhrase in itemsPhrase:item = '<' + str(itemPhrase[0]) + '>:' + str(itemPhrase[1]) + '\n'w.write(item)print('写入' + self.o + '文件已完成!')w.close()

(2)我们现在pycharm里试验一下能否成功统计词频(文本文件使用的是同一路径下的“Gone_with_the_wind.txt”,在主函数中预设统计3个单词组成的词组和输出出现频率最高的4个单词,并将结果保存成re.txt)

if __name__ == '__main__':obj = WordCount('src/Gone_with_the_wind.txt', 3, 4, 'src/re.txt')obj.print_result()

(3)想要实现按照用户的要求对用户指定文本进行分析,就需要学习parserm模块中的add_agrumen函数,将你想输入的文本,要求规定到parser中,然后类似参数传递一样传递到class类中的各个函数得以实现。

def main():parser = argparse.ArgumentParser(description="your script description")  # description参数可以用于插入描述脚本用途的信息,可以为空parser.add_argument('--i', '-i', type=str, default='src/Gone_with_the_wind.txt', help="读取文件路径")parser.add_argument('--m', '-m', type=int, default=3, help="输出的单个词组数量")parser.add_argument('--n', '-n', type=int, default=4, help="输出的频率前n个的单词和词组数量")parser.add_argument('--o', '-o', type=str, default='src/result.txt', help="读取文件路径")args = parser.parse_args()  # 将变量以键-值的字典形式存入args字典dst = args.im = args.mn = args.no = args.oobj =WordCount.WordCount(dst, m, n, o)obj.print_result()

(4)在Dos命令提示符中传递参数

三、性能分析

四、PSP 表格

五、事后分析与总结

(1)针对某个问题的讨论决策过程:我们对API接口着重分析,针对API接口的实现方式进行了讨论,并决定采用刘赛同学提出的方案。

(2)评价对方:请评价一下你的合作伙伴,又哪些具体的优点和需要改进的地方。 这个部分两人都要提供自己的看法。

刘赛:刘赛同学的学习能力很快,这是一直令我敬佩的一点。面对一个全新的甚至有些棘手的问题,他能够迅速通过在线资源进行高效准确的学习。

蒋兆丰:蒋兆丰非常认真,非常负责任,对于新接触的知识,立刻会付出行动进行验证。

(3)评价整个过程:关于结对过程的建议

结对编程不仅考研了编程能力,也考验了合作能力,根据第一次分支项目合作的经验,我们很快根据双方在各方面能力上做好了任务分工。于是我们在任务的各个准备工作、安排细则都敲定之后,能很迅速地投入到工作中去。通过本次结对编程我们也充分的认识到了合作的重要性,一个人编程不免要犯这样那样的错误,结对编程就很好的避免了这样的问题。

(4)结对编程照片

转载于:https://www.cnblogs.com/NTUliusai/p/10044364.html

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

  1. 2022秋软工实践 第一次结对编程作业

    2022秋软工实践 第一次结对编程作业 需求分析 (1)Need,需求 (2)Approach,做法 (3)Benfit,好处 (4)Competitors,竞争 (5)Delivery,推广 UML ...

  2. 2021秋软工实践第一次结对编程作业

    这个作业属于哪个课程 构建之法-2021秋-福州大学软件工程 这个作业要求在哪里 2021秋软工实践第一次结对编程作业 这个作业的目标 实现博饼软件原型并进行博客写作 学号 031902139 队友学 ...

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

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

  4. 2021秋软工实践第一次结对编程作业-需求分析

    博饼软件需求分析 一.简要说明 博饼,是厦门人几百年来独有的中秋传统活动,是一种独特的月饼文化,也是厦门人对历史的一种传承.现在,博饼依然是厦门人最钟爱的中秋活动,也是最热闹的一个民俗节日形式. 目前 ...

  5. 软工结对项目之词频统计update

    队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...

  6. (2015秋) 软工作业成绩公布

    第一次成绩(规格化后的): 成绩表格:(Markdown 格式有些问题,稍后上传) 说明: 部分低分成绩的同学,主要原因是直接(大段)复制了网页的内容. 这部分同学,可以通过做 附加题(http:// ...

  7. 2022秋软工实践 第二次结对编程作业

    这个作业属于哪个课程 fzusdn 这个作业要求在哪里 作业要求 这个作业的目标 生成指定条件数据集,实现效益最大的点名策略 学号 032004110 队友学号 032004119 commit记录 ...

  8. 2021秋软工实践个人作业一

    2021秋软工实践个人作业一 2021秋软工实践个人作业一 自我介绍 技能树 精简技能树 技能树描述 学期目标 软件工程A 构建之法-2021秋-福州大学软件工程 作业要求 2021秋软工实践个人作业 ...

  9. 2022秋软工实践个人作业二

    2022秋软工实践个人作业二 Task I Task II 这个作业属于哪个课程 软工实践 这个作业要求在哪里 2022秋软工实践个人作业二 这个作业的目标 git html 学号 032002342 ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装批量图片处理器XnConvert
  2. 学生信息管理系统(连接数据库,面向对象的方法实现学生信息的增删改查操作)...
  3. linux:uabntu日常操作
  4. 干货!一文解决产品经理对UML的全部疑问
  5. Qt: QTimer和QThread
  6. sonar plugin DefaultMeasure与DefaultHighlighting
  7. 实用知识点梳理:网络操作系统、HTTPS、交换机中用户权限、路由器与集线器功能、HTTP2.0特性
  8. Java----前端验证之验证码额实现
  9. 关于头文件中的 static inline函数
  10. python基础课程1(看代码看注释)--基本操作和数据类型
  11. 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno...
  12. 输入url到页面返回的过程
  13. JavaScript高级程序设计(第4版)知识点总结
  14. jquery文档就绪函数
  15. html 360 浏览器图片自适应,360浏览器看图模式 一键保存高清套图
  16. vue实现折叠组件-collapse
  17. 金融初学者的感受:兴趣的魔力
  18. python咋念_python怎么念
  19. word里面怎么在框里打勾
  20. MYSQL docker镜像简单安装数据库

热门文章

  1. java.sql.SQLException: connection holder is null
  2. 在windows上设置代理服务器
  3. 【学习笔记/PLL】锁相环PLL线性模型理论分析
  4. 基本的Dos命令和打开CMD的方式
  5. 怎样成为快速阅读的高手(中)
  6. Kafka consumer频繁reblance
  7. C# 之 二进制的简单使用
  8. PHP第一个项目--HelloWorld(从安装到运行成功)
  9. 国库券收益计算matlab,Excel 计算国库券收益率:TBILLYIELD函数
  10. 中国高钛渣行业产业投资分析及需求前景预测报告2022-2027年