基于C++的抄袭检测系统应用

2018-02-23 12:47申桂可
电子技术与软件工程 2018年6期
关键词:代表定义文字

申桂可

摘要 本篇论文针对c++代码,研究抄袭检测方法。通过观察与统计分析,归纳出几类常见的抄袭攻击,并提出相对应的防范措施。我们运用文字分析、结构分析、变量分析等方法弥补单一方法的不足。最后,我们实现出检测系统并且和现有的抄袭检测系统比较,实验结果显示我们的系统明显的比现有系统更能检测各种抄袭的攻击。

【关键词】抄袭 检测 c++

1 前言

现正处于信息电子化的时代,许多信息都可通过互联网来取得,在互联网上也常会出现许多相似的文件。因此,当学生为了缴交的作业或报告,可能通过互联网去收集数据,如此一来学生的作业或报告就可能有许多相似的地方,为了防止学生抄袭,我们必须要一一比对所有学生的作业,找出这些相似的部分,将会是一个浩大的工程。如果有大量的程序需要做比对,以人工的方式来检测将会是一个很庞大的工程,因此我们尝试开发出一个不需以人工检测的方式去比对,但却具有以人工方式检测的精准度的工具,来帮助我们解决这些问题。

2 C++抄袭检测方法

本系统分析的方法分为三种,文字分析、结构分析、变量分析。文字分析的部分我们采用了winnowing algorithm来判断文字相似度,结构分析部部分我们引用DCS Tree的方法,并且加入了function compare和classcompare,再來是变量部分我们采用了统计分析的方法来做变量相似度的计算。通过代码正规化和roken属性设置能将不同代码的格式统一化,以利于文字分析。token属性的设置有利于结构、变量、函数、类别的分析。函数、类别分析有助于文字分析的缺失的改善。

2.1 token定义和token属性设置

一开始我们将读进来的档案先转成一字串,在将字串的每一个token取出,取出之后我们将会设置token的属性。

token的name代表token的名称。type代表roken是属于文字、数字、变量、参数、函数、类别。dataType代表token的数据型态是int、 long、double. short, floatbyte. char.String、bool、void。level代表token是在第几阶层。line代表token是在整个程序的第几 行。range、statistical Simiarity、formatlonSimiarity主要用于变量、或参数。range代表此变量、或参数适用的范围。StatisticalSimiarity用来记录此变量、或参数的统计相似度。formationSimiarity用来记录此变量、或参数的结构相似度。

function的name用来记录funciton的名称,dataType用来记录function的数据型态,level记录此function在程序中的第几层,line记录此funciton开头在第几行,functionRange代表function的范围。parameterList代表这个function所有参数的index。variableList代表这个function所有变量的index。

如果token是一个class时,我们将会以classtoken的方式来记录所需要的信息。class的name用来记录class的名称,line记录此class开头在第几行,classRange记录class所包含的范围,parameterList记录class所有参数的index,variableList代表这个function所有变量的index,inheritancelndex表示class所继承的class的index。childlndex记录class被哪些class所继承。funcitonList则记录class里面的function。

2.2 文字分析

本论文研究的文字分析方法,采用的是Winnowing算法,而我们必须先定义几个变量。

2.2.1 变量定义

Winnowing算法一开始会定义四个重要的变量:

(1)t:一个字串的长度。

(2)k:一个gram的长度。

(3) w: window的大小。

(4)g:gram与gram之间的间距。

2.2.2 算法流程

(1)设置变量:①k:k值必须满足f1≤k≤t),k若超过字串的范围则无法使用此算法,相对的,k值越小则计算出来的相似度则会明显偏高,失去其代表的意义。因此k值的定义非常重要。②w:使用者可以依照文件大自行定义值。③g:g值必须满足(1≤g≤k),若g值大于k则会造成某些数据会被遗漏掉。

(2)字串处理:将字串中空白的字元删除,并将文字的中有大写的部分全部转成小写。

(3)字串分割:将字串依照使用者定义的k作分割,分成一个一个gram。

(4) hash运算:将分好的gram使用hash函数产生一连串hash值。

(5)产生wmdow:将一连串计算好的hash值分别加进Wmdow里,产生一连串windOW。

(6)产生fingerprint:取出window中最小的值并记录下其所在的位置,以方便之后辨别是否有重复取到同样的值。

(7) fingerprint比对:比较两个文件的fingerprint的相似度。

2.3 变量分析

此变量分析针对Kuo统计分析方法做改良,我们将不记录变量名称和数据型态,原因是因为最基础的抄袭攻击就是变量名称的更改,所以变量名称就没那么的重要。统计性记录和结构性记录仍然会保留下来,在此我们加入了变量所在代码的比对,以确保统计性记录和结构性记录的误判。

3 总结

系统具有多方面检查方式,包括文字、结构及统计方法,让检测上更具客观性,且能够补足单一分析方法的不足。实验结果也显示,我们的系统较其他更能找出抄袭的部分,也减少许多误判的概率。

参考文献

[1]王育花.利用远程稿件处理系统和AMLC鉴别可疑学术不端的方法[J].编辑学报,2017(01).

[2]王文福,网络时代期刊论文隐形学术不端挖掘策略[J].中国科技期刊研究,2016 (07).

[3]陈志贤,学术不端防范中科技期刊编辑的主体意识[J].编辑学报,2015 (02).

猜你喜欢
代表定义文字
诠释代表初心 践行人大使命
“代表通道”新观察
这个代表咋这么拗
修辞学的重大定义
山的定义
种出来的“逍遥居”
教你正确用(十七)