lsy04

导航

 
这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13136
这个作业的目标 完成论文查重的个人项目,包括使用PSP评估,设计模块,编写代码并进行单元测试,最后提交到github上

作业github链接:https://github.com/LinSYYY/3222004596

一、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(mins) 实际耗时(mins)
Planning 计划 30 20
Estimate 估计这个任务需要多少时间 10 10
Development 开发 360 400
Analysis 需求分析(包括学习新技术) 60 120
Design Spec 生成设计文档 30 30
Design Review 设计复审 30 20
Coding 代码规范(为目前的开发制定合适的规范) 20 25
Design 具体设计 60 50
Coding 具体编码 300 360
Code Review 代码复审 40 30
Test 测试 180 280
Reporting 报告 120 120
Test Repor 测试报告 60 60
Size Measurement 计算工作量 30 25
Postmortem & Process Lmprovement plan 事后总结,并提出过程改进计划 30 30
合计 1360 3067

二、计算模块接口的设计与实现过程:

1. 模糊匹配函数:

  • 函数名: fuzzy_match(pattern, sentences)
  • 参数:
    • pattern:待匹配的模式字符串。
    • sentences:原文本组成的列表。
  • 返回值:
    • 匹配结果的列表,每个元素是一个元组,包含匹配的句子和相似度。
    • 相似度的数值。

2. 主程序:

  • 读取原文和待检测文章的路径。
  • 读取文件内容并进行预处理,将文本内容转换为字符串。
  • 调用模糊匹配函数,对待检测文章进行匹配,并获取相似度。
  • 输出匹配结果和相似度。

3. 文件写入函数:

  • 函数名: write_similarity_to_file(similarity)
  • 参数:
    • similarity:相似度的数值。
  • 功能: 将相似度写入文件。

关键步骤描述

  • 确定算法的输入和输出。
  • 描述算法的主要步骤和流程,包括循环、条件判断等。
  • 指出算法中的关键数据结构和操作。

三、计算模块接口部分的性能改进:

改进思路:

1.减少重复计算相似度:在代码中多次调用fuzzy_match(pattern, sentences),可以将其计算结果保存下来,避免重复计算。
2.文件读取优化:可以采用更高效的文件读取方式,例如使用with open()语句来自动关闭文件,或者一次性读取整个文件内容。
3.批量处理:考虑对待检测文章进行分段处理,而不是一次性处理整篇文章。这样可以减少内存消耗并提高算法效率。
4.代码优化:对于模糊匹配阈值的设定,可以根据实际情况进行调整,以提高匹配的准确性或效率。

计算模块部分单元测试展示:

import unittest

class TestFuzzyMatch(unittest.TestCase):
    def setUp(self):
        # 构造测试数据
        self.original_text = "This is a sample original text."
        self.test_text = "This is a sample test text."
        self.pattern = "sample"
        self.similarity_threshold = 0.6

    def test_fuzzy_match(self):
        # 测试模糊匹配函数的正确性
        matches, similarity = fuzzy_match(self.pattern, [self.original_text])
        
        # 检查返回结果是否符合预期
        self.assertEqual(len(matches), 1)  # 应该只有一个匹配
        self.assertEqual(matches[0][0], "sample original text.")  # 匹配的句子应该是原始句子中的一部分
        self.assertGreaterEqual(matches[0][1], self.similarity_threshold)  # 相似度应该大于等于设定的阈值

    def test_performance(self):
        # 测试性能是否有所改进
        import time
        
        start_time = time.time()
        # 执行模糊匹配
        fuzzy_match(self.pattern, [self.original_text] * 1000)  # 重复1000次以模拟大量数据
        end_time = time.time()

        # 检查执行时间是否减少,表示性能有所改进
        self.assertLess(end_time - start_time, 10)  # 假设执行时间不超过10秒

if __name__ == '__main__':
    unittest.main()

在上面的单元测试中,构造了两个测试用例:

test_fuzzy_match:测试模糊匹配函数的正确性,包括返回结果是否符合预期。
test_performance:测试性能是否有所改进,即模糊匹配函数是否在处理大量数据时执行时间减少。

posted on 2024-03-13 22:32  林凛凛凛凛  阅读(31)  评论(0编辑  收藏  举报