首页 > 其他分享 >软件工程-论文查重

软件工程-论文查重

时间:2024-03-18 20:44:17浏览次数:26  
标签:查重 10 doc1 LCS self 论文 软件工程 文档 Document

第一次个人编程作业

这个作业属于哪个课程 <软件工程2024-双学位>
这个作业要求在哪里 <软件工程第一次个人编程作业>
这个作业的目标 完成编码任务

PSP表格

PSP2.1 Persenonal Software Process Stages 预计耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Estimate 估计这个任务需要多少实践 10 10
Development 开发 120 70
- Analysis 需求分析(包括学习新技术) 30 20
- Design Spec 生成设计文档 20 10
- Design Review 设计复审 10 5
- Coding standard 代码规范(为目前的开发指定合适的规范) 15 10
- Design 具体设计 20 15
- Coding 具体编码 30 20
- Test 代码复审 15 10
- Reporting 测试(自我测试,修改代码,提交修改) 10 5
- Test Report 报告 10 5
- Size Measurement 计算工作量 10 5
- Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 20 15
合计 300 195

2. 计算模块接口设计与实现

主要类设计

  1. Document

    • 表示一篇文档,包含文本内容
    • 提供文本预处理功能,如移除标点、转小写等
    • 实现将文档切分为词元序列的方法
  2. SimilarityDetector

    • 计算两篇文档相似度的核心类
    • 使用最长公共子序列(LCS)算法计算相似度
    • 包含基于动态规划和记忆化搜索的LCS计算方法
  3. PlagiarismChecker

    • 主程序入口
    • 处理命令行参数
    • 读取文件内容
    • 使用SimilarityDetector计算相似度
    • 输出结果到指定文件

算法关键点

  • 文档预处理: 过滤掉标点符号、转为小写等,使文档标准化
  • 词元序列化: 将文档切分为词元(token)序列,作为相似度计算的基础
  • LCS算法: 计算两文档词元序列的最长公共子序列长度
  • 相似度计算:
    相似度 = LCS长度 / max(原文词元数, 抄袭版词元数)

该算法的独到之处是使用LCS作为相似度计算的核心,能够规避"交换词序"这类改动的影响。

3. 性能改进

最初的LCS动态规划算法时间复杂度为O(mn),m和n分别为两文档词元序列长度,当文档较长时会导致性能低下。

为加速计算,我引入了以下优化策略:

  1. 哈希表存储词元
    • 将较短文档的词元使用哈希表存储
    • 查找是否属于LCS只需O(1)时间
  2. 记忆化搜索
    • 避免重复计算相同的LCS子问题
    • 使用记忆化数组存储子问题解,降低时间复杂度至O(mn)

经过上述优化,算法在长文档上的性能有了极大提升:

![算法性能分析][]

如图所示,消耗时间最长的函数已由LCS计算变为底层的文档预处理函数。

4. 单元测试

编写了以下单元测试用例:

import unittest
from plagiarism_checker import *

class TestSimilarityDetector(unittest.TestCase):

    def test_identical(self):
        doc1 = Document("The quick brown fox jumps over the lazy dog.")
        doc2 = Document("The quick brown fox jumps over the lazy dog.")
        result = SimilarityDetector.compute_similarity(doc1, doc2)
        self.assertAlmostEqual(result, 1.0)
    
    def test_different(self):
        doc1 = Document("I have a dream that one day...")
        doc2 = Document("In the beginning, God created the heavens and the earth...")
        result = SimilarityDetector.compute_similarity(doc1, doc2)
        self.assertAlmostEqual(result, 0.0)
        
    def test_reordered(self):
        doc1 = Document("The brown quick fox jumps lazy over the dog.")
        doc2 = Document("The quick brown fox jumps over the lazy dog.") 
        result = SimilarityDetector.compute_similarity(doc1, doc2)
        self.assertAlmostEqual(result, 1.0)
        

主要测试点包括:

  • 完全相同的文档
  • 完全不同的文档
  • 存在词序改动的情况
  • 删除/增加少量词语的情况

通过IDE的测试覆盖率分析工具,测试覆盖率达到了85%:

测试结果

5. 异常处理

针对以下几种可能的异常情况,做了处理:

1.文件不存在异常

  • 目标: 提醒用户输入了无效的文件路径

  • 测试用例:

    def test_file_not_found(self):
        with self.assertRaises(FileNotFoundError):
            PlagiarismChecker.run("fakefile.txt", "orig.txt", "output.txt")
    

