法律状态公告日
法律状态信息
法律状态
2022-09-16
实质审查的生效 IPC(主分类):G06F21/12 专利申请号:2022103722555 申请日:20220411
实质审查的生效
技术领域
本申请涉及代码抄袭检测技术领域,尤其涉及一种程序代码抄袭检测方法及设备。
背景技术
目前在大部分高等院校当中,使用计算机系统进行教学以及考核已经成为各个高校采用的普遍方法。尤其在程序设计类课程中,因其工程实践性非常强,几乎完全依赖计算机系统进行教学与考核。但是在考核中,许多学生常常以他人的程序为模板,简单地做少量修改,甚至不做修改直接作为自己的考核作业参与考核。在信息化时代,资源的获取更加方便,抄袭现象也越发严重,日益严重的抄袭现象不仅破坏了正常的教学秩序,而且还严重影响了学生个人素质的提高。因为判断程序代码抄袭是一项非常繁杂的工作,传统的人工检测手段耗时费力。而现有技术中对程序代码抄袭进行检测的手段一般只能判断两两程序代码之间的相似性,其相似度检测结果难以反映出一个待检测程序代码集合中的抄袭集群分类。
发明内容
为至少在一定程度上克服相关技术中对程序代码抄袭进行检测的相似度检测结果难以反映出一个待检测程序代码集合中的抄袭“团伙”分类的问题,本申请提供一种程序代码抄袭检测方法及设备。
本申请的方案如下:
根据本申请实施例的第一方面,提供一种程序代码抄袭检测方法,包括:
将待检测程序代码集合中各待检测程序代码转换为XML文本;
根据各所述待检测程序代码对应的XML文本,计算各所述待检测程序代码的相似值;
提取各所述待检测程序代码的特征属性;
根据各所述待检测程序代码对应的XML文本的相似值,及各所述待检测程序代码的特征属性,对所述待检测程序代码集合中的各所述待检测程序代码进行聚类;
根据聚类结果生成检测报告。
优选的,在本申请一种可实现的方式中,所述将待检测程序代码集合中各待检测程序代码转换为XML文本前,所述方法还包括:
对所述待检测程序代码进行正则匹配,提取所述待检测程序代码中每行语句的结构属性信息;
为每种所述结构属性信息均设置唯一标识;
将所述待检测程序代码中每行语句和对应的结构属性信息标识进行存储。
优选的,在本申请一种可实现的方式中,所述将待检测程序代码集合中各待检测程序代码转换为XML文本,包括:
基于预设的结构属性信息与XML文本的转换算法,根据所述待检测程序代码中每行语句对应的结构属性信息标识,将所述待检测程序代码集合中各待检测程序代码转换为XML文本。
优选的,在本申请一种可实现的方式中,所述根据各所述待检测程序代码对应的XML文本,计算各所述待检测程序代码的相似值,包括:
对所述XML文本中每一个含有body属性的结点进行标记;
由所述XML文本中最内层的所述结点开始递归,通过各所述结点包含的所有XML文本行的相似值计算各所述结点的属性提取行的相似值;
根据得到的所述XML文本各行的相似值计算各所述待检测程序代码的相似值。
优选的,在本申请一种可实现的方式中,所述根据各所述待检测程序代码对应的XML文本,计算各所述待检测程序代码的相似值,还包括:
根据预设的每种结构属性信息对应的相似值算法,以及所述XML文本转换前对应的结构属性信息,计算各所述待检测程序代码的相似值。
优选的,在本申请一种可实现的方式中,所述提取各所述待检测程序代码的特征属性,包括:
将所述待检测程序代码中提取的结构属性信息作为所述待检测程序代码进行聚类分析的特征;
将所述待检测程序代码根据各结构属性信息对应转换的XML文本的相似值作为所述待检测程序代码进行聚类分析的各特征的特征值。
优选的,在本申请一种可实现的方式中,所述提取各所述待检测程序代码的特征属性,还包括:
计算所述待检测程序代码集合中各特征值的平均值;
根据所述各特征值的平均值,对所述待检测程序代码缺少的特征值进行数据填补。
优选的,在本申请一种可实现的方式中,所述对所述待检测程序代码集合中的各所述待检测程序代码进行聚类后,所述方法还包括:
基于预设的相似度阈值,确定聚类后的各类待检测程序代码中的源头待检测程序代码。
优选的,在本申请一种可实现的方式中,所述结构属性信息至少包括:结构体,函数,指针,循环结构,条件结构,宏定义和其它。
根据本申请实施例的第二方面,提供一种程序代码抄袭检测设备,包括:
处理器和存储器;
所述处理器与存储器通过通信总线相连接:
其中,所述处理器,用于调用并执行所述存储器中存储的程序;
所述存储器,用于存储程序,所述程序至少用于执行如以上任一项所述的一种程序代码抄袭检测方法。
本申请提供的技术方案可以包括以下有益效果:本申请中的程序代码抄袭检测方法,包括:将待检测程序代码集合中各待检测程序代码转换为XML文本。根据各待检测程序代码对应的XML文本,计算各待检测程序代码的相似值。提取各待检测程序代码的特征属性,根据各待检测程序代码对应的XML文本的相似值,及各待检测程序代码的特征属性,对待检测程序代码集合中的各待检测程序代码进行聚类,根据聚类结果生成检测报告。由于本申请中,在得到各待检测程序代码对应的XML文本的相似值后,还对待检测程序代码集合中的各待检测程序代码进行聚类,从而可以对抄袭集群进行分类显示,进而方便找出抄袭的“源头”代码。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1是本申请一个实施例提供的一种程序代码抄袭检测方法的流程示意图;
图2是本申请一个实施例提供的一种程序代码抄袭检测设备的结构示意图。
附图标记:处理器-21;存储器-22。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
一种程序代码抄袭检测方法,参照图1,包括:
S11:将待检测程序代码集合中各待检测程序代码转换为XML文本;
本实施例中,在将待检测程序代码集合中各待检测程序代码转换为XML文本前,方法还包括:
对待检测程序代码进行正则匹配,提取待检测程序代码中每行语句的结构属性信息;
为每种结构属性信息均设置唯一标识;
将待检测程序代码中每行语句和对应的结构属性信息标识进行存储。
基于此,将待检测程序代码集合中各待检测程序代码转换为XML文本,包括:
基于预设的结构属性信息与XML文本的转换算法,根据待检测程序代码中每行语句对应的结构属性信息标识,将待检测程序代码集合中各待检测程序代码转换为XML文本。
本实施例中,结构属性信息至少包括:结构体,函数,指针,循环结构,条件结构,宏定义和其它。
本实施例中,系统读入每个待检测程序代码后,在对待检测程序代码进行格式化之前先对待检测程序代码进行正则匹配,提取待检测程序代码中每条语句的结构属性信息,同时给每种结构属性信息设置一个唯一的标识,用来代表不同的结构属性信息,然后将待检测程序代码中每条语句和与之对应的结构属性信息标识存储到对应的文件中,作为中间结果,等待下一步的回溯匹配。接下来根据预设的不同的结构属性信息转换为XML文本的算法,将待检测程序代码转换为对应的XML文本。
S12:根据各待检测程序代码对应的XML文本,计算各待检测程序代码的相似值;
包括:
对XML文本中每一个含有body属性的结点进行标记;
由XML文本中最内层的结点开始递归,通过各结点包含的所有XML文本行的相似值计算各结点的属性提取行的相似值;
根据得到的XML文本各行的相似值计算各待检测程序代码的相似值。
body属性的结点之间的文本内容即躯干内容。
本实施例中,预先针对不同的结构属性信息设计不同的结构属性信息与XML文本的转换算法,同时针对不同的结构属性信息设计不同的XML文本行相似度计算方法。
S13:提取各待检测程序代码的特征属性;
包括:将待检测程序代码中提取的结构属性信息作为待检测程序代码进行聚类分析的特征;
将待检测程序代码根据各结构属性信息对应转换的XML文本的相似值作为待检测程序代码进行聚类分析的各特征的特征值;
本实施例中,根据相似值和特征属性,采用聚类分析的方法找出抄袭集群以及抄袭的“源头”。在进行聚类分析前需要先进行特征选取,在特征选取时将待检测程序代码集合作为聚类分析的一个数据总集,把其中每一个待检测程序代码作为数据对象xi,将待检测程序代码中的各结构属性信息选取为聚类分析的特征,再利用上一步骤计算得到的各结构属性信息对应转换的XML文本的相似值作为每个数据对象的各个特征值,本实施例中选取的结构属性信息有:结构体,函数,指针,循环结构,条件结构,宏定义和其它。这样每个数据对象都可以由以上七个特征属性来表示,即每个数据对象xi=(x1,x2……x7)。
本实施例中,提取各待检测程序代码的特征属性,还包括:
计算待检测程序代码集合中各特征值的平均值;
根据各特征值的平均值,对待检测程序代码缺少的特征值进行数据填补。
优选的,本实施例中还进行数据转换。
本实施例中提取待检测程序代码的相似值的百分比前几位的小数,录入到预先创建的表中,表中每行代表一个待检测程序代码,每一行的数据为该待检测程序代码作为数据对象的特征值(x1,x2……x7),x1,x2……x7依次为:结构体,函数,指针,循环结构,条件结构、宏定义和其它。此时表中可能有些特征缺少特征值,缺少的特征值表示这个程序缺少对应的结构属性信息,而对于这些空缺,则需要使用数据清理技术来填补。本实施例中还计算待检测程序代码集合中各特征值的平均值,根据各特征值的平均值,对待检测程序代码缺少的特征值进行数据填补。
经过数据填补和数据转换后,会得到一个用于进行聚类的规格化表。
S14:根据各待检测程序代码对应的XML文本的相似值,及各待检测程序代码的特征属性,对待检测程序代码集合中的各待检测程序代码进行聚类;
实施例中根据各待检测程序代码对应的XML文本的相似值,及各待检测程序代码的特征属性,对待检测程序代码集合中的各待检测程序代码进行聚类。所有数据对象的特征可以看成是一个数据矩阵,其中第i个数据对象的P个变量的特征值可以记为向量:xi=(xi1,xi2……xip)T,然后通过聚类算法进行聚类分析,该聚类分析方法的基本思想为:①提取相似度值大于某一阈值的结构属性信息作为该待检测程序代码的结构属性信息。②根据每个结构属性信息在待检测程序代码中占的比重大小,将其量化为一组由关键字权值构成的向量。③将未分类的待检测程序代码与某个簇中的每个待检测程序代码进行相似度比较,如果结果都大于某一阈值,那么就将该待检测程序代码纳入到该簇当中。如果比对结果与现有的簇中待检测程序代码的相似度值比较小,则将该待检测程序代码归为一个新簇。④重复以上步骤,直到待检测程序代码集合中的所有待检测程序代码比对完毕。通过上面的聚类分析,可以将待检测程序代码集合分成若干个簇,每个簇代表一个分类即抄袭集群。
本实施例中,对待检测程序代码集合中的各待检测程序代码进行聚类后,还基于预设的相似度阈值,确定聚类后的各类待检测程序代码中的源头待检测程序代码。
具体的,根据检测得到的抄袭集群,还可以分析出每个抄袭集群的抄袭源,即该抄袭集群的“源头”代码。
机译: 用于编码自然语言文本内容和/或检测抄袭的计算机实现的方法和设备
机译: 用于编码自然语言文本内容和/或检测抄袭的计算机实现的方法和设备
机译: 具有用于检测空间频率特性的检测器的成像设备,控制方法和具有用于其的计算机程序代码的计算机程序产品