zoukankan      html  css  js  c++  java
  • 软工第二次结对作业

    作业链接
    结对同学博客链接
    github链接

    具体分工

    我主要负责C++,他负责爬虫部分

    PSP表格

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

    代码的核心思路是利用爬虫,爬取论文网址,之后吧对应信息(标题和摘要)写入文件,然后利用上次的WordCount代码把文件读进去然后进行分析,并且要加上权重分析,之后便是统计词频,然后这次的作业还新加了一个功能叫做词项统计,在不断询问大佬之后,大佬说用队列容器,把检测到的合法单词压入队尾,如果单词不合法就清空,确认词项之后再输出队列。

    1.爬虫

    爬虫爬取论文地址

    #定义一个函数,用来爬取网页内容
    def Web(www):
        try:
            w = requests.get(www)
            w.raise_for_status()
            w.encoding = w.apparent_encoding
        except:
            print("fail!!!")
        temp = w.text
        wz = BeautifulSoup(temp,"html.parser")
        return wz
    
    www = "http://openaccess.thecvf.com/CVPR2018.py"
    wz = getWeb(www)
    

    简单处理一下标签,获取标题和摘要,然后写入文件

    #定义一个函数,用来论文页面内容
    def info(paperLink):
        www = "http://openaccess.thecvf.com/" + paperLink
        wz = Web(www)
        #标签
        bq=re.compile('</?w+[>]*>')
        #消除
        title =bq.sub('', str(wz.find('div',id="papertitle"))).strip()
        abstract = bq.sub('',str(wz.find('div',id="abstract"))).strip()
        return title,abstract
    

    2.代码组织与内部实现设计

    3.算法的关键与关键实现部分流程图

    void Count(string tline, int maxn, int start,int quanzhong)
    {
        for (int i = start; i < tline.length(); i++)
        {
    
            int count = 0;//计数
            int charcounts = 0;//字符数
            int numflag = 0;//判断是否数字
            for (int k = i;; k++)//判断是否是单词
            {
                if (tline[k] >= 'a'&&tline[k] <= 'z'&&numflag == 0)
                {charcounts++;count++;}//小写字母
                else if (tline[k] >= 'A'&&tline[k] <= 'Z'&&numflag == 0)
                {charcounts++;count++;}//大写字母
                else if (tline[k] >= '0'&&tline[k] <= '9')
                {count++;numflag = 1;}//出现数字
                else break;
            }
            if (charcounts >= 4) //记录
            {   char words[100] = { "" };
            //存储单词
                for (int k = i; k < i + count; k++)
                {
                    words[k - i] = tline[k];
                }
                string s = words;
                b.push_back(s);  
                s = "";
                if (b.size() == maxn)//队列以满
                {
                    int nowNum = maxn;
                    for (it1 = b.begin(); it1 != b.end(); it1++)
                    {
                        s.append(*it1);
                        nowNum=nowNum-1;
                        if (nowNum != 0)s.append(" ");
                    }
                    if(start==7&&quanzhong==1)essay[s]+=10;//记录
                    else essay[s]++;
                    b.pop_front();
                    s = "";
                }
                i += count - 1;
            }
            else if (count > 0 && count < 4)
            {
                b.clear();
                i += count - 1;
            }
            else continue;
    
        }
        if (start == 7)b.clear();//清空
    }
    

    性能分析

    VS的性能分析工具结果

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

    问题描述:C++程序无法读取爬虫的结果文件然后程序崩溃
    做过的尝试:将文本改为Ascll编码
    最后发现是C++程序中读取每行使用的Char[]容量过小无法读取Abstarct的全部内容导致崩溃,通过增大容量解决(暂时成功)
    通过各种尝试终于解决啦
    收获:细节决定成败

    单元测试

    十个单元测试如下:

    1.测试字符数是否正确(去除title,abstrac等等)
    2.测试行数是否正确
    3.测试不带权值的单词词频是否正确
    4.测试带权值的单词词频是否正确
    5.测试不带权值的词组词频是否正确
    6.测试带权值的词组词频是否正确
    7.测试-n限制下输出是否正确
    8.测试-m限制下输出是否正确
    9.测试输入文件为空时是否正确
    10.测试输出文件未给是否正确
    测试结果如下:

    以下给出三个测试代码:

    @Test
    public void test4(){// 测试  不出现-m 的  -w 1 
            File file = new File("4.txt");
            WordCount count = new WordCount(file);//实例话WordCount类
            count.set_quan(true);
            int wordnum = count.getwordnum();//读取单词数
            int linenum = count.getlinenum();//获取有效行数
            assertEquals(wordnum, 29);
            assertEquals(linenum, 3);
            List<HashMap.Entry<String, Integer>> m = count.getWords();
            int aa=m.get(0).getValue();
            String bb=m.get(0).getKey();
            assertEquals( aa , 51);
            assertEquals(bb, "embodied");
    }
    
    @Test
    public void test6(){ // 测试 出现-m 的 -w 1
            File file = new File("6.txt");
            WordCount count = new WordCount(file);//实例话WordCount类
            count.set_quan(true);
            int wordnum = count.getwordnum();//读取单词数
            int linenum = count.getlinenum();//获取有效行数
            int phrasenum = count.getphrasenum(3);//获取有效词组数
            assertEquals(wordnum, 29);
            assertEquals(linenum, 3);
            List<HashMap.Entry<String, Integer>> m = count.getPharses();
            int aa=m.get(0).getValue();
            String bb=m.get(0).getKey();
            assertEquals( aa , 20);
            assertEquals(bb, "embodied embodied embodied");
    }
    
    @Test
    public void test8(){ // 测试 -m 参数 接收
        File file = new File("8.txt");
            WordCount count = new WordCount(file);//实例话WordCount类
            int wordnum = count.getwordnum();//读取单词数
            int linenum = count.getlinenum();//获取有效行数
            int phrasenum = count.getphrasenum(8);//获取有效词组数
            assertEquals(wordnum, 64);
            assertEquals(linenum, 3);
            List<HashMap.Entry<String, Integer>> m = count.getPharses();
            int aa=m.get(0).getValue(),cc=m.get(9).getValue();
            String bb=m.get(0).getKey(),dd=m.get(9).getKey();
            assertEquals( aa , 4);
            assertEquals(bb, "asdf zxcv jklq aaaa asdf zxcv jklq aaaa");
            assertEquals( cc , 1);
            assertEquals(dd, "aaaa wjoi oifvf nvxlj qwoei jfsiod fdss vffr2f4");
    }
    

    Github签入记录

    由于时间的关系就签入了最终的

    评价你的队友

    真•大佬,敦厚的专业水平值得学习
    只是埋头苦干需要改进,应增加沟通

    学习进度条

  • 相关阅读:
    iOS $299刀企业证书申请的过程以及细节补充
    关于移动开发的一些想法和认识--Android和iOS
    iOS设备的越狱方法
    iOS越狱开发(一)
    iOS开发中 workspace 与 static lib 工程的联合使用
    高效 Java Web 开发框架 JessMA v3.5.1
    跨平台日志清理工具 Log-Cutter v2.0.1 正式发布
    【新年呈献】高性能网络通信框架 HP-Socket v5.7.1
    高性能网络通信框架 HP-Socket v5.2.1
    跨年呈献:HP-Socket for Linux 1.0 震撼发布
  • 原文地址:https://www.cnblogs.com/nwk1130/p/9774288.html
Copyright © 2011-2022 走看看