结对第二次作业

相关链接

结对同学博客链接

作业链接

github项目地址

分工

我进行了爬虫的实现

队友进行WordCount代码的更新

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

一、解题思路与设计描述

1、爬虫使用

  • 使用JAVA实现从CVPR2018官网爬取今年的论文列表。实现思路:通过jsoup来解析url的html文档,通过查看网页的html可以看出论文链接都在class名为ptitle的标签下,然后再使用select选择器获取a标签,然后选择a标签下的attr属性获取每篇论文的url链接,插入队列中。接下来就是遍历队中的url,解析html,就可以通过选择获取需要的内容(如title,abstract),最后通过字符串的连接组合成要求的输出样式。

2、代码组织与内部实现设计(类图)

关键代码解释

int lines=0,words=0,c_length=-1;
	     for(;(s=in.readLine())!=null;)
	     {
		    Matcher m=Pattern.compile("(Title|Abstract): (.*)").matcher(s);//匹配论文
		    int flag=0;
		    if(m.find()){
	     if(s.matches("Title: .*"))//匹配标题部分
	    	 flag=1;//
	     lines++;
	     s=m.group(2).toLowerCase();//标题正文
	     c_length+=1+s.length();
	     m=Pattern.compile("(.*?)[a-z]{0,3}[0-9]+.*?[^a-z0-9]").matcher(s+" 1 ");//匹配不合法单词,
	     //通过不合法单词将正文切割成一段段
	    for(;m.find();)
	    {
		Matcher m2=Pattern.compile("([a-z]{4}[a-z0-9]*)([^a-z0-9]+)").matcher(m.group(1));
		//m2单词与分隔符
		List<String>words_group=new ArrayList<String>(),//存下单词
		char_group=new ArrayList<String>();//存下分隔符
		for(;m2.find();words++)
		{
			words_group.add(m2.group(1));
			char_group.add(m2.group(2));
		}
		for(i=0;i<=words_group.size()-m0;i++)
		{
	        for(s=words_group.get(i),j=0;j<m0-1;j++)
	           s+=char_group.get(i+j)+words_group.get(i+j+1);//通过-m判断是否将单词串起来
	         j=1+9*w0*flag;
	        if(!test.containsKey(s))test.put(s,j);
	        else 
	        	test.put(s,test.get(s)+j);
		}
	    }
		}
	  }

单元测试样例

输入:
0
Title: Monday Tuesday Wednesday Thursday 1254
Abstract: Monday Tuesday Wednesday Thursday Friday

命令行:java Main -i C:\Users\Desktop\result.txt -m 3 -n 3 -w 1 -o o.txt

输出:
characters: 79
words: 9
lines: 2
<monday tuesday wednesday>: 11
<tuesday wednesday thursday>: 11
<wednesday thursday friday>: 1

输入:
0
Title: abcd 25abcd abcd (abcde
Abstract: abcd a1abcd abcd (abcde abc1 abcd

命令行:java Main -i C:\Users\Desktop\result.txt -m 2 -n 3 -w 1 -o o.txt

输出:
characters: 57
words: 7
lines: 2
<abcd (abcde>: 11

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

一开始不知如何爬虫,后来队友通过上网查资料了解了一些,对于词组的统计一开始也是一筹莫展。


评价你的队友

我的队友阿晗是个很老实的人,总是承担着很重要的部分,很好。

学习进度条

第?周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
5 200 300 11 28 学会了简单爬虫

posted @ 2018-10-12 22:43  tyughjbnm  阅读(129)  评论(0编辑  收藏  举报