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

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/dawnduck/p/9769715.html
Copyright © 2011-2022 走看看