第五次作业 - 结对作业2

github项目地址

github项目地址

具体分工

 队伍里只有我一个人。
 

PSP表格

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

解题思路描述与设计实现说

  • 爬虫的使用
    使用Jsoup的select语法进行元素查找。通过select("[id=papertitle]")和select("[id=abstract]")得到论文题目和论文摘要。
    1470461-20181009000916210-1509026595.png

    得到作者和pdf的链接。并都输出到result.txt中。
    result.txt文件地址

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

  • 说明算法的关键与关键实现部分流程图
    • 算法的关键
      先判断命令行的参数。读取到一个符合标准的词①后,设词首的位置为begin。从这个词往后找m-1个词来构成词组。如果往后找的词符合标准则继续往后找,直到找到m-1个连续的符合标准的词。并把最后一个词的最后一个字母的位置设为end。从begin复制到end。并把得到的词组存入新的map中。如果往后找到的词是不符合标准的,则跳出查找,并回到行中从词①后继续查找。

1470461-20181009001148602-1082245313.jpg

  • 附加题设计与展示
    1470461-20181009001016397-926143628.png

新增了作者与pdf的地址
result.txt文件地址

  • 关键代码解释
    int fir = y;
                while ((temp[y] >= 'a'&&temp[y] <= 'z') || (temp[y] >= '0'&&temp[y] <= '9')) {
                    word.append(temp, y, 1);
                    y++;
                    if (y > temp.size())break;
                }
                if (Judge(word)) {
                    pos = fir;
                    string tempword;
                    int flag = 0;
                    int flag1 = 0;
                    int flag2 = 0;
                    int cc = 0;
                    m = 1;
                    maa[word]++;
                    if (w == 0) ma[word] ++;
                    else if (w == 1)
                    {
                        if (x == 7) {
                            for (int u = 0; u < 10; u++) {
                                ma[word] ++;
                            }
                        }
                        else if (x == 10)
                        {
                            ma[word] ++;
                        }
                    }
                    while (m != mm)
                    {
                        if (m != mm && y >= temp.size()) break;
                        for (int k = y; k < temp.size(); ) {
                            if (temp[k] < 48 || ((57 < temp[k]) && (temp[k] < 97)) || temp[k]>122)
                            {

                                k++; if (k >= temp.size()) { flag1 = 1; break; }
                                continue;
                            }
                            else {//发现一个单词
while ((temp[k] >= 'a'&&temp[k] <= 'z') || (temp[k] >= '0'&&temp[k] <= '9')) {
                                    tempword.append(temp, k, 1);
                                    k++;
                                    if (k > temp.size())break;
                                }
                                if (Judge(tempword)) {
                                    m++;
                                    if (m != mm && k >= temp.size()) {
                                        flag = 1;
                                        break;
                                    }
                                    if (m == mm) {
                                        words.append(temp, pos, k - pos);
                                        //pos = y + 1;
                                        if (w == 0) mas[words]++;
                                        if (w == 1) {
                                            if (x == 7)
                                                for (int u = 0; u < 10; u++)
                                                    mas[words]++;
                                            if (x == 10)
                                                mas[words]++;
                                        }
                                        break;
                                    }
                                }
                                else
                                {
                                    pos = k + 1;
                                    tempword.clear();
                                    flag2 = 1;
                                    break;
                                }
                                tempword.clear();
                            }
                        }
                        if (flag == 1) break;
                        if (flag1 == 1) break;
                        if (flag2 == 1) break;
                    }
                    words.clear();
                }

先判断命令行的参数。读取到一个符合标准的词①后,设词首的位置为begin。从这个词往后找m-1个词来构成词组。如果往后找的词符合标准则继续往后找,直到找到m-1个连续的符合标准的词。并把最后一个词的最后一个字母的位置设为end。从begin复制到end。并把得到的词组存入新的map中。如果往后找到的词是不符合标准的,则跳出查找,并回到行中从词①后继续查找。

输入

WordCount.exe -i input.txt -m 3 -n 3 -w 1 -o output.txt

运行结果

characters:1184323
words:120299
lines:1958
<convolutional neural networks>: 196
<generative adversarial networks>: 178
<convolutional neural network>: 159

性能分析

输入的命令行为:

WordCount.exe -i input.txt -m 3 -n 3 -w 1 -o output.txt
/*
 *统计input.txt文件中的字符数、单词数、有效行数、出现次数排在前3的3个单词长的词组,并采用权重累计频数,最终统计结果输出到output.txt
 */ 

1470461-20181010201144508-253796676.png
1470461-20181010201151286-719974598.png

1470461-20181010201155811-958531666.png

1470461-20181010201159478-422933876.png

共花费8.054秒,countword函数中其中四个将词存入map中的花费最多时间。

  • Github的代码签入记录

  • 遇到的代码模块异常或结对困难及解决方法
    问题:命令行输入时发生错误。解决:先输入字符串试一下。结果:解决了。
    问题:获取词组时程序会发生死循环。解决:设置断点,找到死循环的地方。

  • 评价你的队友
    队伍里只有我一个人。
    需要提高的地方:代码的规范性。
  • 学习进度条

    第N周新增代码(行)累计代码(行)本周学习耗时(小时)累计学习耗时(小时)重要成长
    110010033学习了map和vector的操作
    45015036学习了简单的爬虫
    510025039

转载于:https://www.cnblogs.com/031602401chl/p/9758090.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值