摘要:现行的论文检测系统,只针对文字部分进行判定,无法判断论文中所包含的代码的独创性。理工科学生的毕业论文,通常包含的大量代码。因现行系统对代码默视为原创,而最终影响了对论文整体抄袭比例的判定,使准确性大打折扣。文章尝试探讨在现行的检测系统中,添加一个针对代码检测判定的模块,提高对理工科学生毕业论文抄袭判定的准确性。
关键词:论文;抄袭;检测;代码;判定
中图分类号:TP311文献标识码:A文章编号:1007-9599 (2010) 09-0000-02
Code Similarity Detection in the Determination of Plagiarism
Wang Minghao
(Putian College,Putian351100,China)
Abstract:The present paper detection system,only the text part for the judge,can not determine the thesis contained in the original code.Thesis of science and engineering students,usually contains a large number of the code.Silent due to the current system code as the original,and ultimately affect the whole paper copy of the proportion for the judge,so that accuracy of the greatly reduced.This article attempts to explore the existing detection system,add a test for the determination of the module code,improve science and engineering students to determine the accuracy of the thesis plagiarism.
Keywords:Paper;Plagiarism;Detection;Code;Determine
根据09年年底,汤森路透集团发布的报告《全球科研报告:中国》(Global Research Report:China)中称,近年来,中国的科研论文数量呈爆炸性发展,仅次美国,高居世界第二[1]。而与之形成鲜明相比的是,中国论文的被引用率低,质量不高和原创性内容不多。这一矛盾产生的主要原因在于高校论文互相抄袭的现象。随着网络技术的日益普及,这股学术不端之风更深深的影响了在校学生。学术浮夸和论文抄袭现象大量的出现在应届学生的毕业论文之中。现有的学术不端检测系统主要是针对文字的检测,对纯理论的论文的抄袭判定比较准确。但是与文科学生不同,理工科学生的毕业论文中常会引用一定数量的代码,这些代码的独创性不被判断。致使部分理工科毕业生在毕业论文中大量引用代码,以减少文字部分引用率的百分比。为了解决这个问题,亟需在现有的学生不端检测系统中建立针对理工科学生的程序代码相似性检测模块。
一、研究背景
程序代码相似性的检测最早是源于对重复代码的检测和对代码的优化。对于程序代码相似度的度量研究,国外起步的比较早,相关的研究也比较多。早在二十世纪七十年代,国外就有学者开始研究检测代码相似性的理论,和基于理论构建的检测系统。目前常用的代码检测技术有两类:一是最早于1976,由Purdue大学的K.J.Ottenstein提出的基于属性计数法(Attribute Counting)[2];二是1996年,由Verco KL和Wise MJ提出的基于结构度量法(Structure Metrics)[3]。
二、代码检测在毕业论文中的应用
(一)相似代码的判定
代码抄袭定义为:一个程序在经过了若干常规性的修改得到的程序[4]。修改的方法主要归为十类,见表1。学生在毕业论文中的代码的抄袭主要体现在前8种。
基于这些常规的修改方式,以C语言代码的判定为例,常用的检测思路之一是,将代码视为一系列Token(标记)的集合,由词法分析程序将源代码转换为Token流。记录两份代码为x和y,两者经过分解的Token流集合分别为X和Y,抄袭的判定条件满足表2。
(二)系统的构建
1.设计思路。
对于学生毕业论文中代码抄袭的具体判定包括以下三个方面:识别,检测和确认。
(1)识别阶段:根据代码中的关键词进行比对,确定代码使用的何种程序语言。
(2)检测阶段:根据识别的结果,选定特定程序语言的代码数据库,进行检测,判定代码的相似度。
(3)确认阶段:根据检测阶段对相似度的判定,输出结果。
与现有的纯代码复制相似性检测,以及纯文字相似检测系统不同,针对理工科学生毕业论文的代码检测的系统必须实现以下功能:
(1)代码和文字的分离。将代码从论文中分离,对不同的代码段落编号,各段单独存储。将分离代码后的论文的文字部分,形成单个文本,统一存储。
(2)针对文字和代码建立不同的检测数据库。
(3)根据不同的代码类型,必须建立有特征识别功能,能针对不同语言分别检测的分析系统和相关数据库。
2.系统构架。
根据系统的需求,系统主要功能模块在论文中代码分离基础上,包括两大部分:针对代码检测的模块和针对文字检测的模块。具体见图1
分离模块主要实现代码和文字的分离,根据代码和文字的不同特征,将其分离为代码部分和文字部分,并将分离后的文字和代码进行存储。后台数据库包括存储数据库和代码特征数据库两个部分。其中存储数据库用来存储预处理之后的文字和代码;代码特征数据库用于存储不同程序语言的特征,以C语言为例,代码特征数据库中需要存储的内容包括有代表性的操作符和关键字。代码特征数据库的主要作用包括两个方面。第一,用于判定一段字母构成的文字是否为程序代码,以及该程序段由何种语言写成。第二,在代码检测时,用于划分代码的结构构成。代码数据库存储用于比对相似性的大量原始代码信息。针对中文论文的检测,分离模块以段落为单位,判定三种情况:纯中文,纯字母和中文字母夹杂。纯中文可以直接判定为论文的文字部分。纯字母的可以比照代码特征数据库,判定是否为代码。如果是代码,以代码的形式单独存储,否则,以文字的形式统一存储。中文字母夹杂的段落,可在去除了中文后,按照纯字母的情况进行处理。
代码检测模块包括代码预处理、代码相似度检测和代码相似度判定三个功能。预处理用于去除代码中的冗余信息。根据表1中的定义,针对其中的2,3,9项,预处理模块消除了源代码中的注释,空格,换行和对程序输出效果无效的代码。同时,预处理模块还消除了常见代码段,如预处理命令和标准输入输出语句等。预处理之后的代码作为输入,由相应的算法进行检测,并得出相似度评判结果。
文字检测模块将分离的文字由相应算法进行检测,得出相似度判定结果。
输出模块根据代码检测判定和文字检测判定,输出最终检测结果:标记所引用或抄袭的部分的出处,以及所站论文总字数的百分比,最后给出综合的判定。
三、总结和展望
对代码独创性的判定是一项细化而复杂的任务。要真正形成完善的系统,还要大量工作要做,如对于代码判定的一系列数据库的建立,和更完善的判定算法的选择和实现,并在实际投入使用后进一步完善。
参考文献:
[1]Jonatha Adam,Christopher King,Nan Ma.Global Research Report ChinaCResearch and Collaboration in the New Geographic Science[R].Thomson Reuter,2009
[2]K.J.Ottenstein.An Algorithmic Approach to the Detection and Prevention of Plagiarism[J].CSD-TR200,1976,103,2:32-39
[3]Verco KL,Wise MJ.Software for Detecting Suspected Plagiarism Comparing Structure and Attribute-counting Systems[J].Proceedings of the 1st Australian Conference on Computer Science Education,Sydney,1996,102,2:3-5
[4]Edward L Jones.Metrics Based Plagiarism Monitoring.The Consortium for Computing in Small Colleges.Vermont.2001:253,261
[5]史彦军,腾弘飞,金博.抄袭龙纹识别研究与进展[J].大连理工大学学报,2005,45,1:50-57
[6]张鹏.C程序相似代码识别方法的研究与实现[D].大连:大连理工大学,2008
[7]付兵.基于信息隐藏技术的电子作业防抄袭研究[J].微计算机信息2009,25,6-3:63-64,70