第一次个人编程作业

个人编程作业~

Github链接: https://github.com/cuteyou/031802222
其中代码借鉴:https://blog.csdn.net/qq_42280510/article/details/102857696?biz_id=102&utm_term=class CosineSimilarityobject:&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-102857696&spm=1018.2118.3001.4187


需求:

题目:论文查重

. 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

  • 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
  • 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。

. 要求输入输出采用文件输入输出,规范如下

  • 从命令行参数给出:论文原文的文件的绝对路径。
  • 从命令行参数给出:抄袭版论文的文件的绝对路径。
  • 从命令行参数给出:输出的答案文件的绝对路径。

. 样例

orig.txt是原文,其他orig_add.txt等均为抄袭版论文。

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


设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。

Answer:
1.一个类class CosineSimilarity(object):
四个函数
init() #其中__init__方法接受self和content_x1, content_y2三个参数。Python中,self是指向该对象本身的一个引用,通过在类的内部使用self变量,类中的方法可以访问自己的成员变量
extract_keyword() # 提取关键词
one_hot() # oneHot编码
main()
此处main函数入口便于调用测试
2.1.文件路径输入采用sys模块中的函数sys.argv[ ]
2.2.利用正则过滤和jieba分词,将词分好并保存到向量中
2.3.用字典保存两篇文章中出现的所有词并编上号
2.4计算向量的余弦相似度,值越大就表示越相似。

余弦相似度算法,衡量的是空间向量的夹角,更加体现在方向上的差异,但计算复杂度偏高。

计算模块接口部分的性能改进


记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2017/JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。

Answer:built-in method marshal.load是最大消耗的方法

计算模块部分单元测试展示。


展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。



测试数据使用的是群文件中的测试集合

计算模块部分异常处理说明


在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。。

输入错误:

PSP表格


总结

1.以前一些东西可以捡起来和深入。
2.本来采用稀疏矩阵相似度,后来发现所求相似度过低,可以继续去深入下为什么。
3.稳定进度,不然像这次采用一种算法失败后,连续好久找不到原因,会使人在ddl面前过度紧张。
4.要有分类和函数的概念,不要一直都就一个函数。


原文地址:https://www.cnblogs.com/cuteu/p/13682533.html