推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

Python程序代码相似度检测

更新时间:2019-12-30 09:48:05 大小:423K 上传用户:songhuahua查看TA发布的资源 标签:python 下载积分:1分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

代码剽窃是程序语言课程中经常出现的一种作弊行为,严重破坏正常的教学秩序。检测剽窃的程序代码、验证学生程序作业的原创性在程序语言教学中就尤为重要。结合程序代码相似度检测技术中的属性计数技术和结构度量技术,提出一种适用于Python程序的相似度检测方法,该方法能够有效地计算出学生Python程序作业之间的相似度。


部分文件列表

文件名 大小
Python程序代码相似度检测.pdf 423K

【关注B站账户领20积分】

部分页面预览

(完整内容请下载后查看)
实践与经验  
文章编号  
( ꢀ  
1007-1423 2014 34-0030-03  
DOI 10.3969/jꢀissnꢀ1007ꢁ1423ꢀ2014ꢀ34ꢀ009  
程序代码相似度检测  
Python  
赵明洪 张太红 王正敏  
, ,  
新疆农业大学计算机与信息工程学院 乌鲁木齐  
830052  
摘要  
代码剽窃是ꢀ序语言课程中经常出现的一种作弊行为 严重破坏正常的教学秩序 检测剽窃的程序ꢁ码 验证学生ꢀ  
, 。 、  
序作业的原创性在ꢀ序语言教学中就尤为重要 结合ꢀ序ꢁ码相似度检测技术中的属性ꢂ数技术和结构ꢃ量技术 提出  
。 ,  
一种适用于  
ꢀ序的相似度检测方法 该ꢄ法能够有效地ꢂ算ꢅ学生  
ꢀ序作业之间的相似度  
Python  
Python  
关键词  
剽窃  
相似度  
Python  
思想ꢂꢀ序的一些属性 然后再进行处理 而不考  
, ,  
引言  
0
[2]  
ꢀ序的内部属性技术ꢍ的ꢀ序属性选定主要  
是一种很流行的开源编ꢀ语言 可以在很  
Python  
有 数组ꢀ数 自变量ꢀ数 关键字ꢀ符ꢀ  
: 、 、 、  
多领域中编写独立的ꢀ序ꢆ脚本  
具有免费 ꢇ  
Python  
技术要是通对ꢀ序的内部进行  
移植 功ꢈ强ꢉ 通用性好这些特点 而且使用起来相当  
、 、 ,  
[3]  
分析比较判断两段ꢀ序ꢁ码的相似性 结技  
容易 它广泛应用于游戏编ꢀ 网络编ꢀ  
。 、  
编ꢀ  
Windows  
术的常用ꢀ序结选ꢁ主构  
: 、  
多媒体 图形用户界面 企业与政务应用等诸多方ꢊ  
、 、  
循环构 函数  
因为  
的这些优点  
已经备受广ꢋ企  
Python  
Python  
程序ꢀ码相似ꢁ检测方法的设ꢂ  
业ꢆ编ꢀ者的喜爱 而且国内外的许多高校也已经把  
2
Python  
作为编ꢀ入门的基础ꢀ序语言 然而因为信息  
Python  
本文提出的ꢀ序ꢁ码相似度检测方ꢍ要是结合  
属性ꢂ数ꢍꢆ结技术的技术理念 利用正则  
技术的发展 从互联网上获取ꢀ序资源也越来越方便  
ꢆ快捷 有些学生可以直接从网上查找相关ꢀ序或者  
表达式提取出ꢈꢁ表  
ꢀ序ꢁ码的特征向量  
Python  
从同学那里直接复制ꢀ序进行作业提交 所以ꢀ序ꢁ  
后再对特征向量进行加权处理 最后利  
码的相似度检测在ꢀ序语言的教学中就ꢌ有非凡的意  
向量相似度度方ꢍ对加权后的特征向量进行相似  
但是ꢀ序ꢁ码并不像普通文本那样特别的规范 而  
度的ꢂ算 出一相似度ꢀ值就可以ꢁ表两ꢀ  
, ,  
且对于不同编ꢀ语言 各自的语ꢍ规则也有许多差异  
ꢀ序的相似度 整ꢀ  
ꢀ序相似度检测系  
Python  
Python  
ꢀ序ꢁ码的相似度就很用一个统一的标准ꢆ方  
构架如图 所示  
1
ꢍ来衡量 所以本文提出并一种适用于  
Python  
个ꢀꢁꢂꢃꢄꢅ  
ꢆꢊꢋꢌ  
ꢍꢎꢏ  
个ꢀꢁꢂꢃꢄꢅ  
ꢆꢇꢈꢉ  
ꢊꢋꢌꢍ ꢊꢋꢌꢍꢒ  
ꢐꢑ ꢓꢔꢕꢖ  
ꢀ序ꢂ语言的ꢁ码相似度检测方ꢍ  
程序ꢀ码相似ꢁ检测相关技术  
1
1
目前 外对ꢀ序ꢁ码相似度检测的技术要  
ꢃ序代码特征向量的生成  
3
有属性ꢂ数技术ꢆ结技术 属性ꢂ数技术是最  
先被提出ꢆ使用的ꢀ序ꢁ码抄袭检测技术 它的要  
ꢀ序ꢁ码的特征向量要ꢈ准确地ꢁꢀ  
Python  
趦  
现代计算机  
2014.12  
实践与经验  
程序 特征向量里面的ꢀ征必须根据  
处ꢌ过的  
ꢂ序代ꢋ进行ꢀ征ꢃ比对 提取出当  
Python  
Pyꢀhon  
ꢂyꢀhon  
言的词法ꢀ性和语法ꢀ性合理地选取 而且在ꢀ征的  
源ꢈ序代ꢋ中对应ꢀ征ꢃ的个数 生ꢏ一个  
ꢂyꢀhon  
提取之前 还得把ꢁ序中与ꢀ征提取无关的冗余信息  
与该  
源ꢈ序代ꢋ所对应的ꢀ征向量  
ꢂyꢀhon  
去除掉 防止提取ꢀ征时冗余信息的干扰 最后再对处  
, 。  
2
理后的ꢁ序代码提取ꢀ征 生成对应的ꢀ征向量  
ꢀꢁꢆꢇ  
ꢈꢉꢌꢇ  
ꢅꢆꢇ  
ꢈꢉꢊꢋꢌꢇ  
ꢀꢁꢂꢃꢄꢅꢆ ꢄꢇꢈꢉꢀꢁꢂꢃꢄꢅꢈꢉꢇꢆ ꢊꢋꢌꢍꢍꢆ ꢄꢇꢈꢉꢊꢋꢌꢍꢍꢈꢉꢇꢆ  
ꢎꢏꢐꢆ ꢄꢇꢈꢉꢎꢏꢐꢈꢉꢇꢆ ꢀꢐꢆꢑꢆꢏꢋꢀꢐꢆ ꢄꢇꢈꢉꢀꢐꢈꢉꢒꢈꢉꢏꢋꢀꢐꢈꢉꢇꢆ  
ꢏꢋꢍꢏꢆ ꢄꢇꢈꢉꢏꢋꢍꢏꢈꢉꢇꢆ ꢐꢃꢄꢆ ꢄꢇꢈꢉꢐꢃꢄꢈꢉꢇꢆ  
ꢓꢔꢀꢋꢏꢆ ꢄꢇꢈꢉꢓꢔꢀꢋꢏꢈꢉꢇꢆ ꢕꢆ ꢄꢇꢈꢕꢇꢆ  
ꢖꢆ ꢄꢇꢈꢖꢇꢆ ꢗꢆ ꢄꢇꢈꢗꢇꢆ  
ꢆꢘꢆ ꢄꢇꢘꢇꢆ ꢙꢆ ꢄꢇꢙꢇꢆ  
ꢚꢆ ꢄꢇꢛꢜꢚꢝꢚꢛꢜꢚꢝꢇꢆ ꢆꢚꢚꢆ ꢄꢇꢚꢚꢇꢆ  
ꢞꢆ ꢄꢇꢞꢇꢆ  ꢆ ꢄꢇ ꢇꢆ  
ꢌ!ꢎꢆ ꢄꢇꢈꢉꢌ!ꢎꢈꢉꢇꢆ ꢃꢄꢆ ꢄꢇꢈꢉꢃꢄꢈꢉꢇꢆ  
!ꢃꢅꢆ ꢄꢇꢈꢉ!ꢃꢅꢈꢉꢇꢆ ꢆ"ꢄ#ꢏꢆ ꢄꢇꢈꢉ"ꢄ#ꢏꢈꢉꢇꢆ  
ꢆ$ꢌꢋꢍꢏꢆ ꢄꢇꢈꢉ$ꢌꢋꢍꢏꢈꢉꢇꢆ %ꢃ!ꢏꢆ ꢄꢇꢈꢉ%ꢃ!ꢏꢈꢉꢇꢆ  
&ꢆ ꢄꢇꢈ&ꢇꢆ 'ꢆ ꢄꢇ'ꢇꢆ  
(ꢆ ꢄꢇꢈ(ꢇꢆ ꢆꢇꢆꢑꢆ)ꢆ ꢄꢇꢈꢇꢒꢈ)ꢇꢆ  
ꢛꢆꢑꢆꢝꢆ ꢄꢇꢈꢛꢒꢈꢝꢇꢆ *ꢆꢑꢆ+ꢆ ꢄꢇꢈ*ꢒꢈ+ꢇꢆ  
,ꢆꢑꢆ-ꢆ ꢄꢇꢈ,ꢒꢈ-ꢇꢆ ꢀ!ꢆ ꢄꢇꢈꢉꢀ!ꢈꢉꢇꢆ  
ꢀꢍꢆ ꢄꢇꢈꢉꢀꢍꢈꢉꢇꢆ ꢄꢏꢅ#ꢄ!ꢆ ꢄꢇꢈꢉꢄꢏꢅ#ꢄ!ꢈꢉꢇꢆ  
本系统主要是提取  
ꢂ序里面的ꢃ来作为  
Pyꢀhon  
ꢂ序的ꢀ征ꢃ 系统ꢄ的  
是指  
”、  
Pyꢀhon  
class  
”、ꢀ ” ꢀ ”  
if  
等这些  
语言的基ꢅ语法要素  
def  
=
ꢁyꢀhon  
全部  
个 ꢃ 如表 所示 其实  
ꢀ ”, 。  
1
语言的基本  
32  
ꢂyꢀhon  
语法要素并不止表  
个 因此这个ꢃ汇ꢆ并不是  
1
32  
绝对的 日后可以在具体的实践运用中根ꢇ需要对其  
扩充  
1
的ꢀꢅ  
ꢆꢇꢉꢅ  
ꢅ  
ꢂꢃꢅ  
ꢀꢁꢂꢃ ꢄꢂꢃꢅꢃꢁꢆꢄꢂꢃ ꢇꢈꢉꢃ ꢃꢊꢋꢌꢁꢃ  
ꢁꢆꢍꢁꢃ ꢂꢈꢋꢃ ꢃꢎꢏꢆꢍꢁꢃ ꢐꢈꢇꢁꢃ  
ꢑꢒꢄꢆꢁꢃ ꢓꢃ ꢔꢃ ꢕꢃ  
ꢖꢃ ꢗꢃ ꢘꢃ ꢃꢙꢃꢅꢃꢚꢃ  
ꢃꢛꢃ ꢜꢃ ꢝꢃꢅꢃꢞꢃ  ꢃꢅꢃ!ꢃ  
"ꢃ ꢃ""ꢃ #ꢃꢅꢃ$ꢃ ꢄꢇꢃ  
%ꢃ &ꢃ ꢄꢍꢃ ꢋꢁꢉꢌꢋꢇꢃ  
程序代码特征向量加权  
4
所列的每一个ꢀ征ꢃ在  
语言中的重要  
3
ꢂyꢀhon  
性都是ꢊ同的 所以 ꢊ能简单地用这些ꢀ征ꢃ在一个  
ꢂ ,  
ꢈ序中出现的次数所构ꢐ的ꢀ征向ꢎ来代ꢆ这  
ꢂyꢀhon  
ꢈ序 因此 ꢑ须根ꢇ每一个ꢀ征ꢃ在  
ꢂ ,  
ꢂyꢀhon  
语言中的重要性来对ꢀ征向ꢎ中的每一个元素进行加  
权处ꢌ 突显出每一个ꢀ征ꢃ的重要性 ꢅ系统选用逆  
ꢂyꢀhon  
对于一个  
ꢈ序 ꢈ序里的一些冗余信息可  
Pyꢀhon  
能会对ꢈ序ꢀ征的提取有影响 例如 注释 头文件 空  
, : 、 、  
格和空行等 所以在ꢂ序ꢀ征的ꢀ征提取之前 首先得  
ꢂ ,  
向文档频率  
对ꢀ征向量进行加权  
IDF  
去ꢉ掉ꢂ序代码中对ꢀ征提取有影响的冗余信息  
在逆向文档频率方法中 每一个ꢀ征ꢃ相对于某  
个过ꢂꢊ仅可以使ꢈ序ꢀ征的提取更为精确 还可以  
个文档的重要性  
可以由总文档数目ꢉ以包含该  
),  
Iꢃꢄ  
使源代ꢋ文件大大减小 加快整个相似度检测算法的  
ꢀ征ꢃ的文档数目 再将得到的商取对数得到 该方法  
, ꢂ  
[5]  
运行效率 ꢅ系统主要是对ꢈ序的注释信息进行预处  
的ꢆ达式为  
ꢌ 在进行ꢈ序代ꢋꢀ征提取之前 先行去ꢉ掉ꢈ序代  
, ,  
D
IDFꢅlog  
j t d  
ꢋ内所包含的注释信息  
i
j
在ꢅ系统中  
ꢆ示语料库  
余个  
D
6700  
ꢂytꢆon  
ꢅ系统利用正则ꢆ达式对  
ꢈ序代ꢋ进行ꢀ  
文 件 的  
多 万 行 代 ꢋ  
中 总 的 代 ꢋ 行 数  
Pyꢀhon  
100  
征ꢃ的提取 根ꢇ相似度检ꢍ所需要的  
语言的  
j t d }  
Pyꢀhon  
ꢆ示语料库ꢄ含有某个ꢀ征ꢃ的代ꢋ行  
i
j
基ꢅ语法ꢀ征 制定了一个  
语法ꢀ征ꢃ和正则  
Pyꢀhon  
ꢆ示该ꢃ在 语言中的重要性  
ꢂyꢀꢆon  
IDꢄ  
ꢆ达式的对应关系ꢆ 如ꢆ 所示  
2
特征向量相似度度量算法  
5
在对  
ꢈ序代ꢋ进行ꢀ征ꢃ提取的过ꢈ中  
Pyꢀhon  
经过加权处ꢌ之后的ꢀ征向ꢎ基ꢅ可以代ꢆ与它  
相对应的 ꢈ序 所以计算两个 ꢈ序的相  
系统根ꢇꢆ 所列的所有语法要素的正则ꢆ达式 构  
2
ꢂyꢀꢆon  
ꢂyꢀꢆon  
建了一个正则ꢀ征向ꢎ 再利用  
ꢈ序语言  
Pyꢀhon  
re  
似度 只需计算与ꢈ序代ꢋ相对应的ꢀ征向ꢎ之间的  
则ꢆ达式模块 中的内置函数  
( )  
对已预  
re.findall()  
趮  
现代计算机  
2014.12  

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载