一种作业程序自动评分方法及系统
技术领域
本发明涉及计算机技术领域,特别是指一种作业程序自动评分方法及系统。
背景技术
近年来,随着计算机技术的发展,在线考试、无纸化阅卷和无纸化教学得到了普遍应用,这些技术成为改进教学水平的重要手段。当前,在客观题的评分方面,计算机阅卷的效率已经远远超越了人工阅卷。但是,在主观题的评分方面,计算机的辅助作用就显得捉襟见肘。
计算机程序设计语言类课程是几乎所有高校都必须开设的一门基础类课程,需对学生所学知识进行考核。而这种考核多以客观题和主观题相结合的方式进行。计算机程序设计语言类课程除了要求学生掌握相关的理论知识点外,更着重于对学生的实践编程能力进行考察。因此,主观题在该类科目的考核中占有较大的比重。同时,这种实践编程能力的考察也要求学生在平时的训练中加大对主观编程题的练习。
由于学生提交的程序代码风格不统一,逻辑思路不尽相同,可能出现各种各样的语法、逻辑错误,采用手工过程进行评分,不仅需要浪费大量的人力资源,而且受评阅者自身水平、知识储备和心理状况等因素影响,可能会影响最终评阅结果的客观性和准确性。
程序自动评分指的是基于计算机来自动判定给定程序逻辑是否正确、功能是否满足要求。程序自动评分具有阅卷效率高、准确度好、评分公正准确、判定标准统一的优点,可以节省大量人力。
当前投入使用的一些程序自动评分系统的运行效果十分不理想。有的系统只依赖程序的最终输出结果,这种方法无法考察程序的内部逻辑;有的系统引入编译器,通过调用编译器处理学生程序时可能产生的错误或警告提示作为评分依据,这种方法虽然可以对程序整个逻辑结果有很好的判断,但其缺点是:程序中出现一个小的语法错误可能会产生很多的错误提示,导致评分出现较大偏差。
发明内容
本发明要解决的技术问题是提供一种作业程序自动评分方法及系统,以解决现有技术所存在的无法考察程序的内部逻辑及以编译器的输出结果为评分依据的问题。
为解决上述技术问题,本发明实施例提供一种作业程序自动评分方法,包括:
获取作业程序,确定所述作业程序的得分点;
生成所述得分点对应的正则表达式;
根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分。
进一步地,所述作业程序以预设的文件格式命名并存储在指定的文件目录下。
进一步地,所述生成所述得分点对应的正则表达式包括:
加载正则表达式选项,生成所述得分点对应的正则表达式。
进一步地,每一个正则表达式所对应的得分点对应一个分数权重。
进一步地,所述根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分包括:
若第一正则表达式匹配第一得分点,则赋予所述第一得分点相应的分数权重;
若第一正则表达式不匹配第一得分点,则不赋予所述第一得分点相应的分数权重;
所有得分点均匹配完成后,将赋予的每个得分点的分数的总和与所有得分点对应分数权重的总和的比值作为所述作业程序的得分。
本发明实施例还提供一种作业程序自动评分系统,包括:
得分点确定模块,用于获取作业程序,确定所述作业程序的得分点;
正则表达式生成模块,用于生成所述得分点对应的正则表达式;
评分模块,用于根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分。
进一步地,所述作业程序以预设的文件格式命名并存储在指定的文件目录下。
进一步地,所述正则表达式生成模块,具体用于加载正则表达式选项,生成所述得分点对应的正则表达式。
进一步地,每一个正则表达式所对应的得分点对应一个分数权重。
进一步地,所述评分模块包括:
匹配单元,用于若第一正则表达式匹配第一得分点,则赋予所述第一得分点相应的分数权重;
不匹配单元,用于若第一正则表达式不匹配第一得分点,则不赋予所述第一得分点相应的分数权重;
分数输出单元,用于所有得分点均匹配完成后,将赋予的每个得分点的分数的总和与所有得分点对应分数权重的总和的比值作为所述作业程序的得分。
本发明的上述技术方案的有益效果如下:
上述方案中,通过获取作业程序,确定所述作业程序的得分点;生成所述得分点对应的正则表达式;根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分。这样,通过正则表达式匹配作业程序中的得分点,从作业程序的内部逻辑结构层面对作业程序进行自动评分,只要作业程序中的得分点能够匹配对应的正则表达式即可,从而模拟人工阅卷的行为模式,解决了现有技术中,以编译器的输出结果为评分依据,自动评分过程判定标准不科学、评分没有区分度等问题,且能够更好地适应风格多变、标准不一的学生作业程序风格,增强判断的灵活性。
附图说明
图1为本发明实施例提供的作业程序自动评分方法的流程图;
图2为本发明实施例提供的作业程序自动评分方法的详细流程图;
图3为本发明实施例提供的作业程序自动评分系统的结构示意图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明针对现有的无法考察程序的内部逻辑及以编译器的输出结果为评分依据的问题,提供一种作业程序自动评分方法及系统。
实施例一
参看图1所示,本发明实施例提供的一种作业程序自动评分方法,包括:
S1,获取作业程序,确定所述作业程序的得分点;
S2,生成所述得分点对应的正则表达式;
S3,根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分。
本发明实施例所述的作业程序自动评分方法,通过获取作业程序,确定所述作业程序的得分点;生成所述得分点对应的正则表达式;根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分。这样,通过正则表达式匹配作业程序中的得分点,从作业程序的内部逻辑结构层面对作业程序进行自动评分,只要作业程序中的得分点能够匹配对应的正则表达式即可,从而模拟人工阅卷的行为模式,解决了现有技术中,以编译器的输出结果为评分依据,自动评分过程判定标准不科学、评分没有区分度等问题,且能够更好地适应风格多变、标准不一的学生作业程序风格,增强判断的灵活性。
本发明实施例中,应用的正则表达式能够方便的进行维护和更新,相较于现有技术中基于编译器的自动评分系统,本发明实施例能够很好地适应教学需求和作业题目要求的变化。且现有技术中基于编译器的自动评分只能判断出作业程序是否正确,无法判定其是否符合题意,而本发明实施例能够通过正则表达式判定作业程序是否符合题意。
参看图2所示,本发明实施例中,加载正则表达式选项,生成所述得分点对应的正则表达式,其中,正则表达式的相关模块可以独立于本发明实施例本身更新、维护,能够及时顺应教学需求的变化。同时,如果评分标准发生了改变,也只需更新相应的评分模块,而不需要修改整个自动平分系统的内部逻辑。如果新增了得分点,也只需更新相应的得分点确定模块。
本发明实施例中,正则表达式匹配给出的是基于作业程序(作业程序也可以称为作业文本/文档)内容的匹配结果,与程序本身使用的语言无关,所述作业程序的语言包括:C++、java,C,C#等;因此在实际教学应用中,可针对不同的计算机语言编写多套正则表达式匹配规则,这样在切换教学中使用的语言时只要切换相应的正则表达式评分模块即可。而现有技术中的基于编译器的自动判定系统若要实现语言切换功能则要改变判定系统的底层判定逻辑,灵活性差,且工作量大。
本发明实施例提供的作业程序自动评分方法,还可以与目前教学中已有的系统相结合,轻松实现学生作业提交、评阅、反馈全自动完成。
本发明实施例中,所述作业程序以预设的文件格式命名并存储在指定的文件目录下。例如,预设的文件格式为:姓名_语言_提交文件的时间.语言后缀名,指定的文件夹为:d:\test\。
本发明实施例中,例如,需要对王刚学生在20151106提交的C++作业程序“wanggang_C++_20151106.cpp”进行评分,“wanggang_C++_20151106.cpp”代码如下:
参看图2所示,本发明实施例中,在d:\test\目录下搜索到作业程序“wanggang_C++_20151106.cpp”后,载入该作业程序,可以自动或手动选择“头文件(iostream)”、“标准命名空间”、“主函数头”、“主函数返回值”、“输出(cout)”这5个得分点作为评分依据。
本发明实施例中,加载正则表达式选项,生成“头文件(iostream)”、“标准命名空间”、“主函数头”、“主函数返回值”、“输出(cout)”这5个得分点分别对应的正则表达式。
在前述作业程序自动评分方法的具体实施方式中,进一步地,每一个正则表达式所对应的得分点对应一个分数权重。
本发明实施例中,每一个正则表达式所对应的得分点对应一个分数权重,例如,“头文件(iostream)”、“标准命名空间”、“主函数头”、“主函数返回值”、“输出(cout)”这5个得分点对应的分数权重分别为70、75、95、30、75。
在前述作业程序自动评分方法的具体实施方式中,进一步地,所述根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分包括:
若第一正则表达式匹配第一得分点,则赋予所述第一得分点相应的分数权重;
若第一正则表达式不匹配第一得分点,则不赋予所述第一得分点相应的分数权重;
所有得分点均匹配完成后,将赋予的每个得分点的分数的总和与所有得分点对应分数权重的总和的比值作为所述作业程序的得分。
本发明实施例中,为了判断自动评分的准确性,先通过人工阅卷对作业程序“wanggang_C++_20151106.cpp”进行分析、评分,发现该程序主函数没有返回值(即主函数声明时声明了返回值类型为int但是程序中缺少“return0;”语句)。这一错误在初学者中很常见,虽然现代大多数编译器在编译时会自动地在生成的程序末尾加上“return0;”语句,但是为了程序的完整性和稳定性,这一语句仍应该人工写入程序文件中。因此,应该予以一定程度的扣分。
本发明实施例中,在自动评分时,通过已选择好的得分点“头文件(iostream)”、“标准命名空间”、“主函数头”、“主函数返回值”、“输出(cout)”对应的正则表达式匹配作业程序中相应的得分点。例如,针对“头文件(iostream)”项,则使用正则表达式“\s*#include\s*<\s*iostream\s*>”进行匹配,若能成功匹配,则说明学生提交的作业程序文本(代码)中含有类似“#include<iostream>“的语句,实现了包含头文件的功能,应该赋予该得分点相应的分数权重(即70)。而对于选项“主函数返回值”,在使用正则表达式“return\s+0\s*;”进行匹配时,发现没有匹配项,则该得分点不予赋分,也就是说,该得分点得分为0。其余得分点判定过程类似。所有得分点均匹配完成后,自动计算所述作业程序最终得分。
本发明实施例,只有“主函数返回值”这项没有匹配成功,则总分为(70+75+95+0+75)/(70+75+95+30+75)*100.00=91.30分,该分数与人工阅卷结果相当接近,说明本发明实施例提供的作业程序自动评分结果科学合理,可以代替人工阅卷。这样,通过为每一个正则表达式所对应的得分点设置分数权重,再根据设置的分数权重结合匹配结果得到的最终评分,相较于现有技术中的基于编译器的自动评分系统,输出的评分分数更接近人工阅卷的结果,且赋分方式更加人性化、精确化。
实施例二
本发明还提供一种作业程序自动评分系统的具体实施方式,由于本发明提供的作业程序自动评分系统与前述作业程序自动评分方法的具体实施方式相对应,该作业程序自动评分系统可以通过执行上述方法具体实施方式中的流程步骤来实现本发明的目的,因此上述作业程序自动评分方法具体实施方式中的解释说明,也适用于本发明提供的作业程序自动评分系统的具体实施方式,在本发明以下的具体实施方式中将不再赘述。
参看图3所示,本发明实施例还提供一种作业程序自动评分系统,包括:
得分点确定模块101,用于获取作业程序,确定所述作业程序的得分点;
正则表达式生成模块102,用于生成所述得分点对应的正则表达式;
评分模块103,用于根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分。
本发明实施例所述的作业程序自动评分系统,通过获取作业程序,确定所述作业程序的得分点;生成所述得分点对应的正则表达式;根据所述正则表达式匹配所述作业程序的得分点,输出所述作业程序的得分。这样,通过正则表达式匹配作业程序中的得分点,从作业程序的内部逻辑结构层面对作业程序进行自动评分,只要作业程序中的得分点能够匹配对应的正则表达式即可,从而模拟人工阅卷的行为模式,解决了现有技术中,以编译器的输出结果为评分依据,自动评分过程判定标准不科学、评分没有区分度等问题,且能够更好地适应风格多变、标准不一的学生作业程序风格,增强判断的灵活性。
在前述作业程序自动评分系统的具体实施方式中,进一步地,所述作业程序以预设的文件格式命名并存储在指定的文件目录下。
在前述作业程序自动评分系统的具体实施方式中,进一步地,所述正则表达式生成模块102,具体用于加载正则表达式选项,生成所述得分点对应的正则表达式。
在前述作业程序自动评分系统的具体实施方式中,进一步地,每一个正则表达式所对应的得分点对应一个分数权重。
在前述作业程序自动评分系统的具体实施方式中,进一步地,所述评分模块103包括:
匹配单元,用于若第一正则表达式匹配第一得分点,则赋予所述第一得分点相应的分数权重;
不匹配单元,用于若第一正则表达式不匹配第一得分点,则不赋予所述第一得分点相应的分数权重;
分数输出单元,用于所有得分点均匹配完成后,将赋予的每个得分点的分数的总和与所有得分点对应分数权重的总和的比值作为所述作业程序的得分。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。