结对作业_Two

Part 1.前言

Part 2.具体分工

本次的结对作业我们简单的拆分成:

  1. 爬虫部分(高裕祥负责)
  2. 词频分析部分(柯奇豪负责)
  3. 附加题部分(柯奇豪负责处理数据、高裕祥负责处理爬取相关内容)

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 (处理基础的词频统计功能)
  1. commandline.java (实现命令行处理功能)
  2. infile。java (实现基础词频分析功能)
  3. mainbody.java (构成WordCount的主体main)
  • PaperMaps (处理附加的图形化显示功能)
  1. barchart.java (负责柱状图的生成)
  2. Piechart.java (负责饼图的功能)
  3. details.java (javabean模块进行数据处理)
  4. person.java (论文作者相关性数据处理)
  5. 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.评价你的队友

值得学习的地方
需要改进的地方

Part 11.学习进度条

猜你喜欢

转载自www.cnblogs.com/S031602219/p/9769198.html