基于学习通与Python 的SQL 代码自动评分程序

2024-12-15 00:00:00向兰宣
电脑知识与技术 2024年35期
关键词:数据库

摘要:在数据库教学中,SQL(结构化查询语言)实践是核心内容。为了提高SQL代码评价的准确性和便捷性,亟须建立一个SQL代码自动评分程序。首先,使用学习通平台收集SQL代码作业集;然后,利用Python程序整理作业集,分解每个学生提交的SQL代码。接着,对SQL代码进行预处理和规范化,分析其语义结构以提取特征,按关键字和特征值进行分段处理。最后,采用编辑距离算法实现自动评分策略,从而实现SQL代码的自动评分。该程序有效提高了SQL代码评分的自动化水平,进一步促进了数据库教学效果。

关键词:SQL代码;编辑距离;数据库;自动评分;Python

中图分类号:TP311.51文献标识码:A

文章编号:1009-3044(2024)35-0059-03开放科学(资源服务)标识码(OSID):

0引言

随着互联网、大数据和人工智能技术的快速发展,数据库课程已成为计算机专业的必修课。掌握SQL语言(StructuredQueryLanguage,结构化查询语言)是学好数据库课程的关键,而编码实践则是掌握SQL语言的核心。因此,SQL语言实训作业的完成质量直接影响学生对数据库实践操作的掌握能力[1]。然而,由于实训作业工作量大且答案可能不唯一,教师采用人工批改的方式不仅工作量繁重,而且消耗大量精力,效果往往事倍功半。

目前,SQL代码自动评分主要分为动态判断和静态分析两种方法。动态判断通过直接执行SQL代码并对结果进行判读,结果正确则评分为正确,结果不正确则得0分。静态分析则通过评判SQL代码的结构和特征,对关键字、关键值等进行评分。全国计算机等级考试中的MySQL科目采用了静态分析进行评分。

本文借鉴了自动评分技术的相关理论,采用静态分析方法,使用Python编写程序实现SQL代码的自动评分。

1SQL代码自动判定

目前,数据库课程的教学主要在学习通、职教云等平台进行,这些平台上的相关数据是教学评价的重要支撑。因此,在收集SQL代码时,无须单独开发程序,而是直接使用教学平台进行收集。在收集SQL代码作业集后,使用Python程序对作业进行分解,以便对每一份作业进行单独评判。本文以学习通教学平台为例进行分析。

完成SQL代码作业的整理后,进行SQL代码的预处理,删除SQL代码中的无义字符和多余空格,并将间隔统一为1个空格,然后对各关键字的子句进行排序等操作,规范SQL的基本格式[2-3]。随后使用Python中的sqlparse库根据SQL代码的关键字或特征进行分段,分段后替换SQL同义子句。最后使用编辑距离算法[4]对分段后的SQL代码子句进行相似度检查,以实现完成效果的自动判定。

基于学习通与Python语言的关系数据库SQL代码自动评分程序总体流程如图1所示。

1.1收集SQL代码作业集

由于教学过程在学习通平台进行,因此直接使用学习通中的作业模板发布功能。对于简单的SQL代码填空题,可以直接使用学习通完成评分。但对于完整的SQL代码语句或程序,学习通平台无法完成自动评分。此时,需要将其发布为简答题,学习者在学习通中提交答案。随后直接从学习通下载作业集,并通过自动评分程序进行评判。收集SQL作业集流程如图2所示。

1.2整理SQL代码作业集

下载的作业集为一个压缩包,其中包含所有学习者的SQL作业,这些作业以DOC格式的Word文档存储。因此,需要使用Python程序将每一份作业分别分解出来。作业将根据学习者的登录信息(通常为学习通账号或手机号)进行命名,并将DOC格式转换为DOCX格式,以便在Python中使用docx库进行处理。整理SQL代码作业集流程如图3所示。

1.2.1解压SQL代码作业集

SQL代码作业集为一个包含所有学习者SQL作业的ZIP压缩包,可以在Python中使用zipfile库进行解压。以下是部分核心代码示例。

1.2.2重命名SQL代码作业

由于学习者提交的SQL作业可能未按规定命名,这将影响后续评分时与学习者的身份对应关系。因此,程序将根据学习者的登录信息进行统一重命名。如果登录名为学号,则按照学号-姓名格式命名;如果登录名为手机号,则按照手机号-姓名格式命名。其部分核心代码如下所示。

1.2.3转换SQL代码作业格式

由于Python中的docx库只能处理DOCX文档,因此需要将重命名后的SQL作业从DOC格式转换为DOCX格式。需在Python中使用win32com.client库完成操作。其核心代码如下所示。

1.3读取SQL代码作业

每份SQL代码作业均为一个Word文档,使用Py⁃thon中的docx库可以获取所有段落信息。通过遍历段落中的固定格式(如“第一空”“第二空”等),可以提取学习者提交的每个SQL代码作业[5]。本文以每份SQL作业仅包含一个SQL代码语句为例,其获取SQL作业的核心代码如下。

1.4预处理SQL代码作业

