python句子相似度程序,智能评分系统

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}")


posted @ 2025-01-22 14:42  冯元春  阅读(25)  评论(0)    收藏  举报