第一次个人编程作业
编码要求
在Github仓库中新建一个学号为名的文件夹。
在开始实现程序之前,在PSP表格[附录2]记录下你估计在程序开发各个步骤上耗费的时间,在你实现程序之后,在PSP表格记录下你在程序的各个模块上实际花费的时间。
使用C++ 、Java语言或者python3实现,提交python代码时请附带上requirements.txt,。C++请使用Visual Studio Community 2017进行开发,运行环境为64-bit Windows 10。对于C++/Java,还需将编译好的程序发布到Github仓库中的releases中
提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。
完成项目的首个版本之后,请使用性能分析工具Studio Profiling Tools来找出代码中的性能瓶颈并进行改进。
使用Github[附录3]来管理源代码和测试用例,代码有进展即签入Github。签入记录不合理的项目会被助教抽查询问项目细节。
使用单元测试[附录4]对项目进行测试,并使用插件查看测试分支覆盖率等指标;写出至少10个测试用例确保你的程序能够正确处理各种情况。
需求
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
import string
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
def preprocess_text(text):
# 删除标点符号
text = text.translate(str.maketrans("", "", string.punctuation))
# 转换为小写
text = text.lower()
# 去除停用词
stop_words = set(stopwords.words("english"))
words = text.split()
words = [word for word in words if word not in stop_words]
# 词干化
stemmer = PorterStemmer()
words = [stemmer.stem(word) for word in words]
# 返回处理后的文本
return " ".join(words)
def calculate_similarity(original_text, plagiarized_text):
# 预处理文本
original_text = preprocess_text(original_text)
plagiarized_text = preprocess_text(plagiarized_text)
# 特征提取(使用词袋模型)
original_words = set(original_text.split())
plagiarized_words = set(plagiarized_text.split())
# 计算重复率
similarity = len(original_words.intersection(plagiarized_words)) / len(original_words)
return similarity
读取原文文件和抄袭版论文文件
with open("original.txt", "r") as file:
original_text = file.read()
with open("plagiarized.txt", "r") as file:
plagiarized_text = file.read()
计算重复率
similarity = calculate_similarity(original_text, plagiarized_text)
输出重复率
print("重复率:{:.2%}".format(similarity))
实在不会,找了个代码。放过我吧

浙公网安备 33010602011771号