第一次个人编程作业

| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-34 |

| ----------------- | --------------- |

| 这个作业要求在哪里|https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229 |

| 这个作业的目标 |论文查重 |

代码链接:https://gitee.com/FWC2G3W8UR/3122004564-first


  1. 代码组织
    主类 (PaperChecker): 负责读取命令行参数,调用查重逻辑,并输出结果。
    查重工具类 (SimilarityChecker): 包含具体的查重算法,如基于最长公共子序列(LCS)、余弦相似度等。
    文件读写类 (FileReaderWriter): 负责从文件读取文本,并写入结果到文件。
  2. 关键函数与流程图
    关键函数
    FileReaderWriter.readTextFromFile(String filePath): 读取文件内容并返回字符串。
    SimilarityChecker.calculateSimilarity(String original, String plagiarized): 计算两个文本字符串的相似度,返回相似度百分比。
    PaperChecker.main(String[] args): 主函数,解析命令行参数,调用查重逻辑,并输出结果。
    流程图
    开始
    解析命令行参数
    读取原文文件路径
    读取抄袭版文件路径
    读取输出文件路径
    读取原文和抄袭版内容
    调用 FileReaderWriter.readTextFromFile()
    计算相似度
    调用 SimilarityChecker.calculateSimilarity()
    写入结果到文件
    使用 FileReaderWriter 将相似度百分比写入输出文件
    结束
  3. 算法关键与独到之处
    算法选择:可以选择使用最长公共子序列(LCS)作为基础算法,因为LCS可以很好地反映两段文本在内容上的重叠程度。然后,通过LCS的长度与原文长度的比例来计算相似度。
    独到之处:除了LCS,还可以引入词频统计和TF-IDF等文本处理技术,以更精确地识别出抄袭的部分,并区分重要内容和无关紧要的改动(如标点符号变化)。
  4. 性能改进思路
    并行处理:如果文本量非常大,可以考虑使用多线程或分布式计算来并行处理文本的各个部分。
    算法优化:对于LCS算法,可以采用动态规划的空间优化技术来减少内存使用。
    缓存机制:对于频繁访问的数据(如词频表),可以使用缓存来提高访问速度。
  5. 单元测试设计
    测试 FileReaderWriter.readTextFromFile:
    构造测试数据:包含正常文本文件、空文件、不存在文件的路径。
    验证返回结果是否符合预期。
    测试 SimilarityChecker.calculateSimilarity:
    构造多组测试数据,包括完全相同的文本、部分相同的文本、完全不同的文本等。
    验证返回的相似度百分比是否正确。
  6. 异常处理
    文件不存在异常:当尝试读取不存在的文件时,捕获 FileNotFoundException 并输出友好的错误信息。
    读取文件错误:当文件内容不是预期的文本格式时(如二进制文件),捕获 IOException 并适当处理。
    参数异常:检查命令行参数是否有效,如路径是否为空等。
posted @ 2024-09-10 14:12  潜柔飘  阅读(54)  评论(0编辑  收藏  举报