CN112764809B - 基于编码特征的sql代码抄袭检测方法及系统 - Google Patents
基于编码特征的sql代码抄袭检测方法及系统 Download PDFInfo
- Publication number
- CN112764809B CN112764809B CN202110096859.7A CN202110096859A CN112764809B CN 112764809 B CN112764809 B CN 112764809B CN 202110096859 A CN202110096859 A CN 202110096859A CN 112764809 B CN112764809 B CN 112764809B
- Authority
- CN
- China
- Prior art keywords
- features
- sql
- coding
- plagiarism
- generalized
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/285—Clustering or classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/36—Creation of semantic tools, e.g. ontology or thesauri
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种基于编码特征的SQL代码抄袭检测方法及系统,该方法步骤包括:S1.输入指定编码任务下所有的待检测SQL代码,分别提取出各待检测SQL代码中的特定编码特征以及提取泛化编码特征;S2.将提取得到的所有特定编码特征进行聚类,根据聚类结果确定得到抄袭群体;S3.分别获取抄袭群体中各待检测SQL代码进行判断,判断时将待检测SQL代码的泛化编码特征与历史泛化编码特征进行比较,根据判断结果判定待检测SQL代码是否属于抄袭或是被抄袭;S4.将各抄袭群体中各待检测SQL代码的抄袭判定结果输出。本发明具有实现方法简单、能够实现SQL代码的抄袭自动检测,且检测效率及精度高等优点。
Description
技术领域
本发明涉及抄袭自动检测技术领域,尤其涉及一种基于编码特征的SQL代码抄袭检测方法及系统。
背景技术
结构化查询语言(SQL)是数据库技术的关键,在SQL的应用过程中可能需要对众多编写者对同一任务下的SQL代码进行评估,而这其中就可能会存在抄袭现象。如在教学实践中为评估学生的学习质量需要学生完成SQL编程习题,学生提交的SQL代码中就可能存在抄袭现象,这会影响评估的准确性。目前通常是人工依据经验判定众多SQL代码中是否抄袭,不仅需要耗费大量精力,且人工判定的精度也不高,若能够实现智能的抄袭检测,面向大量SQL代码实现自动的抄袭检测、识别,则可以极大的提高检测效率以及精度。
针对代码的自动抄袭检测,目前主要采用词频统计、字符串匹配、语法树匹配、编码特征匹配等方式实现,但是相比于其他类型代码,SQL代码具有编码的特殊性,直接采用普适性的代码检测方式通常难以实现精度的检测。针对SQL代码的自动抄袭检测,目前主要采用以下两类方式:
1、基于字符串匹配的检测方式:该类方式是通过SQL代码之间的字符串相似性匹配来实现抄袭检测,典型的如通过对SQL代码进行分词,计算SQL代码间的编辑距离来判定SQL代码之间是否存在抄袭,根据SQL代码字符串间的相似度返回一定的分数值,由不同的分数值代表不同的匹配程度,若分数值高于一定值时即认为为抄袭。但是该类基于字符串匹配的检测方式,关注点仅在于SQL代码中的单词是否相同,而忽略了SQL代码本身的特性以及编写者的编码特性,极易发生误判,如当SQL代码本身较为简单或不具有多个等价结果时,就不能体现出编写者的编码特性而有效识别出SQL代码间的差异。
2、基于编码特征匹配的检测方式:该类方式通过对SQL代码抽取编写者的编码习惯(如即关键字大小写习惯和换行习惯等)并表示为词频矩阵,之后通过比较编写者当前呈现的编码习惯与其历史编码习惯间的差异来判定抄袭行为。由于考虑了编写者在编码过程中呈现出的独特编码习惯,因而相比于基于字符串匹配的检测方式,该类基于编码特征匹配的SQL抄袭检测方式能够降低抄袭检测的误判率,但是一方面该类方式仅通过简单比较编写者自身的编码特征变化来判定抄袭行为,缺乏对于不同编写者SQL代码间编码相关性的观测,仍然易于发生误判,另一方面该类方式所考虑的编码特征仍然过于简单,无法充分利用SQL代码的丰富编码特征,不能充分表征SQL代码与编码特性之间的关系,仍然会制约抄袭检测的精确度。
综上,现有技术中SQL代码的自动抄袭检测,要么是简单的将SQL代码进行相似性匹配来发现抄袭问题,要么是利用编写者在SQL编码习惯上的简单差异特征来发现抄袭行为,而无论是哪种方式,均不能充分利用编写者对于SQL代码所展现出的丰富编码特征,仍然不能达到高精确度的抄袭检测。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、能够实现SQL代码的抄袭自动检测,且检测效率及精度高的基于编码特征的SQL代码抄袭检测方法及系统。
为解决上述技术问题,本发明提出的技术方案为:
一种基于编码特征的SQL代码抄袭检测方法,步骤包括:
S1.编码特征提取:输入指定编码任务下所有的待检测SQL代码,分别提取出各待检测SQL代码中用于表征编写者在当前SQL编码任务下编码特性的特定编码特征,以及提取用于表征编写者在当前SQL编码任务下所展现出的泛化性编码特性的泛化编码特征;
S2.抄袭群体检测:将提取得到的所有特定编码特征进行聚类,根据聚类结果确定得到抄袭群体,将所述特定编码特征属于同一类的待检测SQL代码作为一个抄袭群体;
S3.泛化特征匹配:分别获取所述抄袭群体中各待检测SQL代码进行判断,判断时将待检测SQL代码的泛化编码特征与待检测SQL代码所对应的编写者的历史泛化编码特征进行比较,所述历史泛化编码特征由对应编写者多个历史SQL代码数据提取得到的泛化编码特征计算得到,根据判断结果判定待检测SQL代码是否属于抄袭或被抄袭;
S4.抄袭检测输出:将各所述抄袭群体中各待检测SQL代码的抄袭判定结果输出。
进一步的,所述特定编码特征包括SQL关键字特征、SCHEMA特征、函数特征、关系运算符特征、括号特征、空格特征、缩进特征、换行特征中任意一种或两种以上的组合。
进一步的,所述泛化编码特征包括泛化关键字特征、泛化括号特征、泛化换行特征、泛化空格特征、泛化缩进特征、字段名修饰特征中任意一种或两种以上的组合。
进一步的,所述步骤S2的步骤包括:
S21.将提取得到的所有特定编码特征进行归一化处理,得到处理后的特定编码特征;
S22.对所述处理后的特定编码特征进行聚类,输出聚类得到的聚类簇;
S23.对得到的所述聚类簇进行判断,若目标聚类簇中元素的数量超过指定阈值,将目标聚类簇判定为所述抄袭群体,输出检测到的抄袭群体。
进一步的,所述步骤S22中采用凝聚式层次聚类算法进行聚类。
进一步的,所述步骤S3中,通过比较待检测SQL代码与对应的历史泛化编码特征之间的相似度值,判断待检测SQL代码是否属于抄袭或被抄袭。
进一步的,所述步骤S3的具体步骤包括:
S31.遍历各个所述抄袭群体中所有待检测SQL代码,获取一个待检测SQL代码作为当前SQL代码,转入步骤S32;
S32.获取当前SQL代码以及当前SQL代码所对应的编写者的历史泛化编码特征,并计算获取的当前SQL代码与对应的所述历史泛化编码特征之间的相似度值;
S33.对计算得到的所述相似度值进行判断,若所述相似度值超过预设阈值,则判定当前SQL代码为抄袭;否则判定当前SQL代码为被抄袭,并使用所述泛化编码特征更新当前SQL代码对应编码者的历史泛化编码特征;
S34.取下一个待检测SQL代码作为当前SQL代码,返回步骤S32,直至遍历完所述抄袭群体中所有待检测SQL代码。
一种基于编码特征的SQL代码抄袭检测系统,包括:
编码特征提取模块,用于输入指定编码任务下所有的待检测SQL代码,分别提取出各待检测SQL代码中用于表征编写者在当前SQL编码任务下编码特性的特定编码特征,以及提取用于表征编写者在当前SQL编码任务下所展现出的泛化性编码特性的泛化编码特征;
抄袭群体检测模块,用于将提取得到的所有特定编码特征进行聚类,根据聚类结果确定得到抄袭群体,将所述特定编码特征属于同一类的待检测SQL代码作为一个抄袭群体;
泛化特征匹配模块,用于分别获取所述抄袭群体中各待检测SQL代码进行判断,判断时将待检测SQL代码的泛化编码特征与待检测SQL代码所对应的编写者的历史泛化编码特征进行比较,所述历史泛化编码特征由对应编写者多个历史SQL代码数据提取得到的泛化编码特征计算得到,根据判断结果判定待检测SQL代码是否属于抄袭或被抄袭;
抄袭检测输出模块,用于将各所述抄袭群体中各待检测SQL代码的抄袭判定结果输出。
一种基于编码特征的SQL代码抄袭检测系统,包括处理器以及存储器,所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序,所述处理器用于执行所述计算机程序,以执行如上述方法。
一种存储有计算机程序的计算机可读存储介质,所述计算机程序执行时实现如上述方法。
与现有技术相比,本发明的优点在于:
1、本发明从SQL特性出发,同时提取SQL代码的表征当前SQL代码中编码特性的特定编码特征以及表征不同编写者泛化性编码特性的泛化编码特征,能够充分表征在当前SQL编码任务下特定编写者的编码特性以及不同编码者的泛化性编码特性,综合该SQL的特定编码特征以及泛化编码特征,先基于特定编码特征进行聚类分析识别出抄袭群体,再通过比较SQL代码的泛化编码特征与其历史泛化编码特征之间的一致性来判定抄袭,能够充分利用SQL代码所展现出的丰富编码特征实现SQL代码抄袭的自动检测,有效提高自动检测的精度以及效率。
2、本发明进一步根据SQL代码的语法、句法特性,提取出各类型特定编码特征,能够综合反映出编写者在当前编码任务下SQL代码的特定编码特性,从而便于后续准确筛选出抄袭群体,同时提取出多种泛化编码特征,能够充分反映编写者在编写SQL代码时所展现出的泛化性编码习惯,使得可以准确刻画编写者的SQL编码习惯,进一步提高SQL代码抄袭自动检测的精度。
附图说明
图1是本实施例基于编码特征的SQL代码抄袭检测方法的实现流程示意图。
图2是本实施例基于编码特征的SQL代码抄袭检测系统的结构原理示意图。
图3是本发明具体应用实施例(学生SQL习题代码检测)中实现SQL代码抄袭检测的结构原理示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1所示,本实施例基于编码特征的SQL代码抄袭检测方法的步骤包括:
S1.编码特征提取:输入指定编码任务下所有的待检测SQL代码,分别提取出各待检测SQL代码中用于表征编写者在当前SQL编码任务下编码特性的特定编码特征,以及提取用于表征编写者在当前SQL编码任务下所展现出的泛化性编码特性的泛化编码特征;
S2.抄袭群体检测:将提取得到的所有特定编码特征进行聚类,根据聚类结果确定得到抄袭群体,特定编码特征属于同一类的待检测SQL代码作为一个抄袭群体;
S3.泛化特征匹配:分别获取抄袭群体中各待检测SQL代码进行判断,判断时将待检测SQL代码的泛化编码特征与待检测SQL代码所对应的编写者的历史泛化编码特征进行比较,历史泛化编码特征由对应编写者多个历史SQL代码数据提取得到的泛化编码特征计算得到,根据判断结果判定待检测SQL代码是否属于抄袭或被抄袭;
S4.抄袭检测输出:将各抄袭群体中各待检测SQL代码的抄袭判定结果输出。
本实施例基于编码特征实现SQL代码抄袭自动检测(SQL-Detector),从SQL特性出发,同时提取SQL代码的表征当前SQL代码中编码特性的特定编码特征以及表征不同编写者泛化性编码特性的泛化编码特征,能够充分表征在当前SQL编码任务下特定编写者的编码特性以及不同编码者的泛化性编码特性,综合该SQL的特定编码特征以及泛化编码特征,先基于特定编码特征进行聚类分析识别出抄袭群体,再通过比较SQL代码的泛化编码特征与其历史泛化编码特征之间的一致性来判定抄袭,能够充分利用SQL代码所展现出的丰富编码特征实现抄袭的自动检测,有效提高自动检测的精度以及效率。
不同编码者在SQL编码过程中会展现出不同的编码特征。以表1为例,表中列出了针对同一道SQL编码任务,即“查询Geology学院所修学分总数超过50的学生信息”,编写者A、B和C给出的SQL代码。从表1可以看出,该三位编写者给出的SQL代码虽然实质上是一样的,但是由于在关键字大小写、代码缩进和换行这三方面因编码习惯不同而存在差异。例如,在关键字大小写书写习惯方面,A习惯采用全小写的方式书写关键字,C习惯采用全大写的方式书写关键字,B则习惯采用首字母大写的方式书写关键字。此外,三位编写者的SQL代码还在代码换行和缩进方面呈现出不同的习惯。可见,编码特征能有效刻画学编写者个体间的差异,有助于辨识出SQL代码的抄袭行为。
为了有效识别抄袭行为,本实施例提取的编码特征包括两类,即特定编码特征和泛化编码特征,其中,特定编码特征,特定编码特征能够反映出编写者在当前编码任务下SQL代码的编码特性,与当前编码任务相关,可依据该特定编码特征发现存在同一编码特性的群体,即存在抄袭现象的抄袭群体;泛化编码特征则能够反映出编写者编写当前SQL代码的泛化编码习惯特性,该特性不与特定编码任务绑定,可以对编写者的SQL编码习惯进行画像。
表1不同编写者存在不同的SQL编码特征
在具体应用实施例中,若应用于对学生提交的SQL习题进行抄袭检测时,对学生提交的SQL代码分别提取特定编码特征和泛化编码特征,其中,特定编码特征即为学生针对某道SQL习题给出的SQL代码所反映出的编码特征,与该SQL习题的特性紧密相关,后续依据特定编码特征可发现该习题的抄袭群体。泛化编码特征则能够反映学生在编写SQL代码时所展现出的泛化性编码习惯,用于对学生的SQL编码习惯进行画像。
本实施例通过分析SQL的语法、句法特性,具体采用如下八类的特定编码特征:
(1)SQL关键字特征。SQL关键字特征即为用于表征SQL标准中指定的关键字使用时所对应的编码特性的特征。SQL关键字是SQL标准中指定的具有特殊含义的单词,例如SELECT、FROM、WHERE等均为SQL关键字。SQL规范中对SQL关键字的大小写不做书写规定。因而,不同编写者在书写SQL关键字时会呈现出不同的关键字书写习惯。SQL关键字书写习惯即可以帮助识别编写者个体的SQL编码特征。
本实施例中SQL关键字特征为基于待检测SQL代码的每个子句按如下定义:1)当子句中以全小写的方式书写关键字时,设置为1;2)当子句中以全大写的方式书写关键字时,设置为2;3)其它方式设置为3。
(2)SCHEMA特征。SCHEMA是数据库的组织和结构,包含表(Table)、列(Column)和视图(View)等数据库对象。SCHEMA特征即为用于表征SCHEMA信息使用时所对应的编码特性的特征。本实施例首先将SQL代码涉及的SCHEMA信息整合为SCHEMA字典,SCHEMA特征即为基于SQL代码的每个子句按如下定义:若子句中出现的SCHEMA信息不在SCHEMA字典中,表明书写的SCHEMA信息存在错误,此时将当前编写者的SCHEMA特征定义为错误SCHEMA信息与SCHEMA字典中与其最相似的元素间的编辑距离乘以该元素的字典序;否则,表明写对了相关SCHEMA信息,则将其SCHEMA特征定义为SCHEMA信息在SCHEMA字典中的字典序与SCHEMA信息在子句中的位置之间的乘积。
(3)函数特征。函数特征即为用于表征使用函数所对应的编码特性的特征,SQL规范中规定了一系列用于完成特定计算的内建函数,基本类型包括Aggregate函数和Scalar函数。其中,Aggregate函数包括AVG、COUNT、MAX等;Scalar函数包括NOW、LEN和MID等。本实施例将SQL规范中定义的内建函数整合为函数字典。本实施例将题函数特征定义为SQL代码的每个子句中所引用的函数在函数字典中的字典序与函数在子句中的位置之间的乘积。
(4)关系运算符特征。关系运算符特征即为用于表征使用关系运算符所对应的编码特性的特征。SQL代码的WHERE子句和JOIN子句中可能存在着一些对关系的判定。对于某个具体的关系判定,不同编写者可能运用不同的关系运算符和关键字给出等价的写法。例如A>10与NOT(A<=10)在判定语义上是等价的。本实施例首先根据SQL规范中给出的关系运算符和关键字生成关系运算符字典,习题关系运算符特征即定义为SQL代码的每个子句中关系运算符在关系运算符字典中的字典序与关系运算符在子句中的位置之间的乘积。
(5)括号特征。括号是SQL中的合法符号,不同编写者编写SQL代码时对括号的使用习惯存在差异,如在当括号不是必需前提下,有些习惯于使用括号,有些则放弃使用括号。括号特征即为用于表征使用括号所对应的编码特性的特征,本实施例中括号特征即定义为SQL代码的每个子句中的每个括号在子句中的位置之和。
(6)空格特征。空格在SQL中被用于分隔词与词。由于空格不存在语义,因此对空格的数量和位置没有固定要求。因而,编写者在编写SQL时对空格的使用习惯存在差异。如在不同编写者可能会在不同的地方使用不同数量的空格,例如利用空格来调整SQL代码的整体格式。空格特征即为用于表征使用空格所对应的编码特性的特征,本实施例中空格特征即定义为SQL代码的每个子句中所有连续空格符序列的基数与连续空格符序列起始位置的乘积之和。
(7)缩进特征。SQL支持编辑时使用缩进符调整一行的起始字母与页面边界之间的距离。SQL中对缩进符的使用习惯因人而异,因而也可作为辨识不同编写者的编码特征。例如,有些编写者在编写SQL时习惯将多个条件判断语句分行列出,并通过缩进符将这些条件判断语句对齐(如表1的C的代码所示)。缩进特征即为用于表征缩进使用时所对应的编码特性的特征,本实施例中缩进特征即定义为SQL代码的每个子句中所有连续缩进符序列的基数与连续空格符序列起始位置的乘积之和。
(8)换行特征。当查询语义较为复杂时,反映该查询语义的SQL代码的篇幅将大幅增加,此时若不对SQL代码进行断句处理则会降低SQL代码的可读性。因此,SQL编写者会使用换行符将SQL代码基于其语义结构分割为若干行。由于换行符的使用位置不影响SQL语句的执行结果,所以换行符的使用习惯也因人而异。换行特征即为用于表征使用换行时所对应的编码特性的特征,本实施例中换行特征定义为SQL代码的每个子句中各个换行符的所在位置之和。
表2子句类型与编码特征的关系
为保证所提取的特定编码特征对于区分编写者个体具有细粒度的辨识度,本实施例先对待检测SQL代码进行子句划分,然后以子句为单位提取各编写者的上述多种特定编码特征,最后将待检测SQL代码中所有子句的编码特征拼接形成对应编写者的特定编码特征向量。
需要说明的是:1)对于SQL代码中相同类型的子句出现多次的情况,则将同类型子句的编码特征进行累加;2)当SQL代码不存在某种类型的子句时,其编码特征向量中与该子句类型对应的所有取值位置全部设置为0。各类SQL子句与其能提取的习题编码特征之间的对应关系详见表2。
本实施例中特定编码特征向量是一个48维的整型向量,具体而言,向量的第1-7维记录了SELECT子句中出现的七类习题编码特征(如表2所示);第8-13维记录了FROM子句中出现的六类习题编码特征;第14-20维记录了WHERE子句中出现的七类习题编码特征;第21-27维记录了JOIN子句中出现的七类习题编码特征;第28-34维记录了GROUP BY子句中出现的七类习题编码特征;第35-42维记录了HAVING子句中出现的八类习题编码特征;第43-48维记录了ORDER BY子句中出现的六类习题编码特征。
上述类型特定编码特征当然也可以根据实际需求选取其中部分特征,还可以引入其他能够表征编写者编码特性的特征以进一步提高检测精度。
本实施例通过提取上述特定编码特征,能够充分结合SQL的语法、句法特性,准确表征不同编写者在SQL代码中所体现出的特定编码特性,便于后续准确筛选出抄袭群体。
与特定编码特征不同,泛化编码特征是对编写者在不同的SQL代码中都将呈现出的编码习惯(即泛化编码习惯)的刻画,用于对编码这的SQL编码习惯进行画像。本实施例中泛化编码特征具体包括以下六类,分别为:
(1)泛化关键字特征。与关键字特征不同,泛化关键字特征只记录编写者在各个SQL子句中针对主关键字的大小写书写特征,而非针对所有关键字的大小写书写特征。首要关键字与SQL子句的类型相关,例如SELECT子句的主关键字是“SELECT”、FROM子句的主关键字是“FROM”。本实施例中泛化关键字特征的赋值规则为:1)当以全小写的方式书写子句的主关键字时,设置为1;2)当以全大写的方式书写子句的主关键字时,设置为2;3)其它方式设置为3。
(2)泛化括号特征。与括号特征不同,泛化括号特征只记录编写者在各类SQL子句中是否使用了括号,而并不需要记录括号在子句中出现的具体位置。
(3)泛化换行特征。与换行特征不同,泛化换行特征只记录编写者在各类SQL子句中是否会对子句进行换行处理,而非记录换行符在子句中的具体位置。
(4)泛化空格特征。与空格特征不同,泛化空格特征只记录编写者在各类SQL子句中是否存在连续使用多于两个空格的情况,而不记录编写者使用空格的具体位置与数量。
(5)泛化缩进特征。与缩进特征不同,泛化缩进特征只记录编写者在各类SQL子句中是否在子句中使用缩进符,而不记录缩进符在子句中的具体位置。
(6)字段名修饰特征。字段名修饰特征记录了编写者在完成单表查询任务的SELECT子句中是否使用了表名对字段进行修饰(即使用table.column的模式对字段进行引用)。由于是否加表名对字段进行修饰并不影响单表查询的查询结果,所以字段名修饰特征能反映出编写者的编码习惯。
本实施例具体使用包含以上六类的泛化编码特征形成泛化编码向量,泛化编码向量是一个36维的整型向量。具体而言,向量的第1-7维记录了编写者对七类SQL子句(参见表2)的主关键字的大小写书写习惯;第8-14维记录了编写者在七类SQL子句中是否使用了括号;第15-21维记录了编写者在七类SQL子句中是否使用了换行符;第22-28维记录了编写者生在七类SQL子句中是否连续使用了多个空格符;第29-35维记录了编写者在七类SQL子句中是否使用了缩进符;第36维记录了编写者在单表查询的SELECT子句中是否使用表名对字段进行修饰。
上述泛化编码特征当然也可以根据实现需求选取其中部分特征,还可以引入其他能够表征编写者泛化编码特性的特征以进一步提高检测精度。
本实施例中步骤S2的具体步骤包括:
S21.将提取得到的所有特定编码特征进行归一化处理,得到处理后的特定编码特征;
S22.对处理后的特定编码特征进行聚类,输出聚类得到的聚类簇;
S23.对得到的聚类簇进行判断,若目标聚类簇中元素的数量超过指定阈值(具体可取1),将目标聚类簇判定为抄袭群体,输出检测到的抄袭群体。
上述步骤S22中采用凝聚式层次聚类算法进行聚类,以得到抄袭群体。
本实施例以特定编码特征向量为输入进行抄袭群体检测,由于特定编码特征向量的各个维度间存在量纲不一致,因此先使用Z-score标准化方法对各特定编码特征向量的各个维度进行了归一化处理,以降低因量纲差异所导致的计算误差;以归一化后的所有特定编码特征向量为输入,并以欧式距离作为向量间的相似性度量函数,最终利用凝聚式层次聚类算法得到抄袭群体:若一个聚类簇中对应包含多个待检测SQL代码,则判定该聚类簇中各待检测SQL代码对应的编写者即为一个抄袭群体。
本实施例步骤S3中,通过比较待检测SQL代码与对应的历史泛化编码特征之间的相似度值,判断待检测SQL代码是否属于抄袭或被抄袭。步骤S3的具体步骤包括:
S31.遍历各个抄袭群体中所有待检测SQL代码,获取一个待检测SQL代码作为当前SQL代码,转入步骤S32;
S32.获取当前SQL代码以及当前SQL代码所对应的编写者的历史泛化编码特征,并计算获取的当前SQL代码与对应的历史泛化编码特征之间的相似度值;
S33.对计算得到的相似度值进行判断,若相似度值超过预设阈值,则判定当前SQL代码为抄袭;否则判定当前SQL代码为被抄袭,并使用泛化编码特征更新当前SQL代码对应编码者的历史泛化编码特征;
S34.取下一个待检测SQL代码作为当前SQL代码,返回步骤S32,直至遍历完抄袭群体中所有待检测SQL代码。
本实施例以泛化编码特征向量为输入,通过比较该向量与基于当前编写者历史提交的SQL代码计算得到历史泛化编码特征向量(即编写者画像)之间的相似度来判定当前编写者是否抄袭其他编写者的代码。若相似度高则表明当前编写者的泛化编码习惯与其历史编码习惯一致,因而判定待检测SQL代码为当前编写者本人撰写,并使用当前待检测SQL代码的泛化编码特征向量对当前编写者画像进行更新;反之则表明当前编写者的泛化编码习惯与其历史编码习惯呈现出较大差异,此时判定待检测SQL代码非当前编写者本人撰写,并将该结果输出。
在具体应用实施例中,历史泛化编码特征向量中每维的取值为当前编写者历史提交的多个SQL代码的泛化编码特征向量中相应维度取值的加权和。具体而言,编写者i的历史泛化编码特征向量中第n维(表示为hgfi[n])的计算方法如公式1所示。
其中,Ln表示基于该生历史提交的多个SQL代码的泛化编码特征向量统计得到的向量在第n维的独特值的个数;vn,l表示第n维的第l个独特值;pn,l则表示第n维的第l个独特值在该维度上的取值占比。
经过上述判断后,进一步以检测出的抄袭群体和泛化特征匹配输出相似性比较结果为输入,区分出抄袭群体中的抄袭者和被抄袭者。其中若抄袭群体中目标泛化编码特征向量与对应编写者历史泛化编码特征向量之间相似度低,则将对应编写者判定为抄袭者;反之,则判定为被抄袭者。
在具体应用实施例中,采用如下算法1实现本发明上述基于编码特征的SQL抄袭检测,该算法以针对某SQL编写任务下所有待检测SQL代码集合Q和所有编写者的历史泛化编码特征向量集合G为输入,输出针对该SQL代码的抄袭检测结果集合D。其中,D中的每个元素为二元组形式<Qi,Ri>:Qi表示第i个编写者针对该习题所提交的SQL代码,Ri则为此SQL代码的抄袭指示标记(Ri=copier表示为抄袭者;Ri=giver表示为被抄袭者)。算法首先遍历Q中的各待检测SQL代码(行2),提取出针对每个编写者的特定编码特征向量(行3)、泛化编码特征向量(行5),并对所有编写者的特定编码特征向量进行归一化处理(行4);然后利用层次聚类方法对归一化后的所有特定编码特征向量进行聚类分析,从而得到聚类簇集合groups(行6);之后,遍历groups中的每一个簇,当簇内包含多个编写者时,将该簇加入抄袭群体集合PlagiarismGroups中(行8-10)。对于每个抄袭群体中的编写者(行11-12),首先读取当前编写者的历史泛化编码特征(行13)和针对当前SQL编码任务下的泛化编码特征(行14),再使用欧氏距离计算泛化编码特征efi与其历史泛化编码特征hgfi之间的相似度(行15);若相似度不大于阈值θ,则判定为抄袭者,并将检测结果添加至抄袭检测结果集D中(行16-17);若相似度大于阈值,则判定为被抄袭者,将检测结果添加至D的同时使用gfi更新对应编写者的历史泛化编码特征(行18-20)。最后,算法返回抄袭检测结果集D(行21)。
本实施例进一步对上述抄袭检测算法的时空复杂度进行分析,上述检测算法中主要计算代价在于对所有特定编码特征进行层次聚类,因此算法时间复杂度为O(|Q|3log|Q|)。其中,|Q|是待检测答案集合Q的基数。该算法的空间复杂度主要来自于层次聚类中对邻近度矩阵存储,邻近度矩阵存放的是层次聚类中每个簇间的距离,故算法的空间复杂度为O(|Q|2)。
为了验证本发明基于编码特征的SQL代码抄袭检测方法SQL-Detector的有效性,本实施例分别使用本发明上述SQL-Detector方法与传统检测方法的检测精度进行了实验以及对比,其中,传统检测方法1为提取SQL代码的关键字大小写等部分编码特征来生成特征矩阵,继而通过比较当前代码的特征矩阵与该生历史特征矩阵间的Jaccard相似度来判定代码是否存在抄袭行为,传统检测方法2(JPlag技术)为将需要比对的两组SQL代码解析为Token集合,然后基于贪婪式字符串匹配算法计算两组Token集合间的相似度,从而发现代码间的抄袭行为。收集284名编写者对于同一SQL编码任务(SQL编码习题)下的SQL代码作为实验数据集,实验数据集的详细信息如表3所示。为了评估不同方法对于SQL代码抄袭检测的精确度,先人工对数据集中的SQL代码是否存在抄袭行为进行标注:存在抄袭行为标记为1;反之则标记为0。
表3实验数据集详细信息
为了便于与其它方法进行比较,实验中将本发明SQL-Detector检测为‘copier’或‘giver’的SQL代码都标记为1(即涉及抄袭行为)。实验评价指标包括查准率、查全率和F1值,其中查准率(Precision)表示预测为正的样例占真实正样例的比率,其计算方法如公式2所示:
其中,TP、FP、TN和FN分别表示真正例(True Positive)、假正例(FalsePositive)、真反例(True Negative)和假反例(False Negative),且样例总数(即后文中的Total)为以上四种样例的数目之和。
查全率(Recall)表示正例被正确预测的比率,其计算方法如公式3所示:
F1值则同时兼顾了查准率和查全率,被定义为查准率和查全率的调和平均数,其计算方法如公式4所示:
由于本发明SQL-Detector方法中的特定编码特征聚类是基于预设的相似度阈值实现对所有特定编码特征向量的聚类分析。相似度阈值的设定会影响到聚类结果的质量,进而影响到对抄袭检测群体的识别质量。因此,本实施例首先对特定编码特征聚类时使用的相似度阈值进行实验分析。表4展示了不同相似度阈值下本发明SQL-Detector方法的抄袭检测结果的F1值。如表4所示,随着相似度阈值增大,F1值呈现出增大的趋势,这是因为过小的阈值会导致聚类簇的数量过多,因此不能有效识别特定编码特征具有较大差异的抄袭行为。当相似度阈值超过0.8时,F1值则出现了下降趋势,这是因为过大的阈值会导致本身不具备抄袭现象的SQL代码被聚为一类,从而引发了误判。因此本实施例在实验比较中将本发明SQL-Detector方法中聚类所依赖的相似度阈值统一设置为0.8。
表4不同相似度阈值下的F1值
上述表5展示了对于每道SQL习题,三种SQL抄袭检测方法对SQL代码的抄袭检测精确度,具体涉及查准率、查全率和F1值这三项指标。由表5可知,传统检测方法2(JPlag技术)的F1值最低,对12道SQL习题的抄袭检测结果的F1均值仅为41.8%,这是因为JPlag技术仅通过比较SQL代码之间的字符串相似性来发现抄袭行为,而没能利用辨识度更高的、能反映SQL语法、句法特性的编码特征来实现抄袭检测,最终导致了较高的误判率。传统检测方法1由于利用了SQL语义下部分编码特征来辨识抄袭行为,因而抄袭检测结果的F1均值(即73.0%)比JPlag技术提高了74.4%。可见,基于编码特征的SQL抄袭检测方式比传统仅基于字符串匹配的SQL抄袭检测方式在抄袭行为辨识力方面更具优势。
同时从表5易知,本发明SQL-Detector方法取得了比传统检测方法1更好的检测精确度,其针对12道SQL习题的查准率、查全率和F1值均优于传统检测方法1。特别地,本发明SQL-Detector方法针对12道SQL习题的F1均值达到了83.2%,相较于传统检测方法1的检测结果提高了14%。本发明SQL-Detector方法的优势来自于:1)从SQL的语法、句法特性出发,抽取并利用了比传统检测方法1更丰富的特定编码特征来辨识抄袭行为;2)不仅通过比较待检测SQL代码的编码特征和历史编码特征之间的差异来识别抄袭,而且通过对待检测SQL代码的所有编码者的编码特征进行聚类分析来发现抄袭群体,即利用同一SQL编码任务下SQL代码相似性分析来提高了抄袭检测的精确度。即本发明从具体编程语言特性出发来定义和利用编码特征,以及在抄袭检测流程中同时考虑同一编写者的编码特征的历史一致性和当前SQL编码任务下不同编写者编码特征之间的相似性,能够有效提高面向特定SQL编程语言的代码抄袭检测精确度。
表5 SQL习题抄袭检测精确度分析
为实现上述方法,本实施例还提供基于编码特征的SQL代码抄袭检测系统,包括:
编码特征提取模块,用于输入指定编码任务下所有的待检测SQL代码,分别提取出各待检测SQL代码中用于表征编写者在当前SQL编码任务下编码特性的特定编码特征,以及提取用于表征不同编写者在当前SQL编码任务下所展现出的泛化性编码特性的泛化编码特征;
抄袭群体检测模块,用于将提取得到的所有特定编码特征进行聚类,根据聚类结果确定得到抄袭群体,将所述特定编码特征属于同一类的待检测SQL代码作为一个抄袭群体;
泛化特征匹配模块,用于分别获取抄袭群体中各待检测SQL代码进行判断,判断时将待检测SQL代码的泛化编码特征与待检测SQL代码所对应的编写者的历史泛化编码特征进行比较,历史泛化编码特征为使用对应编写者多个历史SQL代码数据提取得到的泛化编码特征,根据判断结果判定待检测SQL代码是否属于抄袭或被抄袭;
抄袭检测输出模块,用于将各抄袭群体中各待检测SQL代码的抄袭判定结果输出。
本实施例中,抄袭群体检测模块包括:
归一化处理单元,用于将提取得到的所有特定编码特征进行归一化处理,得到处理后的特定编码特征;
聚类单元,用于对所述处理后的特定编码特征进行聚类,输出聚类得到的聚类簇;
判断单元,用于对得到的所述聚类簇进行判断,若目标聚类簇中元素的数量超过指定阈值,将目标聚类簇判定为所述抄袭群体,输出检测到的抄袭群体。
本实施例泛化特征匹配模块具体通过比较待检测SQL代码与对应的历史泛化编码特征之间的相似度值,判断待检测SQL代码是否属于抄袭或被抄袭。泛化特征匹配模块具体包括:
获取单元,用于遍历各个所述抄袭群体中所有待检测SQL代码,获取一个待检测SQL代码作为当前SQL代码,转入相似度计算单元;
相似度计算单元,用于获取当前SQL代码以及当前SQL代码所对应的编写者的历史泛化编码特征,并计算获取的当前SQL代码与对应的所述历史泛化编码特征之间的相似度值;
判定单元,用于对计算得到的所述相似度值进行判断,若所述相似度值超过预设阈值,则判定当前SQL代码为抄袭;否则判定当前SQL代码为被抄袭,并使用所述泛化编码特征更新当前SQL代码对应编码者的历史泛化编码特征;
取下一个待检测SQL代码作为当前SQL代码,返回相似度计算单元,直至遍历完所述抄袭群体中所有待检测SQL代码。
本实施例基于编码特征的SQL代码抄袭检测系统与上述基于编码特征的SQL代码抄袭检测方法为一一对应,在此不再一一赘述。
本发明可以应用于实现对学生提交的针对SQL习题的SQL代码的抄袭检测,如图3所示,当在具体应用实施例中应用于实现对学生SQL习题的抄袭检测时,如图3所示,各模块原理如下:
编码特征提取模块:该模块以学生提交的SQL代码为输入分别提取学生的习题编码特征和泛化编码特征。其中,学生习题编码特征为学生针对某道SQL习题给出的SQL代码所反映出的编码特征,与该SQL习题的特性紧密相关,学生习题编码特征用于发现该习题的抄袭群体。学生泛化编码特征则反映了学生在编写SQL代码时所展现出的泛化性编码习惯,用于对学生的SQL编码习惯进行画像,从而判定学生是否为抄袭者:若学生的泛化编码特征与其历史编码特征不一致,则可能为抄袭者。
基于习题编码特征的抄袭群体检测模块:该模块以经过标准化处理后的所有学生的习题编码特征(表示为学生的习题编码特征集合)为输入,之后通过层次聚类算法对学生的习题编码特征集合进行聚类分析,以检测出抄袭群体。
基于泛化编码特征的学生画像匹配模块:该模块将学生当前提交的SQL代码的泛化编码特征与该生的历史泛化编码特征(即该生的画像)进行相似性匹配:若相似则认为该生当前提交的SQL代码为本人撰写,继而使用该生当前提交的SQL代码的泛化编码特征对该生的历史泛化编码特征进行更新;反之则认为该生当前提交的SQL代码可能存在抄袭行为。若相似度高则表明该生的泛化编码习惯与其历史编码习惯一致,因而认为待检测SQL代码为该生本人撰写,并使用该生待检测SQL代码的泛化编码特征向量对该生画像进行更新;反之则表明该生的泛化编码习惯与其历史编码习惯呈现出较大差异,此时判定待检测SQL代码非该生本人撰写,并将该结果报送给抄袭检测模块。
抄袭检测输出模块:该模块以抄袭群体检测模块输出的抄袭群体和泛化特征匹配模块输出的匹配结果为输入对学生的抄袭行为进行识别,以区分抄袭群体中的抄袭者和被抄袭者,对于存在于某抄袭群体中的学生:若该生当前提交的SQL代码的泛化编码特征与其历史画像间的相似度不大于某阈值,则将该生判定为抄袭者;反之,若该生的泛化编码特征与其历史画像间的相似度大于该阈值,则将该生判定为被抄袭者。
本发明除可以应用于对学生的SQL习题抄袭进行自动检测,当然还可以应用于其他需要对同一SQL编码任务下众多编写者的SQL代码进行抄袭检测的各类型应用中。
在其他实施例中,本发明基于编码特征的SQL代码抄袭检测系统还可以为:包括处理器以及存储器,存储器用于存储计算机程序,处理器用于执行计算机程序,处理器用于执行计算机程序,以执行上述基于编码特征的SQL代码抄袭检测方法。
本实施例还包括一种存储有计算机程序的计算机可读存储介质,计算机程序执行时实现如基于编码特征的SQL代码抄袭检测方法。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (8)
1.一种基于编码特征的SQL代码抄袭检测方法,其特征在于,步骤包括:
S1.编码特征提取:输入指定编码任务下所有的待检测SQL代码,分别提取出各待检测SQL代码中用于表征编写者在当前SQL编码任务下编码特性的特定编码特征,以及提取用于表征编写者在当前SQL编码任务下所展现出的泛化性编码特性的泛化编码特征,所述特定编码特征包括SQL关键字特征、SCHEMA特征、函数特征、关系运算符特征、括号特征、空格特征、缩进特征、换行特征中任意一种或两种以上的组合,所述SQL关键字特征为用于表征SQL标准中指定的关键字使用时所对应的编码特性的特征,所述SCHEMA特征为用于表征SCHEMA信息使用时所对应的编码特性的特征,所述函数特征为用于表征使用函数所对应的编码特性的特征,所述关系运算符特征为用于表征使用关系运算符所对应的编码特性的特征,所述括号特征为用于表征使用括号所对应的编码特性的特征,所述空格特征为用于表征使用空格所对应的编码特性的特征,所述缩进特征为用于表征缩进使用时所对应的编码特性的特征,所述换行特征为用于表征使用换行时所对应的编码特性的特征;
所述泛化编码特征包括泛化关键字特征、泛化括号特征、泛化换行特征、泛化空格特征、泛化缩进特征、字段名修饰特征中任意一种或两种以上的组合,所述泛化关键字特征用于记录编写者在各个SQL子句中针对主关键字的大小写书写特征,所述泛化括号特征用于只记录编写者在各类SQL子句中是否使用了括号,所述泛化换行特征用于只记录编写者在各类SQL子句中是否会对子句进行换行处理,所述泛化空格特征用于只记录编写者在各类SQL子句中是否存在连续使用多于两个空格的情况,所述泛化缩进特征用于只记录编写者在各类SQL子句中是否在子句中使用缩进符,所述字段名修饰特征用于记录编写者在完成单表查询任务的SELECT子句中是否使用了表名对字段进行修饰;
S2.抄袭群体检测:将提取得到的所有特定编码特征进行聚类,根据聚类结果确定得到抄袭群体,将所述特定编码特征属于同一类的待检测SQL代码作为一个抄袭群体;
S3.泛化特征匹配:分别获取所述抄袭群体中各待检测SQL代码进行判断,判断时将待检测SQL代码的泛化编码特征与待检测SQL代码所对应的编写者的历史泛化编码特征进行比较,所述历史泛化编码特征由对应编写者多个历史SQL代码数据提取得到的泛化编码特征计算得到,根据判断结果判定待检测SQL代码是否属于抄袭或是被抄袭;
S4.抄袭检测输出:将各所述抄袭群体中各待检测SQL代码的抄袭判定结果输出。
2.根据权利要求1所述的基于编码特征的SQL代码抄袭检测方法,其特征在于,所述步骤S2的步骤包括:
S21.将提取得到的所有特定编码特征进行归一化处理,得到处理后的特定编码特征;
S22.对所述处理后的特定编码特征进行聚类,输出聚类得到的聚类簇;
S23.对得到的所述聚类簇进行判断,若目标聚类簇中元素的数量超过预设阈值,将目标聚类簇判定为所述抄袭群体,输出检测到的抄袭群体。
3.根据权利要求2所述的基于编码特征的SQL代码抄袭检测方法,其特征在于,所述步骤S22中采用凝聚式层次聚类算法进行聚类。
4.根据权利要求1所述的基于编码特征的SQL代码抄袭检测方法,其特征在于,所述步骤S3中,通过比较待检测SQL代码与对应的历史泛化编码特征之间的相似度值,判断待检测SQL代码是否属于抄袭或是被抄袭。
5.根据权利要求4所述的基于编码特征的SQL代码抄袭检测方法,其特征在于,所述步骤S3的具体步骤包括:
S31.遍历各个所述抄袭群体中所有待检测SQL代码,获取一个待检测SQL代码作为当前SQL代码,转入步骤S32;
S32.获取当前SQL代码以及当前SQL代码所对应的编写者的历史泛化编码特征,并计算获取的当前SQL代码与对应的所述历史泛化编码特征之间的相似度值;
S33.对计算得到的所述相似度值进行判断,若所述相似度值超过预设阈值,则判定当前SQL代码为抄袭;否则判定当前SQL代码为被抄袭,并使用所述泛化编码特征更新当前SQL代码对应编码者的历史泛化编码特征;
S34.取下一个待检测SQL代码作为当前SQL代码,返回步骤S32,直至遍历完所述抄袭群体中所有待检测SQL代码。
6.一种基于编码特征的SQL代码抄袭检测系统,其特征在于,包括:
编码特征提取模块,用于输入指定编码任务下所有的待检测SQL代码,分别提取出各待检测SQL代码中用于表征编写者在当前SQL编码任务下编码特性的特定编码特征,以及提取用于表征编写者在当前SQL编码任务下所展现出的泛化性编码特性的泛化编码特征,所述特定编码特征包括SQL关键字特征、SCHEMA特征、函数特征、关系运算符特征、括号特征、空格特征、缩进特征、换行特征中任意一种或两种以上的组合,所述SQL关键字特征为用于表征SQL标准中指定的关键字使用时所对应的编码特性的特征,所述SCHEMA特征为用于表征SCHEMA信息使用时所对应的编码特性的特征,所述函数特征为用于表征使用函数所对应的编码特性的特征,所述关系运算符特征为用于表征使用关系运算符所对应的编码特性的特征,所述括号特征为用于表征使用括号所对应的编码特性的特征,所述空格特征为用于表征使用空格所对应的编码特性的特征,所述缩进特征为用于表征缩进使用时所对应的编码特性的特征,所述换行特征为用于表征使用换行时所对应的编码特性的特征;
所述泛化编码特征包括泛化关键字特征、泛化括号特征、泛化换行特征、泛化空格特征、泛化缩进特征、字段名修饰特征中任意一种或两种以上的组合,所述泛化关键字特征用于记录编写者在各个SQL子句中针对主关键字的大小写书写特征,所述泛化括号特征用于只记录编写者在各类SQL子句中是否使用了括号,所述泛化换行特征用于只记录编写者在各类SQL子句中是否会对子句进行换行处理,所述泛化空格特征用于只记录编写者在各类SQL子句中是否存在连续使用多于两个空格的情况,所述泛化缩进特征用于只记录编写者在各类SQL子句中是否在子句中使用缩进符,所述字段名修饰特征用于记录编写者在完成单表查询任务的SELECT子句中是否使用了表名对字段进行修饰;
抄袭群体检测模块,用于将提取得到的所有特定编码特征进行聚类,根据聚类结果确定得到抄袭群体,将所述特定编码特征属于同一类的待检测SQL代码作为一个抄袭群体;
泛化特征匹配模块,用于分别获取所述抄袭群体中各待检测SQL代码进行判断,判断时将待检测SQL代码的泛化编码特征与待检测SQL代码所对应的编写者的历史泛化编码特征进行比较,所述历史泛化编码特征由对应编写者多个历史SQL代码数据提取得到的泛化编码特征计算得到,根据判断结果判定待检测SQL代码是否属于抄袭或被抄袭;
抄袭检测输出模块,用于将各所述抄袭群体中各待检测SQL代码的抄袭判定结果输出。
7.一种基于编码特征的SQL代码抄袭检测系统,包括处理器以及存储器,所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序,其特征在于,所述处理器用于执行所述计算机程序,以执行如权利要求1~5中任意一项所述方法。
8.一种存储有计算机程序的计算机可读存储介质,所述计算机程序执行时实现如权利要求1~5中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110096859.7A CN112764809B (zh) | 2021-01-25 | 2021-01-25 | 基于编码特征的sql代码抄袭检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110096859.7A CN112764809B (zh) | 2021-01-25 | 2021-01-25 | 基于编码特征的sql代码抄袭检测方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112764809A CN112764809A (zh) | 2021-05-07 |
CN112764809B true CN112764809B (zh) | 2022-07-05 |
Family
ID=75707102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110096859.7A Active CN112764809B (zh) | 2021-01-25 | 2021-01-25 | 基于编码特征的sql代码抄袭检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112764809B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114003229B (zh) * | 2021-09-28 | 2022-10-18 | 厦门国际银行股份有限公司 | 一种sql代码相似度分析方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398758A (zh) * | 2008-10-30 | 2009-04-01 | 北京航空航天大学 | 一种代码抄袭的检测方法 |
CN102591976A (zh) * | 2012-01-04 | 2012-07-18 | 复旦大学 | 基于句子级别的文本特征提取方法和文档拷贝检测系统 |
CN103678528A (zh) * | 2013-12-03 | 2014-03-26 | 北京建筑大学 | 基于段落抄袭检测的电子作业反抄袭系统和方法 |
EP3281144A1 (en) * | 2015-04-10 | 2018-02-14 | Phishme, Inc. | Message report processing and threat prioritization |
CN109165040A (zh) * | 2018-07-04 | 2019-01-08 | 东华大学 | 一种基于随机森林模型的代码抄袭嫌疑检测的方法 |
-
2021
- 2021-01-25 CN CN202110096859.7A patent/CN112764809B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398758A (zh) * | 2008-10-30 | 2009-04-01 | 北京航空航天大学 | 一种代码抄袭的检测方法 |
CN102591976A (zh) * | 2012-01-04 | 2012-07-18 | 复旦大学 | 基于句子级别的文本特征提取方法和文档拷贝检测系统 |
CN103678528A (zh) * | 2013-12-03 | 2014-03-26 | 北京建筑大学 | 基于段落抄袭检测的电子作业反抄袭系统和方法 |
EP3281144A1 (en) * | 2015-04-10 | 2018-02-14 | Phishme, Inc. | Message report processing and threat prioritization |
CN109165040A (zh) * | 2018-07-04 | 2019-01-08 | 东华大学 | 一种基于随机森林模型的代码抄袭嫌疑检测的方法 |
Non-Patent Citations (5)
Title |
---|
A review: Knowledge reasoning over knowledge graph;Xiaojun Chen 等;《Expert Systems with Applications》;20200331;第141卷;1-12 * |
Plagiarism detection in SQL student assignments;Nick Scerbakov 等;《ICL 2017: Teaching and Learning in a Digital World》;20180210;110-115 * |
一种基于编码习惯的SQL语句抄袭检测算法;葛文馨 等;《软件》;20191130;第40卷(第1期);4-8 * |
基于EMD距离的数据流分布式相似性连接技术;许嘉 等;《计算机学报》;20190831;第42卷(第8期);1779-1796 * |
软件抄袭检测研究综述;田振洲等;《信息安全学报》;20160715(第03期);56-80 * |
Also Published As
Publication number | Publication date |
---|---|
CN112764809A (zh) | 2021-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
US7711736B2 (en) | Detection of attributes in unstructured data | |
CN112214610B (zh) | 一种基于跨度和知识增强的实体关系联合抽取方法 | |
US7302426B2 (en) | Expanding a partially-correct list of category elements using an indexed document collection | |
US7814111B2 (en) | Detection of patterns in data records | |
US7529731B2 (en) | Automatic discovery of classification related to a category using an indexed document collection | |
US6983345B2 (en) | Associative memory | |
US7558792B2 (en) | Automatic extraction of human-readable lists from structured documents | |
CN110502621A (zh) | 问答方法、问答装置、计算机设备及存储介质 | |
CN112035730B (zh) | 一种语义检索方法、装置及电子设备 | |
CN111639171A (zh) | 一种知识图谱问答方法及装置 | |
US20210224332A1 (en) | Chart question answering | |
CN107180026B (zh) | 一种基于词嵌入语义映射的事件短语学习方法及装置 | |
WO2018090468A1 (zh) | 视频节目的搜索方法和装置 | |
CN112307182A (zh) | 一种基于问答系统的伪相关反馈的扩展查询方法 | |
CN113806493A (zh) | 一种用于互联网文本数据的实体关系联合抽取方法、装置 | |
CN112764809B (zh) | 基于编码特征的sql代码抄袭检测方法及系统 | |
CN101369285B (zh) | 一种中文搜索引擎中查询词的拼写校正方法 | |
CN112101029B (zh) | 一种基于bert模型的高校导师推荐管理方法 | |
CN113377844A (zh) | 面向大型关系型数据库的对话式数据模糊检索方法及装置 | |
CN116737758A (zh) | 一种数据库查询语句的生成方法、装置、设备及存储介质 | |
CN106776590A (zh) | 一种获取词条译文的方法及系统 | |
CN115828854A (zh) | 一种基于上下文消歧的高效表格实体链接方法 | |
CN115952277A (zh) | 基于知识关系检索增强方法、模型、设备及存储介质 | |
CN115033659A (zh) | 基于深度学习的子句级自动摘要模型系统及摘要生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |