主观题自动评阅实现

您所在的位置:网站首页 论述题有标准答案吗 主观题自动评阅实现

主观题自动评阅实现

2024-07-10 04:08| 来源: 网络整理| 查看: 265

  上周写了序列对匹配算法,并通过序列对匹配算法对词语进行相似度匹配,后面肯定还要更换词语的相似度匹配算法,现在先基于之前的工作进一步完成。

  然后再明确一下程序的输入输出:程序的输入一个是学生答案,即一段文本,文本中可能包含多个句子。二是标准答案即对应分值,标准答案含有多个句子,分别输入每个句子即对应分值,分值总和加起来为10分。程序的输出即为学生答案的得分了,得分为0-10间的整数。

  下面根据句子的相似度实现两个段落间的相似度,传入的p1为一个整的字符串,代表学生答案,传入的p2为一个字符串列表,代表标准答案中的每个要点,point为一个整数列表,代表对应于p2中每个要点的分值情况,代码如下:

''' 实现两个段落的相似度 p1为学生答案,按照段落整段给出,需要通过句号划分 p2为标准答案列表 point为对应每个标答的分值 ''' def ParagraphSimilar(p1,p2,point): # 计算两个段落的相似度 p1 = p1.split('。') p1 = list(filter(None,p1)) # 去除list中的空字符 len1 = len(p1) len2 = len(p2) MP = [ [0] * len2 for i in range(len1) ] # 初始化句子相似度矩阵 for i in range(len1): for j in range(len2): MP[i][j] = SentencesSimilar(p1[i],p2[j]) # 计算每个句子相似度值 __str__(len1,len2,MP) maxMP = [] # 每轮找出MS中的最大值加入到maxMP,并删除其所在的行列 while True: loc = (0,0,0) # 记录句1位置、句2位置,两个句子间相似度 for i in range(len1): # 找出MS中的最大值 for j in range(len2): if MP[i][j] > loc[2]: loc = (i,j,MP[i][j]) if loc[2] != 0: # 如果最大值不为0则将其加入maxMP


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3