程序代码检测在毕业论文查重中的应用

  程序代码抄袭定义为:一个程序在经过了若干常规性的修改得到的程序[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项,预处理模块消除了源代码中的注释,空格,换行和对程序输出效果无效的代码。同时,预处理模块还消除了常见代码段,如预处理命令和标准输入输出语句等。预处理之后的代码作为输入,由相应的算法进行检测,并得出相似度评判结果。 
  文字检测模块将分离的文字由相应算法进行检测,得出相似度判定结果。 
  输出模块根据代码检测判定和文字检测判定,输出最终检测结果:标记所引用或抄袭的部分的出处,以及所站论文总字数的百分比,最后给出综合的判定。 

猜你喜欢

转载自blog.csdn.net/niailuo888/article/details/88351266