第一次编程作业

这个作业属于哪个课程软件工程
这个作业要求在哪里个人项目作业-论文查重
这个作业的目标实现论文查重系统
其他参考文献CSDN

一、作业链接 GitCode

二、psp表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划6060
· Estimate· 估计这个任务需要多少时间300500
Development开发200300
· Analysis· 需求分析 (包括学习新技术)120120
· Design Spec· 生成设计文档6060
· Design Review· 设计复审6060
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)1010
· Design· 具体设计2040
· Coding· 具体编码200300
· Code Review· 代码复审3040
· Test· 测试(自我测试,修改代码,提交修改)60190
Reporting报告120120
· Test Repor· 测试报告60120
· Size Measurement· 计算工作量2020
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划3030
· 合计13501650

三、函数实现流程图

代码由一个main函数执行,其余函数在同文件类下的四个函数。
![[Pasted image 20230308133213.png]]

四、性能分析

在这里插入图片描述
在这里插入图片描述

五、改进优化代码

def filter(string):
	pattern = re.compile(u"[^a-zA-Z0-9\u4e00-\u9fa5]")
	string = pattern.sub("", string)
	result = jieba.lcut(string)
return result

再做一次运行时间统计:
总耗时快了0.5s,提升了时间效率

六、单元测试

这里需要用到python的unittest单元测试框架,详见官网介绍
为了方便进行单元测试,源码的main()应该修改一下:

mport jieba
import gensim
import re
#获取指定路径的文件内容
def get_file_contents(path):

		string = ''
	f = open(path, 'r', encoding='UTF-8')
	line = f.readline()
	while line:
	
		string = string + line
		line = f.readline()
		
	f.close()

return string

#将读取到的文件内容先把标点符号、转义符号等特殊符号过滤掉,然后再进行结巴分词

def filter(string):
	pattern = re.compile(u"[^a-zA-Z0-9\u4e00-\u9fa5]")
	string = pattern.sub("", string)
	result = jieba.lcut(string)
return result

#传入过滤之后的数据,通过调用gensim.similarities.Similarity计算余弦相似度

def calc_similarity(text1, text2):

	texts = [text1, text2]
	dictionary = gensim.corpora.Dictionary(texts)
	corpus = [dictionary.doc2bow(text) for text in texts]
	similarity = gensim.similarities.Similarity('-Similarity-index', corpus, num_features=len(dictionary))
	test_corpus_1 = dictionary.doc2bow(text1)
	cosine_sim = similarity[test_corpus_1][1]
	
return cosine_sim

def main_test():

	path1 = input("输入论文原文的文件的绝对路径:")
	path2 = input("输入抄袭版论文的文件的绝对路径:")
	str1 = get_file_contents(path1)
	str2 = get_file_contents(path2)
	text1 = filter(str1)
	text2 = filter(str2)
	similarity = calc_similarity(text1, text2) #生成的similarity变量类型为
	result=round(similarity.item(),2) #借助similarity.item()转化为,然后再取小数点后两位

return result

if __name__ == '__main__':

	main_test()

再新建单元测试文件

import unittest
from main import main_test

class MyTestCase(unittest.TestCase):

def test_something(self):
	self.assertEqual(main_test(),0.99) #首先假设预测的是前面第一组运行的测试数据
if __name__ == '__main__':
	unittest.main()

可以发现预测值为0.99正确:
相似度仍然预测为0.99,但路径更改为之前测试的第二组数据:
可以发现预测失败。

七、异常处理

在读取指定文件路径时,如果文件路径不存在,程序将会出现异常,因此可以在读取指定文件内容之前先判断文件是否存在,若不存在则做出响应并且结束程序。
这里引入os.path.exists()方法用于检验文件是否存在:

def main_test():

	path1 = input("输入论文原文的文件的绝对路径:")
	path2 = input("输入抄袭版论文的文件的绝对路径:")
	
	if not os.path.exists(path1):
	
		print("论文原文文件不存在!")
		exit()
		
	if not os.path.exists(path2):
		print("抄袭版论文文件不存在!")
		exit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值