论文查重 | 论文文献库 | 面向实践教学的作业查重系统

互联网的快速发展使得信息共享的途径增多,但电子资 料的易复制性和易篡改性,也使得抄袭现象频有发生[1]。现阶 段,大部分高校仍以人工审查作业为主要方式,这种方式 虽然可以充分发挥教师丰富的经验优势,但对公平公正的 评估学生作业仍具有很强的不确定性,且不能做到量化分 析。近年来,论文查重已经成为高校中强化学术规范的重 要举措,大部分学校都已购买了论文查重的新服务,但却很少有学校进行作业查重[2]。2018年9月清华发布《关于提 供作业查重服务的通知》 [3],标志着清华将采用中国知网检 测系统进行作业查重。考虑到使用知网检测系统进行作业 查重不具有针对性,且耗费较高,于是在软件工程课程的 实际教学过程中,开发了一种简便的论文查重系统,既可针对 软件工程课程所提交的作业进行有针对的论文查重,又可节省 教师在日常审查作业中所耗费的大量时间以提高教师的教 学效率和质量。
2 作业中存在的问题(Problems in the assignment)
软件工程课程是计算机及相关专业中的一门重要课程, 对于培养新工科人才具有重要意义[4]。在软件工程教学过程 中,实践教学占据着重要的一部分,要充分发挥学生对该课 程的主观能动性,就需要布置一些作业,以促进学生自我学 习,自我思考。目前,软件工程课程的平时作业中存在数量 多、难存档、难细评等问题[5]。一方面,学生们的作业大多以 纸质版保存,不易长期存档,且学生们的作业存在相互抄袭 现象,更有甚者,不进行思考,也不进行资料查找,直接将 同学的作业进行复制粘贴,或改成自己的文件名便提交给教 师。长期维持这种情况,不利于培养学生正确的学术规范, 以至于在毕业的时候,习惯抄袭,最终导致难以毕业。另一 方面,一个教师往往教授多门课程或多个班级,在一对多的 状态下,学生提交的作业数量便成倍增长、增加了教师的工 作量。当工作量很大时,教师便很难对学生的作业一一细 评,尤其是难以对原创作业给予合理、公正的分数。 为解决上述问题,在软件工程实际教学中,开发了作业 查重系统。该系统充分利用了现有的教学资源,可以大幅降 低教学成本,在教师教学经费不充裕的情况下能够大范围的 应用。
3 总体方案(Overall scheme)
软件工程课程中的作业有许多形式,如课后题、案例分 析等。由于软件工程的实践性较强,大多数院校在本课程中 都有项目实验的实践环节,而该实践环节的成果一般包括项 目的程序代码和项目的实验报告。本系统以项目实验报告为 例,对整个查重系统的流程进行介绍。具体的查重流程如图1 所示,包括作业收集、作业预处理、作业查重、教师审查和 结果分析。
3.1 作业收集
软件工程课程实际教学中,为发挥学生的团队协作能 力和培养学生的沟通交流能力,将所教授的16级计算机科学 与技术专业的两个班级分组进行项目实践。由于两个班级均 有41名同学,因而将每个班级的学生分为七个五人组和一个 六人组。学生以小组进行实践,每个人均要提交一份实验报 告。这样可以避免同组中一些能力弱的同学在项目实践过程 中,不参与或很少参与项目实践,仅依赖能力强的同学进行 项目开发和文档书写,但最终却能够凭借他人努力的成果通 过课程考核。
传统的作业收集方式是由班长或学习委员将作业收齐,之后再统一提交给教师。这种收集作业的方式便于管理且省 时省力。故本课程仍然采用这种收集作业的方式,但是为了 避免因处理不同格式的文件而增加系统的复杂性,也为了便 于教师对作业的审查,故要求每人的作业以统一的格式进行 命名。实验报告的命名统一为“学号姓名”,且文档的后缀 名统一为.docx,如“20160103张三.docx”。所有的学生将 自己电子版的实验报告提交给学习委员后,学习委员初步对 每个学生的作业命名格式进行检查,检查无误后将所有同学 的文档放入一个文件夹中,并将文件夹命名为“班级作业名 称”,如“计算机科学与技术一班实验报告”。整个文档压 缩打包后发送到教师邮箱提交给教师。这样既方便教师处理 作业,也便于在文档丢失的情况下进行找回。
3.2 文档预处理
教师收到提交的作业后,从邮箱下载到个人的计算机 上,进行保存。之后查重系统便对实验报告文档进行预处 理,也就是将文档格式处理为指定的格式,并对文档内容进 行处理。预处理过程中,文档内容由python中.docx模块的 Document类读取,读取的结果是分段的,并且每个段落的内 容是一个document.paragraphs,之后将所有的document. paragraphs规格化。实验报告中的内容大体包含文本内容 和程序代码两部分,考虑到学生的实践项目是小组共同完成 的,同组学生的程序代码难免相似,且有些代码中方法名本 身的字符数就很多。因此,为避免重合度虚高,实验中把所 有的英文字符和标点符号过滤掉,仅保留了所要查重的主体 内容——中文字符,最后将所有读取到的中文字符连接成字 符串并存入.txt文档中。
按照上述方式进行预处理后的文档包括两种,一种是每 个学生.docx文档所对应的.txt文档,此文档命名为“学号姓 名.txt”;另一种是除每个学生本人之外的所有文档所生成 的.txt文档,此文档命名为“学号姓名all.txt”。前者是为了 对比单个学生之间的作业重复度,后者是为了对比学生本人 和除自己之外的其他所有的学生之间的重合度。
3.3 文档查重
文档查重是整个系统的核心部分。我们称需要查重的 文档为目标文档(Object Document,OD),其中的字符串为 目标字符串;与查重文档相对比的文档为模式文档(Pattern Document,PD),其中的字符串为模式字符串。查重分为 两种方式的查重,一种是学生作业之间的查重,称为一类查 重;另一种是学生与除自己之外的所有文档的查重,称为二 类查重。整个系统的流程图如图2。首先读取OD名,判断OD 名中是否有“all”,由于只对学生本人的文档进行查重,所 以OD文档中需要去除学生作业文档之外的文档。去除后,接 着判断模式文档名中是否含有“all”,如果有就把模式文档 名中截取的除“all”之外的字符串(简称PD1)与OD名对比, 若相同,则进行一类查重;如果没有“all”则判断PD名是否 等于OD名,相等则说明是学生自己的作业与自己的作业要对比,故将查重率直接x设置为一个固定数值,为了便于最 高查重率的查看,故将此数值设为0;若不等则进行二类 查重。
查重流程中的一个关键点是查重算法。此系统的查重算 法基于k-gram[6,7]字符串匹配算法。整个查重算法包括一个 循环(Step2至Step9),四个判断,分别称为一判断(Step4至 Step9)、二判断(Step5至Step9)、三判断(Step6至Step8),四 判断(Step10至Step12)。其中,循环是从OD文档中逐个遍历 单个字符;一判断是用于判断所读K-String的长度是否大于 等于窗口大小(窗口大小可根据实际情况自己定义);二判断是 判断K-String是否对PD字符串进行切割,没有切割则结果等 于1,此时证明该K-String是不重复的,否则的话就表明该 K-String是重复的,当重复时需要对转换标志flag进行转换将 其变为True;当不重复时,执行三判断,判断flag是否为真, 为真则将证明除最后一位之外的K-String是重复的内容,故 将其追加到重复内容的字符串中,反之,表明当前K-String 的首位是不重复内容,故将其记入不重复的内容中。循环结 束后,OD文档中会剩下长度不够窗口大小的未读字符串,此 时执行四判断,对剩余字符串进行处理。具体算法如下: Step1:初始化滑动窗口长度length为10,转换标志flag 为False,滑动窗口字符串K-String、重复字符串Dup、不重 复字符串Undup及重复内容DupText均为空字符串; Step2:从OD文档中逐个遍历单个字符,遍历未完成时 执行Step3至Step9,否则执行Step10; Step3:将遍历到的单个字符逐个追加到K-String中; Step4:判断K-String的长度是否大于等于length,成立 执行Step5; Step5:判断K-string字符串切割PD字符串后的结果,等 于1执行Step6,否则执行Step9; Step6:判断flag的值是否为True,为真则执行Step7,否 则执行Step8; Step7:Dup之后追加K-String字符串中的第一位至倒 数第一位(不含倒数第一位),DupText更新为原DupText后 追加开始标志“strart”、K-String字符串中的第一位至 倒数第一位及结束标志“endn”,K-String更新为原 K-String的最后一位和从OD中新读入的单个字符,flag转换 为False; Step8:Undup之后追加K-String的第一位,K-String 更新为除原K-String首位之外的所有字符,并继续追加下一 位从OD中新读入的单个字符; Step9:flag转变为True; Step10:判断K-string字符串切割PD字符串后的结果, 等于1执行Step11,否则执行Step12; Step11:Undup之后追加K-String;
上述步骤中,Step7和Step8是两个主要步骤,Step7之前 的Step5判断出现了不一样的字符,而Step6的判断说明当前 K-String是重复的,所以执行了Step7,这表明当前比较的重 复内容到这里已经结束,故在Step7中开始执行下一轮的新比 较。另外,Step7中的重复内容DupText内容的前后增加开头 标志和结尾标志,是为了使得重复内容存入重复记录文档中 时,方便教师的查看,更容易找出学生重复的内容,从而有 针对性地评判每个学生的作业。Step8之前的Step5判断出现 了不一样的字符,而Step6的判断说明当前K-String是不重复 的,所以执行了Step8,这表明截至目前K-String的内容都不 是重复的,故在Step8中将窗口后移一位。查重完成之后,将 计算得到的每个学生作业文档的总字数、有效字数、重复字 数,以及两类查重的重复率写入.csv格式的文档中,并将每次 记录的查重详情记录到一个.txt文档中。
3.4 教师审查
教师的审查旨在查看学生作业的质量,便于进一步分析 教学质量。智能查重系统最终得到的是一个.csv格式的文档和 一个查重内容记录的.txt文档。其中教师可用个人计算机中的 Excel软件打开.csv文档查看各个学生之间的重复率,以及学 生本人与除本人之外的所有学生的重复率。 在软件工程课程中对两个班级实验报告的查重结果如图3 所示。教师可用计算机中的记事本打开.txt文档,查看学生重 复的内容,实验结果如图4所示。由于数据较多,图3和图4中 仅截取了部分结果。通过查重结果,教师重点对那些重复率 小的作业进行查看,从而筛选出高质量的原创性作业。
4 结果分析(Result analysis)
教师在进行审查后可对.csv文档中的内容进行编辑, 如:生成折线图,柱状图等统计图以便查重数据的分析,也 可将文档保存为后缀名为“.xlsx”的通用表格文档。如图 5所示是对学生的软件工程实验报告的总字数分析的统计的 分布图。可以看出,大多数学生的实验报告的字数在2000到 3000,仅有四名同学字数在8000到10000。
为了清晰直观地展现两个班级中实验报告的查重重合分 布情况,故将查重结果分为六个等级重合度为10%、20%、 30%、40%、50%及以上。且将相似度的合格线设置为30%。 两类查重均需合格,否则学生作业记为不合格。
最终的分析结果详见表1。表中二类查重人数统计是先计 算出学生本人和其余81位学生之间的81个查重率的均值,之 后再按重合度等级进行统计。计算机科学与技术两个班的查 重结果为表1,可以看出,大多数的学生均能自己书写文档, 没有抄袭其他同学的作业。仅有6位同学的作业未能通过查 重,这类学生应在平时注意引导,有近一半学生的作业查重 率小于10%,可以重点进行查看,寻找原创作业。另外,对二 类查重的重复率超出10%的学生的作业也再次进行查看。
5 结论(Conclusion)
根据软件工程课程实际教学情况,本文提出了面向实践 教学的作业查重系统。系统利用现有的计算机进行作业的查 重及分析,通过基于k-gram的字符串匹配算法得到作业的 重复率。教学中,系统不仅能够提高实践教学的人力成本、 时间成本、教学效果和评价质量,同时可以减少人工审查作业 中的主观因素。整个系统无须数据库、无须联网,不仅最小化 了软硬件开发及安全方面的投入,而且部署较为简单,易于上 手,使用方便,适合大范围推广。后期可以将该系统生成可直 接运行的程序,并增加可视化界面,使系统更易操作。

相关文章:档案查重的畅想