2.文件读取异常

  • 目标: 捕获文件读取过程中的异常,如权限、磁盘空间等问题

  • 测试用例:

    def test_permission_denied(self):
    # 创建一个临时只读文件
    
        file = open("temp.txt", "w")
        file.close()
        os.chmod("temp.txt", 0o400) # 设置为只读
        with self.assertRaises(PermissionError):
        doc = Document("temp.txt")
        
    os.remove("temp.txt")
    

3.输入文件为空

  • 目标: 确保输入文件有内容,防止除0错误

  • 测试用例:

    def test_empty_file(self):
        doc1 = Document("") 
        doc2 = Document("This is not empty.")
        with self.assertRaises(ValueError):
            SimilarityDetector.compute_similarity(doc1, doc2)
    

标签:查重,10,doc1,LCS,self,论文,软件工程,文档,Document
From: https://www.cnblogs.com/seedwds/p/18081352

相关文章

  • 论文查重
    gitcode地址这个作业的要求在哪里第一次项目作业这个作业的目标实现论文查重,消除警告及改进其他看完论文查重作业的相关要求之后,最开始想到的便是对比两篇文章出现关键字的字频,因此我们需要先对文章进行分词处理,处理问之后再用相似度算法进行计算1.查重论文的......
  • 基于springboot实现房屋租赁系统项目演示【附项目源码+论文说明】
    基于springboot实现房屋租赁系统演示摘要社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本低等优点。因此,构建符合自己要求的操作系统是非常有意义的......
  • 基于springboot实现月度员工绩效考核管理系统项目演示【附项目源码+论文说明】
    基于springboot实现月度员工绩效考核管理系统演示摘要科学时代的发展改变了人类的生活,促使网络与计算机技术深入人类的各个角落,得以普及到人类的具体生活中,为人类的时代文明掀开新的篇章。本系统为月度员工绩效考核管理系统,是专为企业开发的对员工考核的协助软件。可以帮......
  • 2024年3月的计算机视觉论文推荐
    从去年开始,针对LLM的研究成为了大家关注的焦点。但是其实针对于计算机视觉的研究领域也在快速的发展。每周都有计算机视觉领域的创新研究,包括图像识别、视觉模型优化、生成对抗网络(gan)、图像分割、视频分析等。我们今天来总结一下2024年3月上半月份发表的最重要的论文,无论您是......
  • Disentangled Contrastive Learning for Social Recommendation论文阅读笔记
    DisentangledContrastiveLearningforSocialRecommendation论文阅读笔记Abstract存在的问题:大多数社会推荐模型统一了用户对用户-项目交互(协作领域)和社会关系(社会领域)的表示。然而,这种方法可能无法在两个领域中建模用户的异构行为模式,从而损害了用户表示的表达性。解决方法......
  • 2024年智能通信、大数据与软件工程国际会议(ICICBDSE 2024)
    2024年智能通信、大数据与软件工程国际会议(ICICBDSE2024)2024InternationalConferenceonIntelligentCommunication,BigDataandSoftwareEngineering会议简介:在大数据时代背景下,计算机软件技术的开发情况值得关注。特别是在进行通信和传输的过程中,信息通信系统是最......
  • 【推荐】免费AI论文写作-「智元兔 AI」
    还在为写论文焦虑?免费AI写作大师来帮你三步搞定!智元兔AI是ChatGPT的人工智能助手,并且具有出色的论文写作能力。它能够根据用户提供的题目或要求,自动生成高质量的论文。不论是论文、毕业论文、散文、科普文章、新闻稿件,还是商业文案、推广文案,智元兔AI都能够根据用户需求进......
  • 科技小论文——机器学习
    (1. 石家庄铁道大学,河北省 石家庄市 050043)摘要:本论文旨在研究基于深度学习的图像识别技术,并探讨其在实际应用中的效果。通过收集大量图像数据,利用深度学习模型进行训练和优化,提出了一种基于卷积神经网络(CNN)的图像识别方法。实验结果表明,在经过大规模数据集的训练后,所提出的......
  • Disentangled Contrastive Collaborative Filtering 论文阅读笔记
    DisentangledContrastiveCollaborativeFiltering论文阅读笔记Abstract存在的问题:大多数现有的基于gcl的CF模型仍然受到限制,因为忽略了用户-项目交互行为往往是由各种潜在意图因素驱动的(例如,为了家庭聚会购物,首选颜色或产品品牌)引入的非自适应增强技术容易受到噪声信息的......
  • 客户端选择论文1-REFL
    REFL:Resource-EfficientFederatedLearning强调系统效率和资源多样性之间的权衡摘要:联邦学习(FL)允许学习者使用本地数据进行分布式训练,从而增强隐私并减少通信。然而,随着部署规模的扩大,它提出了许多与数据分布、设备功能和参与者可用性的异质性相关的挑战,这可能会影响模......