这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 个人项目作业 |
这个作业的目标 | 1.PSP表格 2.实现论文查重 3.进行测试 |
其他参考文献 | gitee,CSDN |
一、项目地址
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
·Estimate | · 估计这个任务需要多少时间 | 30 | 15 |
Development | 开发 | 180 | 210 |
· Analysis | · 需求分析 (包括学习新技术) | 120 | 80 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 | 10 | 5 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
· Design | · 具体设计 | 20 | 30 |
· Coding | · 具体编码 | 60 | 30 |
· Code Review | · 代码复审 | 30 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 120 |
Reporting | 报告 | 60 | 50 |
· Test Repor | · 测试报告 | 20 | 20 |
· Size Measurement | · 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 20 |
· 合计 | 685 | 645 |
三、计算模块接口的设计与实现过程
函数名 | 功能 |
---|---|
get_file_content(path) | 获取指定路径文件内容 |
selector(string) | 将文件内容进行分词,并筛选 |
compute_similarity(t1, t2) | 计算相似度 |
算法实现步骤
- 输入原文文件和抄袭文件路径
- 判断文件路径是否正确
- 获取文件内容
- 对文件内容进行分词并筛选
- 计算文件内容相似度
- 将结果录入指定答案文件
- 输出文件相似度
算法关键
- 精确模式返回string分词后的列表变量:
string = jieba.lcut(string)
- 对于分词后的string,只保留英文字母、数字和中文
if re.match(u"[a-zA-Z0-9\u4e00-\u9fa5]", tags):
result.append(tags)
else:
pass
- 计算相似度
ts = [t1, t2]
dict = gensim.corpora.Dictionary(ts)
corpus = [dict.doc2bow(text) for text in ts]
similar = gensim.similarities.Similarity('Similar', corpus, num_features=len(dict))
test_corpus_1 = dict.doc2bow(t1)
cosine = similar[test_corpus_1][1]
四、计算模块接口部分的性能改进
五、计算模块部分单元测试展示
单元测试代码
from main import CheckingAlgorithm
class TestChecking(unittest.TestCase):
def test_add(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig.txt",r"F:\3221005155\3221005155\MyObject1\orig_0.8_add.txt")
def test_del(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig.txt",r"F:\3221005155\3221005155\MyObject1\orig_0.8_del.txt")
def test_dis_1(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig.txt",r"F:\3221005155\3221005155\MyObject1\orig_0.8_dis_1.txt")
def test_dis_10(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig.txt",r"F:\3221005155\3221005155\MyObject1\orig_0.8_dis_10.txt")
def test_dis_15(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig.txt",r"F:\3221005155\3221005155\MyObject1\orig_0.8_dis_15.txt")
def test_empty_1(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig.txt",r"F:\3221005155\3221005155\MyObject1\orig_empty.txt")
def test_empty_2(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig_empty.txt",r"F:\3221005155\3221005155\MyObject1\orig_empty.txt")
def test_not_found_1(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\ori.txt",r"F:\3221005155\3221005155\MyObject1\orig_0.8_dis_15.txt")
def test_not_found_2(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig.txt",r"F:\3221005155\3221005155\MyObject1\ori_0.8_dis_15.txt")
def test_not_txt(self):
c=CheckingAlgorithm()
c.main(r"F:\3221005155\3221005155\MyObject1\orig.txt",r"F:\3221005155\hello.py")
if __name__=="__main__":
unittest.main()
思路
-
五个抄袭文件与原文文件构成5个案例
-
测试原文文件与抄袭文件路径分别错误构成2个案例
-
测试原文文件与抄袭文件路径分别为空构成2个案例
-
文件非txt构成1个案例
截图
六、计算模块部分异常处理说明
如果输入的原文文件路径或抄袭文件路径错误,引发异常,提示“XX文件不存在,可能文件名错误”