第一次个人编程作业

这个作业属于哪个课程 软件工程辅修班
这个作业要求在哪里 论文查重
这个作业的目标 完成个人作业编码

已经上传至GitCode

一、需求重述

题目:论文查重

描述如下:

设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:

从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例( 提取码:nwjr),使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。

注意:答案文件中输出的答案为浮点型,精确到小数点后两位

语言版本 Python 3.10.11
运行环境 PyCharm Community Edition 2022.2

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

首先,我们需要读取两个文件的内容,然后预处理它们(比如分词、去除停用词、转换成小写等)。
接着,我们可以计算两个文本中相同单词的比例,以得到它们的相似度(重复率)。

1.导入模块

import sys  
from collections import Counter

2.读取文件

def read_file(file_path):  
    with open(file_path, 'r', encoding='utf-8') as file:  
        return file.read()

3.处理文本

def preprocess_text(text):  
    words = text.split()  
    words = [word.lower() for word in words if word.isalnum()]  
    return words

4.计算相似度

def calculate_similarity(text1, text2):  
    words1 = preprocess_text(text1)  
    words2 = preprocess_text(text2)  
      
    counter1 = Counter(words1)  
    counter2 = Counter(words2)  
      
    intersection = counter1 & counter2  
    union = counter1 | counter2  
      
    similarity = sum(intersection.values()) / sum(union.values())  
    return similarity

5.主函数

def main(orig_path, plagiarized_path, output_path):  
    orig_text = read_file(orig_path)  
    plagiarized_text = read_file(plagiarized_path)  
      
    similarity = calculate_similarity(orig_text, plagiarized_text)  
      
    with open(output_path, 'w', encoding='utf-8') as file:  
        file.write(f"{similarity:.2f}\n")

6.命令行参数处理

if __name__ == '__main__':  
    if len(sys.argv) != 4:  
        print("Usage: python paper_checker.py <original_file_path> <plagiarized_file_path> <output_file_path>")  
        sys.exit(1)  
      
    orig_path = sys.argv[1]  
    plagiarized_path = sys.argv[2]  
    output_path = sys.argv[3]  
      
    main(orig_path, plagiarized_path, output_path)

切换目录后向命令行输入指令

python paper_checker.py "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig_0.8_add.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\output.txt"
python paper_checker.py "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig_0.8_del.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\output.txt"
python paper_checker.py "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig_0.8_dis_1.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\output.txt"
python paper_checker.py "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig_0.8_dis_10.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\output.txt"
python paper_checker.py "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\orig_0.8_dis_15.txt" "C:\Users\86135\PycharmProjects\zuoye\测试文本\output.txt"

再依次查看输出文本得到相似律

PSP表格

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