• 第一次编程作业


    第一次编程作业:论文查重。
    一:GitHub链接:https://github.com/031804120/031804120
    二:计算模块接口的设计与实现过程:
    ·总流程图:

    类和函数:
    class Similarity():

      `def vector(self):`
      `def mix(self):`
      `def mapminmax(vdict):`
      `def similar(self):`
    

    ·实现过程:
    大致的实现过程就是,先用open打开读取文件,然后再用jieba.analyse对文档进行分词,得到如['今天', '天气', '非常', ‘的’,'晴朗']的两个字符串数组。而后对得到的分词后的数组计算词频,得到相应的向量。再根据向量矩阵进行余弦相似度计算,从而得到文本相似度。

    ·算法的关键:
    最主要的应该是余弦相似度的计算:
    余弦相似度计算理论的主要的参考资料:http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html
    刚开始是因为好像大部分资料都调用了停词表文档,然后我也就按照调用外部文档的方式进行分词,然后一看要求,不行……那行吧,就得重新搞了。所以就用了基于VSM的余弦相似度计算,将代码差不多重新修整一遍了。
    余弦计算文本相似度:
    例句:

    • 例句A:今天天气非常的晴朗。
    • 例句B:今天天气格外的明媚。

    第一步:分词。
    A: 今天/天气/非常/的/晴朗。
    B:今天/天气/格外/的/明媚。

    第二步:列出所有的词、字,并计算词频
    例句A:今天1,天气1,非常1,的1,晴朗1,格外0,明媚0。
    例句B:今天1,天气1,格外1,的1,明媚1,非常0,晴朗0.
    然后根据这个描述词频向量

    第三步:计算夹角余弦
    利用公式,我们可以得到,例句A与例句B的夹角的余弦。
    余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫”余弦相似性”。

    余弦定理:

    假定a向量是[x1, y1],b向量是[x2, y2],那么可以将余弦定理改写成下面的形式:

    余弦的这种计算方法对n维向量也成立。假定A和B是两个n维向量,A是 [A1, A2, ..., An] ,B是 [B1, B2, ..., Bn] ,则A与B的夹角θ的余弦等于:

    但同样的用这个方法也有需要注意的事项:
    由于计算中打乱了关键词出现的顺序,所以即使夹角余弦的值为1,也有可能文本并不重复。

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

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

    剩下的跟这个也差不多,就是文件名之类的改一下而已。
    跑完后,得到的结果大概是这样的。

    覆盖率的话,是这样的:
    本来是用python自带的,后面换成pycharm,重新建file时名字错乱了(累得不想改了)。
    unit_Test就是测试。

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

    测试样例:

    六:附录
    PSP:

    七:总结
    · 这次作业有难度啊,肝了好几个晚上啊。不过总体下来的收获应该还是可以的。

  • 相关阅读:
    搭建一个简单的springMVC框架
    java枚举使用
    java中枚举类型的使用
    java递归算法
    JAVA递归算法及经典递归例子 对于这个汉诺塔问题
    java斐波纳契数列
    要求给一个数值,计算它的阶乘
    AcWing2193 分配问题(二分图最优匹配)
    2020上海大学校赛L 动物森友会(网络流+二分)
    BZOJ2654 tree(wqs二分)
  • 原文地址:https://www.cnblogs.com/Jelor/p/13676219.html
Copyright © 2020-2023  润新知