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

时间:2016-02-24 09:39:27

标签: c# regex string linq analysis

美好的一天。说我有一个问题:

  

什么是逆反应?

这个问题的答案是:

  

逆反应是产物反应形成的反应   反应物,反之亦然。

现在,确定用户输入的答案是否正确的最佳方法是什么?我可以想到几种方法,但它们并不实用。

其中一种方式:

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

1 个答案:

答案 0 :(得分:2)

如果您的正确性是语义正确,则用户免费来提出他的答案,那么我相信没有简单的方法目前通过编程来做到这一点。

  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"
    
  3. 截至目前,我认为最好的方法是限制用户输入您提供的多种选择。

    最好的项目之一是单选按钮。但您可以根据需要combo box and buttonListBox which allows single/multiple choices执行此操作,但底线是相同的:

      

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

    它可能需要语法理解方面的专业知识,大量的词典单词,复杂的单词 - 意义关系模型,以及其他优秀的背景语境解释。

    话虽如此,

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

    ...因此

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