软工实践(四)——热词统计

编程入门 行业动态 更新时间:2024-10-09 06:28:01

软工实践(四)——热词统计

软工实践(四)——热词统计

课程:软工实践(链接)

作业:结对第二次—文献摘要热词统计及进阶需求 (链接)
Github基础需求项目地址(链接)
Github进阶需求项目地址(链接)
结对学号:221600219 221600212
作业目标:
一、基本需求:实现一个能够对文本文件中的单词的词频进行统计的控制台程序。
二、进阶需求:在基本需求实现的基础上,编码实现顶会热词统计器。

一、Github签入记录

基础需求

进阶需求

自动测试

爬虫数据分析

二、基础需求

项目结构

├── PairProject1-Java  
│   └── 221600219&221600212  
│       └── src  
│           ├── Main.java  
│           └── Lib.java  

类图

核心代码

三、进阶需求

项目结构

├── PairProject2-Java  
│   └── 221600219&221600212  
│       └── cvpr
│           ├── Main.java  
│           └── result.txt  
│       └── src  
│           ├── Main.java  
│           └── Lib.java  

类图

核心代码

使用Junit 进行了单元测试:

单元测试的覆盖率:

使用Jprofiler进行性能测试

本次性能测试的数据都是爬虫爬取到的result.txt数据,一共502篇论文

优化前各项的耗时情况

分析:

我们发现早期的性能瓶颈是因为对文件进行了多次读取,并在每次读取都进行了排序,所以导致Lib.sortWordMap时间占用长。

对于这样的耗时情况,是不能接受的:

我们推翻的之前的方法,通过商讨,摒弃的之前较慢的字符串处理,而是采用了更快的二进制字节处理,同时原本的多次读取文件也改为了一次读取,多次使用。
main调用只读取一次文件:

收集单词使用二进制判断:

优化后各项的耗时情况

从原本的87s左右降低到了仅有3s,大幅度的提升了程序的运行速度:

爬虫

爬虫部分使用java编写,结合了Jsoup,先匹配CVPR网站上的ptitle类,然后查找类中的标签,获取论文链接。

python编写的自动测试工具

为了方便对基础代码进行自动测试,我使用了python的subprocess库进行对Java代码的自动编译和执行,用unitest来对Java程序的运行结果进行测试,用HTML_Runner_Chart库来对测试结果进行呈现。

代码已经开源至Github仓库:

代码目录和核心代码

使用Python自动测试结果(动图加载可能较慢)

四、附加题

我们使用Python的pyecharts、subprocess库,对Java的爬虫代码和WordCount进行了调用,对词组词数分别为1-5的情况进行了图表数据呈现。
github仓库地址:

当词组单词数为1时,发现最经常出现的词是learning,是啊,这是个learning的时代,一方面是机器学习、深度学习的火热,一方面是在这个时代IT不保持学习就会落后..

当词组数为2时,neural networks(神经网络)、convolutional neural(卷积神经)都出现在了热词里...


词组数为3时,前二都是卷积神经网络

我们对词组为2时进行了词云图分析

五、PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3010
  Estimate  估计这个任务需要多少时间3010
Development开发14002290
 Analysis 需求分析 (包括学习新技术)100100
 Design Spec 生成设计文档6030
 Design Review 设计复审3050
 Coding Standard 代码规范 (为目前的开发制定合适的规范)2020
 Design 具体设计180250
 Coding 具体编码8001000
 Code Review 代码复审110110
 Test 测试(自我测试,修改代码,提交修改)100150
Reporting报告120110
  Test Repor  测试报告3030
  Size Measurement 计算工作量3030
 Postmortem &
 Process Improvement Plan
 事后总结, 并提出过程改进计划6050
All合计15502410

六、遇到的困难与解决

  • 使用字符串来进行单词的频率计算,效率低下。后面使用二进制字节来进行了所有的检测流程,效率提高了,但是编码的难度也提高了,好在付出了更多的时间之后还是解决了这个问题。
  • 由于平时没有使用IDE,编写代码后都使用命令行运行,导致对IDEA并不熟悉,花了很多时间来进行程序的性能分析和单元测试覆盖率分析。

七、总结

  • 这次作业,小组遇到了不少的困难,但也收获了不少新的技能。这次在对需求的分析上,我们遇到了很多的障碍,其实很多需求在作业中已经给明了清晰的定义,只是我们在阅读需求文档的经验不足,导致不能够很敏锐的挖掘出这些潜在的信息。在这次作业里,我觉得我和我的队友都得到了很好的一次锻炼,也充分意识到了,在对需求没有一个清晰的理解下就动手编码,只会让作业的完成事半功倍。在以后的工作岗位上,我们一定会遇到更多的更苛刻的需求,所以很开心可以在这次作业中锻炼自己的这方面的阅读能力。
  • 除了掌握基本的算法知识之外,掌握一些额外的技能也是很重要的,如使用python来进行数据的分析和处理,然后图表化呈现、使用Jprofiler进行Java的性能分析,这些技能能更好的辅助我们进行代码的编写。

八、对队友的评价

221600212 :

感觉这次能和长平同学结对是一次很愉快的合作。在整个作业的分析,设计,开发,调试过程中,长平一直很认真的在对待,一起沟通问题解决问题。他较为丰富的开发经验以及对Bug的一丝不苟,保障了作业的高质量完成同时也少走许多歪路。真的是一位很可靠的搭档!

221600219:

和剑威结队的过程中,也是一个互相学习的过程,我们在电脑前一起讨论,一起找bug,有时候我也惊叹他的想法的独到之处,他常常指出我没想到的地方,而且非常认真负责的完成了分工,虽然他在编程上还有待提高,但他是一位能让人感到合作愉快的队友。希望之后和他的配合会越来越默契。

转载于:.html

更多推荐

软工实践(四)——热词统计

本文发布于:2024-03-05 21:52:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1713550.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!