第一次软件工程项目--论文查重
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229 |
这个作业的目标 | 个人项目——论文查重 |
GitHub地址:https://github.com/samuhaer4581/3122004581.git
psp表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
Estimate | 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 3000 | 4000 |
Analysis | 需求分析 (包括学习新技术) | 30 | 40 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 20 | 20 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 60 | 60 |
Coding | 具体编码 | 240 | 180 |
Code Review | 代码复审 | 30 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 180 | 200 |
Reporting | 报告 | 30 | 60 |
Test Repor | 测试报告 | 20 | 20 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 20 |
合计 | 3730 | 3730 | 4730 |
设计算法
Python文本相似度计算
设计思路
- Python依赖
jieba
本文使用Python的jieba库对文本进行分词。
Python jieba库的使用说明
一、jieba库基本介绍
(1)、jieba库概述
jieba是优秀的中文分词第三方库
- 中文文本需要通过分词获得单个的词语
- jieba是优秀的中文分词第三方库,需要额外安装
- jieba库提供三种分词模式,最简单只需掌握一个函数
(2)、jieba分词的原理
Jieba分词依靠中文词库
- 利用一个中文词库,确定汉字之间的关联概率
- 汉字间概率大的组成词组,形成分词结果
- 除了分词,用户还可以添加自定义的词组
二、jieba库使用说明
(1)、jieba分词的三种模式
精确模式、全模式、搜索引擎模式
- 精确模式:把文本精确的切分开,不存在冗余单词
- 全模式:把文本中所有可能的词语都扫描出来,有冗余
- 搜索引擎模式:在精确模式基础上,对长词再次切分
(2)、jieba库常用函数
gensim
本文使用Python的gensim库计算文本相似度。
- 核心算法
点击查看代码
import unittest
class Test(unittest.TestCase):
orig_path = "../data/test1/orig.txt"
ans_path = "answer.txt"
def test_dis15_2(self, orig_path=orig_path, ans_path=ans_path):
test_path = "../data/test2/orig_0.8_dis_15.txt"
text1 = main.filter_words(main.read_file(orig_path))
text2 = main.filter_words(main.read_file(test_path))
main.save_answer(ans_path, main.calc_similarity(text1, text2))
main.get_answer(ans_path)
if __name__ == '__main__':
unittest.main()
测试覆盖率
对代码覆盖结果进行分析,可以得到,未被覆盖代码主要是异常检测部分。
异常处理
-
ValueError
执行main.py时需要传递三个参数(原文文件路径,抄袭文件路径,答案文件),若参数缺失,则会引发ValueError异常,需要对其进行捕获。
-
FileNotFoundError
读取的文件不存在是会引发FileNotFoundError异常,需要对其进行捕获。
总结
由于是第一次学习对代码进行性能分析和测试,故本次个人编程项目主要的时间花费在学习性能分析工具的使用和测试模块的编写上。
不足
算法部分没有做过多优化,选取了最简单的词袋模型,故准确度不够理想,算法仍有改进的空间。