import spacy
# 加载中文模型
nlp = spacy.load('zh_core_web_md')
# 标准答案和学生答案
correct_answer = "反对兼并战争;大力发展农业,渔业,林业;注重教育;反对暴政,提倡施行仁政;以民为本;"
student_answer = "反对兼并战争;反对暴政;大力发展农业,渔业,林业;注重教育,提倡施行仁政;以民为本;"
# 关键词列表
keywords = ["反对兼并战争", "农业","渔业","林业", "教育", "反对暴政", "仁政"]
# 加权相似度计算函数
def calculate_similarity(doc1, doc2):
return doc1.similarity(doc2)
# 关键词匹配计算函数
def calculate_keyword_match(correct_answer, student_answer, keywords):
matched_keywords = 0
for keyword in keywords:
if keyword in student_answer:
matched_keywords += 1
return matched_keywords
# 将标准答案和学生答案转换为 spaCy 对象
doc1 = nlp(correct_answer)
doc2 = nlp(student_answer)
# 计算句子相似度
similarity = calculate_similarity(doc1, doc2)
# 计算关键词匹配数
keyword_match_count = calculate_keyword_match(correct_answer, student_answer, keywords)
# 动态计算每个匹配关键词的分数
total_keyword_score = 100 # 设定总关键词分数(比如100分)
keyword_score_per_match = total_keyword_score / len(keywords) # 每个关键词的分数
keyword_score = keyword_match_count * keyword_score_per_match
# 计算最终得分:假设句子相似度的分数范围为 0 到 100 分
similarity_score = similarity * 100
# 合并加权得分,假设关键词得分占总分的 50%
final_score = similarity_score * 0.5 + keyword_score * 0.5
# 输出结果
print(f"句子相似度:{similarity:.2f}")
print(f"关键词匹配数量:{keyword_match_count}")
print(f"关键词得分:{keyword_score}")
print(f"最终得分(满分100分):{final_score:.2f}")