第一次软件工程项目--论文查重

这个作业属于哪个课程 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异常,需要对其进行捕获。

总结

由于是第一次学习对代码进行性能分析和测试,故本次个人编程项目主要的时间花费在学习性能分析工具的使用和测试模块的编写上。

不足

算法部分没有做过多优化,选取了最简单的词袋模型,故准确度不够理想,算法仍有改进的空间。

posted @ 2024-09-13 21:18  4581  阅读(14)  评论(0编辑  收藏  举报