福大软工1816 · 第五次做业 - 结对做业2

博客连接:http://www.cnblogs.com/SoundOfSilence/

github项目地址:https://github.com/BenjaminAlvis/pair-project/commits/master

具体分工:

基本功能部分:王彬前端

附加题部分:葛亮python

PSP表格:

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 40 40
· Estimate · 估计这个任务须要多少时间 1000 800
Development 开发 400 400
· Analysis · 需求分析 (包括学习新技术) 400 400
· Design Spec · 生成设计文档 20 20
· Design Review · 设计复审 40 40
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 0
· Design · 具体设计 400 400
· Coding · 具体编码 200 200
· Code Review · 代码复审 40 40
· Test · 测试(自我测试,修改代码,提交修改) 40 40
Reporting 报告 60 80
· Test Repor · 测试报告 20 20
· Size Measurement · 计算工做量 20 0
· Postmortem & Process Improvement Plan · 过后总结, 并提出过程改进计划 40 20
合计 2100

解题思路

解题思路

爬虫使用:

  • 本次做业须要使用网络爬虫技术,在一开始进行需求评估的时候,我就认为用C++实现爬虫太过繁琐,由于C++相对于python等脚本语言来讲抽象程度还不够高,从套接字编程到网页爬取都须要亲力亲为。并且网络上关于C++爬虫的资料也很少,因此我就选用了相对更方便的python来完成任务,经过对CVPR网站的分析,我发现须要爬取的内容格式工整,且整个网站也没有反爬虫措施,因此我直接使用python的urllib库和正则表达式完成了论文列表的抓取

spider.png

代码组织与内部实现设计

  • 代码由四个部分组成:
    • WordCount:程序的入口,负责调用其余函数
    • argHandle: 负责对传入参数的合法性进行判别
    • CountChar:负责对传入文本进行字符数统计
    • CountWord:负责对文本进行单词处理
    • 类图
      类图

说明算法的关键与关键实现部分流程图

  • 由于此次的做业是在上一次结对做业的基础上进行的,因此问题的核心难点依旧是在单词(词组)的划分上,针对指定长度词组,我使用的方法的基本理念是一方面使用做业一中的划词程序将符合条件的单个单词取出,另外一方面不断维护词组的开始和结束两个哨兵节点,这样每当规定长度的词组被取出,就可根据词组头尾两个哨兵节点取出整个字符串的字串(即所需词组)
  • 在爬出的CVPR顶会论文列表中,TITLE和ABSTRACT以后的内容都是单独一行呈现的,因此个人划词程序是以一次读入一整行字符串开始的,这样处理后能自然的划分出的单词(词组)是属于Title或是属于Abstract
  • 另外一方面,为了维护针对词组的滑动窗口,划词函数额外维护每一个词组的第二个单词的起始位置,这样就能在整个字符串的维度上,实现必定长度词组的步进

核心算法流程图:c++

core-process

核心代码展现:git

1.png
2.png
3.png
4.png
5.png
6.png

附加题

  • 考虑到获得topN后的高频词中有着很多像“the,that,show,then”这些出现频率很高但对主题并无很短关联的助词和无心义词汇,咱们决定写个过滤掉他们的小功能,为了在N很小的时候能够筛选出更有用的信息。因而就有了这样一句十分暴力的比较。
    github

  • 然后我也对输出作了相对直观的改进,让词频的输出不局限与数字,而是以😊的形式按照词频所占词频总数的比例输出一个相似于能量条的笑脸串。
    正则表达式

  • 咱们还有一个大胆的设想就是给这个小程序增长美丽的边框,研究了一番命令提示符工具后增长了一个关于输出界面的源文件。
    算法

性能改进

  • 针对咱们的程序,在性能测试上使用了从CVPR上爬取的论文列表来做为性能测试的样本,在最开始的测试中,跑彻底文本耗时12.09s
  • 性能分析:

performance_before

performA.png

performA.png

  • 经过分析,能够发现代码逻辑在所指出的地方存在不合理的地方,通过改正后:

performence_after.png

  • 运行相同文本的时间由原来的12.09s变成11.45秒,性能提高5.3%

单元测试

  • 安排的十个单元测试:
  • 缺乏3个必要参数时程序提示参数错误
  • 缺省2个附加参数程序能按照缺省值正确运行
  • 输入全部参数时程序正确运行
  • 输入重复参数程序提示参数错误
  • 传入较大文件时程序正确运行
  • 当词组长度为1时,程序能正确运行
  • 当一行的单词数少于词组长度时无输出
  • 词组内有其余符号时划词后能保留
  • 输入文件不存在时程序提示参数错误
  • 输入文件没法打开时程序提示参数错误

github代码签入记录

遇到的代码模块异常或结对困难及解决方法

在最初“WordCount.exe -i input.txt -m 3 -n 3 -w 1 -o output.txt”的识别问题上咱们遇到了一下小情况,总结缘由是咱们全局变量的声明与上用上出现了问题,也暴露了咱们基础不牢固的问题,后经赵畅同窗通过指导下修复成功。
另外一方面就是我阅读王彬同窗所写的基础代码时,因为本身过于菜以及和王彬同窗以前我的项目上所用思路不一样,产生了必定的障碍,也没别的,国庆几天盯着屏幕研究了很长时间,差很少搞懂后才在其基础上加上了一部分附加内容。编程

评价你的队友

个人队友王彬同窗是个责任心与实力都很是强的同窗,在解决问题和提出问题方面都有不错的能力,主要的基础代码和核心设想都是王彬同窗完成的,他的业务能力是值得我学习的。小程序

学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
2 100 100 4 6 为团队项目的须要学习了前端的相关知识 ,学习c++基础,学习原型设计网络

相关文章
相关标签/搜索