基于TF-IDF的程序代码抄袭检测系统
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
李晗: 基于 T F -I D F 的程序代码抄袭检测系统布
表 1 余弦相似度统计表
相似度阈 值 1
0.9999 0.9998 0.9997 0.9996 0.9995 0.9994 0.9993 0.9992 0.9991
算法筛出的高异 常文本数量 106 112 120 122 122 123 125 125 126 128
应的相关数据。
弦相似值的文本对总数为128。高异常相似值的文本对是
为了确保数据清洗的可靠性,进行数据探索。在数据 按照以下规则选取的:每个用户相对于其他用户的相似
探索中发现以下问题:
度取最大值者,然后对比阈值0.999进行筛选,大于阈值
(1)通过各种SQL语句检视数据及程序调试中发现少数 者被筛选为高异常相似值。这些文本对的余弦相似度统
基于 TF-IDF 的程序代码抄袭检测系统 *
李晗
(温州大学电气与电子工程学院,浙江温州 325035)
摘要:本文设计了一种用于程序设计实验源代码结果抄袭检测系统。采用自然语言处理技术中的TF-IDF算法和测量向量
相似度的余弦相似性算法,分析检测源程序抄袭情况,通过实际应用算例验证了系统的有效性。源程序抄袭检测对各种需要提交
第38卷 第9期 第202308年 9卷月
数字技术与应用 数D字ig技it术al与T应ec用hnologyww&
Vol.38 No.9 September 2020
设计开发
DOI:10.19695/12-1369.2020.09.52
1 算法设计
从自然语言处理的观点来看,抄袭检测的本质是测量 两个文本的相似度。在进行相似性计算时,可采用余弦相 似性算法。从文本到文本特征向量的转化则采用TF-IDF 算法[3-5]。整个算法的流程如图1所示。
整个算法流程说明如下: (1)将C语言的各种操作符、分隔符及三种括号聚合为 停用词(stopwords)集合; (2)使用停用词集合进行滤除操作,保留各种名称标识 符,形成关键词向量; (3)综合所有文本的处理结果(关键词向量),形成语料 库(corpus); (4)分别计算各关键词的TF和IDF,最后形成TF-IDF 向量; (5)计算余弦相似性; (6)最后,提取相似度的行最大值进行阈值处理,判断 是否抄袭。
接下来是数据处理环节。通过上节所述的算法流程对 和五列。
数据进行处理,其基本核心思想就是将源程序看成是一种
在计算最后两列精度和召回率时,将人工无法判定的
文本,然后利用相应算法进行转换和测量。将处理数据可 文档近似归类为非抄袭文本。精度反映了检测算法认为的
视化可以看到文本对的余弦相似度分布情况。以下以题目 抄袭文本中真实抄袭文本所占的比率。召回率反映了真实
代码的实验教学系统有重要的实用价值。
关键词: T F - I D F ;余弦相似性;抄袭检测;C 源程序
中图分类号:TP183
文献标识码:A
文章编号:1007-9416(2020)09-0136-03
0 引言
高校程序类课程教学越来越多地要求学生在线提交 编程作业或实验源代码。一些课程或实验也开始使用成绩 自动评分系统[1]。这些代码提交系统的广泛应用使得防范 代码抄袭成为此类课程的一个重要需求。抄袭检测也是慕 课系统或在线教学系统的重要组成部分[2]。
行数据格式不规范问题,影响本行数据的分段及后续数据 计如表1第二列所示。为检验算法组合对抄袭问题的检测
行的处理。处理方法为修改数据清洗程序重新进行清洗; 效果,使用人工方式查看源代码文本,判断是否抄袭,然
(2)发现提交数过少或ID号格式异常的用户,将其筛除。 后与算法结果进行对比。人工判断的结果见表1第三、四
收稿日期:2020-05-28 * 基金项目:校级教改项目 + 采用文本数据挖掘算法改进编程类课程实验用自动判题引擎(16jg40) 作者简介:李晗(1973 —),男,浙江温州人,博士,讲师,研究方向:机器学习、计算机视觉。
136
Copyright©博看网 . All Rights Reserved.
人工判定的抄 袭文本数量
106 110 112 112 112 112 112 112 112 112
人工判定的非抄 袭文本数量 0 1 6 7 7 8 9 9 9 10
人工无法判定 的文本数量
0 1 2 3 3 3 4 4 5 6
精度(查准 率) 1 0.982 0.933 0.918 0.918 0.911 0.896 0.896 0.889 0.875
召回率(查全 率) 0.946 0.982 1 1 1 1 1 1 1 1
(2)字符编码格式不匹配问题,通过改变读取方式和转 到“翘尾”现象。这表明存在抄袭的可能性很大。
码来解决;
通过细致的结果分析可以进一步说明问题。该编程问
(3)将切分好的数据导入数据库,并分离出目标课程对 题提交源代码文本数量为542,筛出嫌疑较大的高异常余
ID为1958的编程题为例说明,该题的提交结果的文本对余 抄袭文本中被检测算法筛选出的比率。每栏的精度值和召
弦相似度分布如图2所示。
回率表明在此栏的相似度阈值条件下计算出的精度值和
图中横坐标为相似度区间,相似度从0至1平均分成100 召回率。具体见图3。
个区间;纵坐标为相似度值落到此区间内的文本对数量,为
2 实验与算法测试
图 1 算法处理流程
2.1 实验环境 实验数据来源于C 语言程序设计课程的网络作业平 台。该网络平台包括了一些C语言习题及自动判题机制,供 学生在课余练习编程之用。数据集包括如下字段:用户提交 号、用户ID、题目ID、课程序号、编程语言编号、判题结果、使 用时间、使用内存、提交时间及提交源代码。除最后一项提 交源代码外,其他字段每次提交所产生的数据均在一行中。 提交源代码字段根据源代码篇幅占据数量不等的行。 2.2 算法测试 首先进行数据清洗。数据清洗主要有以下作用: (1)将读入的每行数据进行切分,此处的复杂性在于提 交源代码字段和其他字段出现混行现象,解决此问题采用 了正则表达式;