1. Link:
Partner:丁水源 点我
GitHub: 点我
2.Division of labor:
丁水源:
字符统计;行数统计;单词统计;(不同于个人项目的做法。)主函数接口整合。
黄毓明:
单词及词组词频统计;附加题;爬取;
3.PSP Table:
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 100 | 100 |
| · Estimate | · 估计这个任务需要多少时间 | 100 | 100 |
| Development | 开发 | 1260 | 1460 |
| · Analysis | · 需求分析 (包括学习新技术) | 300 | 350 |
| · Design Spec | · 生成设计文档 | 60 | 70 |
| · Design Review | · 设计复审 | 80 | 100 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 80 |
| · Design | · 具体设计 | 240 | 260 |
| · Coding | · 具体编码 | 380 | 420 |
| · Code Review | · 代码复审 | 60 | 80 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 80 | 100 |
| Reporting | 报告 | 170 | 200 |
| · Test Repor | · 测试报告 | 100 | 120 |
| · Size Measurement | · 计算工作量 | 30 | 30 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 50 |
| 合计 | 1530 | 1760 |
爬取思路:4.Key Code & its Explanation:
运行环境Windows 10 64 bit专业版
IDE:Anaconda3(64 bit)
我们选择用Python来完成网页信息爬取,主要思路是先解析出CVPR2018的网址结构,然后用select()通过类名'.ptitle'筛选出title对应元素,再遍历select()返回的list,筛选出href,得到相对网址,对所得到的网址进行内容爬取,也是利用select()进行筛选,将得到的Title与Abstract按指定格式写入result.txt
爬取代码及输出文件截图:
主要代码组织及其框架:
关键函数代码内部主要组织思想流程图:
(WordFrequency() :带权重单词词频统计)
(PhraseFrequency() 带权重的词组词频统计)
main():整体内部函数框架及其命令行随机出现的实现:
int main(int argc,char **argv) { int flag_m = -1, flag_n = -1,flag_i=-1,flag_o=-1,flag_w=-1; int m = 0, n = 0,judgevalue = 0; string input; string output; string buffer[20]; // 预先处理命令行传入参数: 用flag_x 进行记录: for (int i = 0; i < argc; i++) { buffer[i] = argv[i]; if (buffer[i] == "-i") { flag_i = i; input = argv[i + 1]; } else if (buffer[i] == "-o") { flag_o = i; output = argv[i + 1]; } else if (buffer[i] == "-w") { flag_w = i; if (argv[flag_w + 1] == "0") judgevalue = 0; if (argv[flag_w + 1] == "1") judgevalue = 1; } else if (buffer[i] == "-m") { flag_m = i; m = atoi(argv[flag_m + 1 ]) ; } else if (buffer[i] == "-n") { flag_n = i; n = atoi(argv[flag_n + 1]) ; } } // 初始化各个函数的输出;并赋值; int cnt_char=CountChar(argv[flag_i + 1]); int cnt_line=CountLine(argv[flag_i + 1]); int cnt_word=CountWord(argv[flag_i + 1]); //将部分结果先输出到result.txt文档 ofstream fout(output, ios::app); fout << "characters: " << cnt_char << endl; fout << "words: " << cnt_word << endl; fout << "lines: " << cnt_line << endl; fout.close(); //单词词组词频的统计分类(共分为4类) 如下所示; if (flag_n == -1 && flag_m == -1) { //未出现 - n 参数时,不启用自定义词频统计输出功能,默认输出10个 int jj = 10; int a = WordFrequency(input,output, judgevalue, jj); } if (flag_n != -1 && flag_m == -1) { //未出现 - m 参数时,不启用词组词频统计功能,默认对单词进行词频统计 int jj = n; WordFrequency(input,output, judgevalue, jj); } if (flag_n != -1 && flag_m !=-1) { int jj = 10; PhraseFrequency(input, output,m,judgevalue,10 ); } if (flag_n == -1 && flag_m != -1) { PhraseFrequency(input, output, m, judgevalue,n); } //结束: return 0; }