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;
    }
}

C# 检查基于文本的答案是否正确

如果你所说的正确性在语义上是正确的并且用户可以自由地提出他的答案,那么我相信目前根本没有简单的方法可以通过编程来做到这一点。

  1. 如果使用第一种方法:

    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"
    

    然后他会错,但他实际上是对的

  2. 如果你用第二种或第三种方式来做,那么如果用户只是提到它的否定,他可能有很高的匹配率,但他的概念完全错误:

    "A reverse reaction is NOT a reaction in which the products react to form reactants and vise versa"
    

截至目前,我认为最好的方法是将用户输入限制为您提供的多个选择。

最好的

项目之一是单选按钮。但是你可以根据需要combo box and buttonListBox which allows single/multiple choices来做到这一点,但底线是相同的:

限制你的用户输入,否则你无法轻易判断他的答案在语义上是对还是错。

它可能需要语法理解方面的专业知识,大量的字典单词,复杂的单词 - 含义关系模型,以及出色的背景上下文解释。


话虽如此,

正则表达式无法帮助检查答案在语义上是否正确 - 它只能帮助您找到一种模式,您可以使用该模式检查用户是否输入语义正确的答案。

因此。。。

如果它与人工检查一起使用,那么可能您的第二和第三种方式 + 正则表达式会带来一些好处。