第一次个人编程作业

题目:论文查重

github连接:https://github.com/ml-h/ml-h-h/blob/master/031804114/第一次编程作业最终版.py

*1.基本理论原理描述如下

第一步,向量空间模型VSM
向量空间模型(Vector Space Model,简称VSM)表示通过向量的方式来表征文本。一个文档(Document)被描述为一系列关键词(Term)的向量。
简言之,判断一篇文章是否是你喜欢的文章,即将文章抽象成一个向量,该向量由n个词Term组成,每个词都有一个权重(Term Weight),不同的词根据自己在文档中的权重来影响文档相关性的重要程度。
Document = { term1, term2, …… , termN }
Document Vector = { weight1, weight2, …… , weightN }

           #V(d)=(t1w1(d);...;tnWn(d))

    其中ti(i=1,2,...n)是一列相互之间不同的词,wi(d)是ti在d中对应的权值。
    选取特征词时,需要降维处理选出有代表性的特征词,包括人工选择或自动选择。

第二步,TF-IDF

特征抽取完后,因为每个词语对实体的贡献度不同,所以需要对这些词语赋予不同的权重。计算词项在向量中的权重方法——TF-IDF。
它表示TF(词频)和IDF(倒文档频率)的乘积:
TF-IDF=词频(TF)*逆文档频率(IDF)
逆文档频率网上有很多解释,最后TF-IDF计算权重越大表示该词条对这个文本的重要性越大

第三步,余弦相似度计算

其中分子表示两个向量的点乘积,分母表示两个向量的模的积。

原理到代码实现的过程部分

============
calss:

计算相对词频:

三:异常处理、函数分析、性能改进

异常处理:

try:
    f=open(output,"w")
    f.write(result+"
")
    f.close()
    print("结果已存入文件夹中")
except IOError:
    print("Error: 没有找到文件或读取文件失败")

函数分析:

def __init__(self, target1, target2, topK=800):
      self.target1 = target1
      self.target2 = target2
      self.topK = topK

target1和target2分别为对比的两篇文章样本,topK为将提取出前面800个关键词

利用jieba.analyse库对文本拆分

计算相对的词频并且得到最后的数据。

相似度的计算,利用的是文章相似度的计算公式。
性能改进:

四:单元测试展示

五:PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 120 130
Estimate 估计这个计划需要多少时间 60 60
Development 开发 210 220
Analysis 需求分析 500 480
Design Spec 生成设计文档 30 40
Design Review 设计复审 30 30
Coding Standard 代码规范 40 60
Design 具体设计 130 120
Coding 具体编码 130 120
Code Review 代码复审 40 30
Test 测试 120 200
Reporting 报告 30 20
Test Report 测试报告 30 30
Size Measurement 计算工作量 20 30
Postmortem&Process Improvement Plan 事后总结,并提出过程改进过程 40 50
合计 1530 1620

六:总结

光题目就研究了很久,之前没用过测试的软件,安全不知道这个东西,疯狂百度,查阅博客,找到适合的相近的方法,利用修改。总的过程很艰辛,很费时间,但是确实也看到了很多不一样的东西。

原文地址:https://www.cnblogs.com/lmmlm/p/13686840.html