Part 1.前言
Part 2.具体分工
本次的结对作业我们简单的拆分成:
- 爬虫部分(高裕祥负责)
- 词频分析部分(柯奇豪负责)
- 附加题部分(柯奇豪负责处理数据、高裕祥负责处理爬取相关内容)
Part 3.PSP表
PSP3.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | --- | --- |
· Estimate | · 估计这个任务需要多少时间 | 60 | 90 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 120 | 240 |
· Design Spec | · 生成设计文档 | 20 | 30 |
· Design Review | · 设计复审 | 10 | 20 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 20 |
· Design | · 具体设计 | 120 | 140 |
· Coding | · 具体编码 | 1800 | 2200 |
· Code Review | · 代码复审 | 30 | 100 |
· Test | · 测试(自我测试,修改代码,提交修改) | 30 | 120 |
Reporting | 报告 | ||
· Test Repor | · 测试报告 | 10 | 20 |
· Size Measurement | · 计算工作量 | 10 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 2250 | 3030 |
Part 4.解题思路描述与设计实现说明
1. 爬虫使用
- 使用语言:java
- 本次的爬虫我们主要利用Java爬虫工具Jsoup解析进行爬取,基本上爬虫的流程可以归纳如下:
2. 代码组织与内部实现设计(类图)
我自己在本地是建了三个java项目分别负责不同的功能模块:
- PaperBasicFuction (处理基础的词频统计功能)
- commandline.java (实现命令行处理功能)
- infile。java (实现基础词频分析功能)
- mainbody.java (构成WordCount的主体main)
- PaperMaps (处理附加的图形化显示功能)
- barchart.java (负责柱状图的生成)
- Piechart.java (负责饼图的功能)
- details.java (javabean模块进行数据处理)
- person.java (论文作者相关性数据处理)
- mainbody.java (构成AdditionalFunction主体main)
- PaperSpider (负责爬虫功能的实现)
3. 说明算法的关键与关键实现部分流程图(含关键代码的解释)
接下来我就简单的介绍一下我这次新补充或者改进优化的几处地方,与上回个人作业相关功能类似的地方在这里我就不再赘述
section 1.命令行功能的实现
options.addOption("h", "help", false,"Helps About this Command");
options.addOption("i", "input", true, "Input this file");
options.addOption("o", "output", true, "Output this file");
options.addOption("w", "weight", true, "Weight of the word");
options.addOption("m", "members", true, "Members of count words");
options.addOption("n", "number", true, "Numbers of output words");
try {
CommandLine commandline = parser.parse(options, args);
if(commandline.hasOption("h")) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineParameters",options);
}
if(commandline.hasOption("i")) {
infile = commandline.getOptionValue("i");
}
if(commandline.hasOption("o")) {
outfile = commandline.getOptionValue("o");
}
if(commandline.hasOption("w")) {
weight = commandline.getOptionValue("w");
}
if(commandline.hasOption("o")) {
member = commandline.getOptionValue("m");
}
if(commandline.hasOption("o")) {
number = commandline.getOptionValue("n");
}
} catch (ParseException e) {
e.printStackTrace();
}
原先我的思路是使用命令行读入转String然后用if或者switch-case来逐一的判断匹配,显然这种方式有些许繁琐,为了方便使用命令行的处理,我转而借助于commons-cli来简化工作,显然操作起来就变得简单明了,方便我获取命令行参数
section 2.小细节的优化
关于标题和内容权重不同的情况,我简单的通过两句表达式做处理,不做多余的判断处理
w_title = w*10+(w-1)*(-1); w_content = 1;
依照于题目的要求,文本的格式相对的统一,所以我采用逐行获取后匹配,对应的进行相关操作
while((strline = buffReader.readLine())!=null){
Matcher t_mat = t_pat.matcher(strline);
Matcher c_mat = c_pat.matcher(strline);
if(t_mat.find()) {
t_str=t_mat.group(1).toLowerCase();
t_words.append(t_str).append(" ");
phrase(t_str,w_title,m);
characters += t_str.length()+1;
lines++;
}
if(c_mat.find()) {
c_str=c_mat.group(1).toLowerCase();
c_words.append(c_str).append(" ");
phrase(c_str,w_content,m);
characters += c_str.length();
lines++;
}
}
buffReader.close();
Part 5.附加题设计与展示
section 1.详情整合生成具体查询目录.csv并存储于新构建的class details中
因为官网上可以获取的相关信息有限,能够直接爬取下来的信息如下图所示
所以不够我们对其更详细信息的参考,故通过爬取所获得信息,我们将其进行整合成一份CVPR_Details.csv详细目录,截图展示如下
而这些信息我们将其存放于新构建的class details中,方便我们后续对其进行操作处理
section 2.论文类型的饼图构建
section 3.作者论文参与篇幅的直方图
section 4.神经网络的构建(未实现)
辛苦一晚上,想视图将构建神经网络功能植入代码,但很遗憾gephi-tookit没能够很好的实现,目前尚未实现。
可能是自己太过天真,想视图将所有的功能都用java语言实现,看到大家分门别类的工具使用顿时大悟,很遗憾时间不够没办法再进一步推进,其实大概也了解了Gephi工具的使用(获取“对象-目标-权重”数据后就可以生成神经网络图)。
Part 6.性能分析与改进
Part 7.单元测试
Part 8.贴出Github的代码签入记录
Part 9.遇到的代码模块异常或结对困难及解决方法
问题描述
做过哪些尝试
是否解决
有何收获
Part 10.评价你的队友
值得学习的地方
需要改进的地方