zoukankan      html  css  js  c++  java
  • 第一次个人编程作业

    一、个人编程作业链接:

    github(点击可查看完整代码)

    二、计算模块接口的设计与实现过程

    1.基本思路流程图

    2.空间向量模型+余弦算法解决论文查重问题

    句子A:我喜欢看动漫,不喜欢综艺
    句子B:我不喜欢走路,不喜欢骑车

    • tokenization:对文本集中的文本进行分词并去掉停用词,这部分我采用的是结巴分词,之前使用过gsep.cup(),虽然比结巴分词分得好,但其时间代价也高

    word_set:{我,喜欢,看,动漫,综艺,不,走路,汽车}

    • dict:基于文本集建立词典。这部分的功能是为word_set中的每一个单词附上一个特征数

    word_dict:{'我’:0,‘喜欢’:1,‘看’:2,‘动漫’:3,‘综艺’:4,‘不’:5,‘走路’:6,‘汽车’:7}

    • 生成词频并根据词频生成位置向量。

    A:{1,2,1,1,1,1,0,0}
    B:{1,2,0,0,0,2,1,1}

    • 用余弦相似算法求解文本相似度

      1)什么是余弦相似算法呢?

      2)代码如下:

    • main函数执行结果

    三、命令行参数(sys argv[1]、argv[2]、argv[3]...)

    执行语句:python main.py [原文文件名][抄袭文件名][答案文件名]

    四、性能分析以及性能改进

    • 起初分词采用简单的结巴分词,每篇抄袭文档的重复率都在0.99以上,所以仅有结巴分词是不行的,还必须加入停用词表(仅采用结巴分词,结果会大量存在标点符号)
    • 停用词表的使用也很有讲究,一个好的停用词表可以使两篇论文的相似度降低
    • 性能分析我采用了pycharm自带的profile性能分析器,得到如下图

    • 程序中消耗最大的函数

    五、单元检测

    单元测试部分我采用的是python自带的unittest

    • 构造测试数据的思路

      将每一份测试数据连同异常检测都封装成一个进程,在unittest中逐一对这些进程进行检测
      (为了缩减代码,将单元测试所用到的函数封装在一个新的文件test_function中)
    • 部分测试代码


    • 构造测试数据的思路:

    此次测试采用12组数据,前10份课来自课程提供的测试样例sim_0.8,其中一份是原文数据,其它九份是抄袭文的数据。第11组数据是自己网上copy下来的两篇文章的相似度,最后一组数据是对异常检测的测试,因此结果会抛出一个异常

    • 单元测试重复率:

    使用coverage,只需在cmd中安装coverage,并输入coverage run 文件名,输出结果如下:

    六、异常处理

    先定义一个错误异常类,当出现这类错误时就会跳转执行这个类


    在unittest中检测这个类

    异常对应的场景

    七、PSP表格

    八、总结

    这次软工作业虽然花了很多时间,但是真的学到了很多的东西-----新学了python,学会了如何对代码进行性能分析,异常处理.....感触如下:
    其一,重要的不是结果,而是努力的过程。实践的结果只能带来短暂的成就感,这期间从博客、书籍上捕获的知识才是受用终生的。
    其二,要善于批评与自我批评,代码是在不断修证的过程中实现性能优化的。
    其三,要善于学习别人的代码,在学习的过程中进行独立思考,真正做到内化所学新知识。

  • 相关阅读:
    如何做一个快乐的人
    嵌入式实时操作系统的可裁剪性及其实现
    Hello China操作系统运行截图(完整版)
    物联网操作系统的概念和特点
    Windows Phone 31日谈——第4日:设备方向
    Windows Phone 31日谈——第6日:工具栏
    Windows Phone 31 日谈——第8日:选择器
    Windows Phone 31日谈——第5日:系统主题
    Windows Phone 31 日谈——第10日:输入范围和文本框
    Windows Phone 31 日谈——第13日:位置服务
  • 原文地址:https://www.cnblogs.com/li-start/p/13676655.html
Copyright © 2011-2022 走看看