C# 检查基于文本的答案是否正确
本文关键字:答案 是否 文本 检查 于文本 | 更新日期: 2023-09-27 18:35:56
大家好。假设我有一个问题:
什么是逆反应?
这个问题的答案是:
逆反应是产物反应形成的反应 反应物,反之亦然。
现在,确定用户输入的答案是否正确的最佳方法是什么?我可以想到几种方法,但它们不切实际。
方法之一:
string answer = "A reverse reaction is a reaction in which the products react to form reactants and vise versa.";
string input = Console.ReadLine();
if (input.Equals(answer))
{
//answer is correct
}
其他方式:
检查匹配的单词数并从中获得百分比。如果它计算到一定百分比,那么答案是正确的。
Number of words: 17
Number of words in input that match answer: 17
Correctness percentage: 100%
另一种方式:
检查输入是否包含某些关键短语。
string input = Console.ReadLine();
string[] keyPhrases = new string[] { "Products react to form reactants" };
foreach (string keyPhrase in keyPhrases)
{
if (!input.Contains(keyPhrase))
{
//answer is incorrect
return;
}
}
如果你所说的正确性在语义上是正确的,并且用户可以自由地提出他的答案,那么我相信目前根本没有简单的方法可以通过编程来做到这一点。
-
如果使用第一种方法:
string answer = "A reverse reaction is a reaction in which the products react to form reactants and vise versa."; string input = Console.ReadLine(); if (input.Equals(answer)) { //answer is correct }
用户忘记放最后一个小点".",
"A reverse reaction is a reaction in which the products react to form reactants and vise versa"
然后他会错,但他实际上是对的
-
如果你用第二种或第三种方式来做,那么如果用户只是提到它的否定,他可能有很高的匹配率,但他的概念完全错误:
"A reverse reaction is NOT a reaction in which the products react to form reactants and vise versa"
截至目前,我认为最好的方法是将用户输入限制为您提供的多个选择。
最好的项目之一是单选按钮。但是你可以根据需要combo box and button
或ListBox which allows single/multiple choices
来做到这一点,但底线是相同的:
限制你的用户输入,否则你无法轻易判断他的答案在语义上是对还是错。
它可能需要语法理解方面的专业知识,大量的字典单词,复杂的单词 - 含义关系模型,以及出色的背景上下文解释。
话虽如此,
正则表达式无法帮助检查答案在语义上是否正确 - 它只能帮助您找到一种模式,您可以使用该模式来检查用户是否输入语义正确的答案。
因此。。。
如果它与人工检查一起使用,那么可能您的第二和第三种方式 + 正则表达式会带来一些好处。