zoukankan      html  css  js  c++  java
  • 软件工程第五次作业 结对作业二

    软工1816 · 第五次作业 - 结对作业2

    我的队友:


    分工明细

    • 分工如下
      • 白晨曦:完成数据爬取与博客
      • :使用C++实现其余需求功能
      • 吴佳炜:使用java完成除爬虫外的编码内容
      • : 补充博客

    PSP表格

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

    解题思路描述与设计实现说明

    1.爬虫实现及使用

    • 用python代码编写爬

    利用python写出脚本,在目标网页爬取数据,最后以txt格式保存输出

    #geteverydiv抓取每个论文的信息
        def geteverydiv(self,source):
            everydiv = re.findall('(<div class="moco-course-wrap".*?</div>)',source,re.S)
            return everydiv
    
    #getinfo从每个课程块中提取出论文标题和内容描述
        def getinfo(self,eachclass):
            info = {}
            info['title'] = re.search('<h3>(.*?)</h3>',eachclass,re.S).group(1)
            info['content'] = re.search('<p>(.*?)</p>',eachclass,re.S).group(1)
            return info
    
    

    最后附上主函数

    if __name__ == '__main__':
        classinfo = []
        url = 'http://openaccess.thecvf.com/CVPR2018.py'
        testspider = func()
        print u'正在处理页面:' + url
        html = testspider.getsource(url)
    
        for each in everydiv:
            info = testspider.getinfo(each)
            classinfo.append(info)
        testspider.saveinfo(classinfo)
    

    参考文献

    参考文献2

    2.代码组织与内部实现设计

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

    • 算法关键: 正则表达式分别出各个行

    	private static boolean isNumeric(String str){	//数字行
    		 Pattern pattern = Pattern.compile("^[0-9]+?$"); 
    		return pattern.matcher(str).matches();
    	}
    	private static boolean isTitle(String str){		//标题行
    		 Pattern pattern = Pattern.compile("^Title: .+?"); 
    		return pattern.matcher(str).matches();
    	}
    	private static boolean isAbstract(String str){	//内容行
    		 Pattern pattern = Pattern.compile("^Abstract: .+?"); 
    		return pattern.matcher(str).matches();
    	}
    
    
    • St类与之前作业相差无几,详情见 前博客 :https://www.cnblogs.com/YooRarely/p/9637279.html

    • St类新增过程。

      • String s 为St2计算出来的单词,(一个),包括分隔符。
      • int k 为组成一个词组需要的长度。
      • int tail 为 分隔符长度。
      • queue {integer} Qi 为词组队列,达到词组数量则压入哈希表。先进先出。
    
    	public void st3(String s,int k,int tail){ // 组合为词组
    		if (k==0) {
    			kon="";
    			while (!Qi.isEmpty()) Qi.remove();
    			return;
    		}
    		Qi.offer(s.length());
    		if (Qi.size()>k) kon=kon.substring(Qi.remove());
    		kon=kon+s;
    		if (Qi.size()==k) wordPush(kon.substring(0, kon.length()-tail));
    	}
    }
    

    词项/单词 词频统计流程图


    性能分析与改进

    • 改进思路

      • 我在进行词组(单词排序)的时候使用的是暴力的冒泡排序,当数量级达到百千万的时候运行速度会十分的低下。
      • 可以改为更加灵活的快速排序。但是我忘记了怎么弄,嫌麻烦一直没有改。
      • 其他部分代码已经尽力做到最优了,不懂怎么更优了。

    单元测试

    • 1

      • java main -i input.txt -o output.txt -m 3 -n 100 -w 1

      • 对整程序进行测试,输入为爬取的数据

    characters: 1206878
    words: 120374
    lines: 1958
    : 196
    : 178
    : 159
    : 156
    : 128
    : 109

  • 相关阅读:
    Zookeeper(1)---初识
    golang的一些零散笔记
    ELK使用过程中遇到的一些问题
    ECharts系列:玩转ECharts之常用图(折线、柱状、饼状、散点、关系、树)
    MySQL系列:Docker安装 MySQL提示错误:Access denied for user'root'@'localhost' (using password:yes)
    HTML+CSS系列:登录界面实现
    Apollo系列(二):ASP.NET Core 3.1使用分布式配置中心Apollo
    Apollo系列(一):分布式配置中心Apollo安装(Linux、Docker)
    为你的应用加上skywalking(链路监控)
    工作中,你是如何开始搭建一套容器云环境的呢?
  • 原文地址:https://www.cnblogs.com/dawnduck/p/9769715.html
Copyright © 2011-2022 走看看