由于学习者书写SQL代码时存在不规范性以及同一结果语句的多样性,为了更准确地判定SQL代码的正确性,需要对SQL代码进行规范化处理。规范化处理主要包括删除无意义内容和字符、将所有字母转换为大写、删除多余空格、将间隔统一为一个空格以及对子句进行排序等操作。预处理SQL代码作业流程如图4所示。

1.4.1删除无义内容

注释在程序设计中只是一个备注性的说明,对程序运行没有任何作用。因此删除SQL代码注释相关的无义的内容,使SQL代码更简洁。

1.4.2删除无义字符

SQL代码书写时,有时添加了一些回车键来对关键字或属性值进行换行,以使语句显示美观,对SQL代码的比较准确性是无意义的。为了便于比较,应删除回车键字符,并用1个空格来代替。

1.4.3整理空格

SQL代码在书写时,关键字,属性值等特征值间用空格间隔,可以为1个或多个空格。为了相似度比较更为准确,应删除多余的空格。使代码更为简洁,提高相似性比较的准确度。

1.4.4整理语句中字母

SQL代码是不区分大小写的,但有的书写是用的小写,有的大写,有的大小写混写。为了统一SQL代码,将SQL代码中所有字母转换成大写形式。

1.4.5排序SQL子句

SQL代码中各关键字后的子句里面的属性值是不分先后顺序的,因此应对其子句中的内容进行以下排序,以便在相似性比较时,得到更准确的相似度比较。例如,整理过后的SQL子句为“SELECTD1,D3,CDO2NF2R=O2;M”,为TB了W便H于E相RE似C度O比N1较=1,将AN子D句C进ON行3排=3序A,N排D序子句后的SQL语句为“SELECTD1,D2,D3FROMTBWHERECON1=1ANDCON2=2ANDCON3=3;”。

1.5分段子句

在对SQL代码进行预处理后,SQL代码已基本规范,可按关键字等特征进行提取和分段记录,然后对分段后的语句进行相似度比较。例如:

这样在对SQL代码进行判定时,可单独对关键字和子句或属性值进行分类确定分值比重,从而更符合对SQL代码完成效果的教学评价。

1.6转换同义子句

在SQL代码中,两个完全不同的代码可能执行相同的结果,因此在评分时,应将这两种代码均评定为正确。为便于进行相似度检查,应对实现结果一致的子句进行替换。例如子句“Agt;=1ANDAlt;=9”和“ABBEETTWWEEEENN11AANNDD99””执进行行结替果换是。一还致有的类,似因于此I应N将子“句A可替换成OR子句进行连接等可相互替换的子句。

1.7使用编辑距离进行相似度检查

编辑距离(EditDistance)是一种衡量两个字符串相似度的方法,通过计算将一个字符串转换为另一个字符串所需的最少操作次数(插入、删除或替换字符)来得出结果。在进行相似度比较时,按分段后的子句进行分类比较,然后对分类比较后的结果进行分类按权重赋分。编辑距离算法部分核心代码如下所示。

1.8使用运行结果完成自动判分

为提高SQL代码自动评分的准确度,在对SQL代码子句进行分段分类自动判定的基础上,增加了直接运行SQL代码以检查运行结果的步骤。这一方法有助于完善SQL代码在同义转换时未能完全替换所有同义子句的问题。若直接运行的分值大于分段分类自动判定的分值,则采用直接运行的判分结果作为最终结果。

2结论

本文针对关系型数据库教学中的SQL代码自动评分,不仅基于常用的学习通教学平台,还确保所有教学评价数据保留在平台中。同时,通过Python编程实现了自动评判功能。通过对SQL代码的预处理、分段、同义子句转换和相似度检查等步骤,最终实现了SQL代码的自动评分。该程序有效提高了SQL代码的评分效率,减轻了教师的工作负担,并提升了教学质量。未来研究可考虑引入更多机器学习算法,以进一步提高评分的准确性和智能化水平。

参考文献:

[1]吴娇娇,何小卫,赵洋.关系数据库SQL代码的自动评分算法研究[J].计算机技术与发展,2018,28(4):114-118.

[2]莫晓琨.面向SQL习题的智能评判技术的研究与实现[D].南宁:广西大学,2020.

[3]吴娇娇.面向关系数据库SQL代码的自动评判算法研究[D].金华:浙江师范大学,2018.

[4]葛文馨.SQL代码相似度检测算法研究[D].青岛:山东科技大学,2020:8-9.

[5]朱鹏伟,黄伟.快学Python自动化办公轻松实战[M].北京:电子工业出版社,2022:179-184.

【通联编辑:谢媛媛】

基金项目:2024年校级白酒生态智能酿造产教融合专项项目:面向MySQL实训作业的智能评判技术的研究与实现(项目编号:LZZX-C-03);全国高等院校计算机基础教育研究会计算机基础教育教学研究项目:课程思政与教育评价实践研究(项目编号:2024-AFCEC-440)

猜你喜欢
数据库
数据库
财经(2017年15期)2017-07-03 22:40:49
数据库
财经(2017年2期)2017-03-10 14:35:35
数据库
财经(2016年15期)2016-06-03 07:38:02
数据库
财经(2016年3期)2016-03-07 07:44:46
数据库
财经(2016年6期)2016-02-24 07:41:51
数据库
财经(2010年20期)2010-10-19 01:48:32