2016-02-24 2 views
3

Добрый день. У меня есть вопрос:C# Проверка правильности ответа на основе текста

Что такое обратная реакция?

И ответ на этот вопрос:

Обратной реакция представляет собой реакцию, в которой продукты реагируют с образованием реагентов и наоборот.

Теперь, что было бы лучшим способом определить, правильно ли задан ответ на этот вопрос или нет? Я могу думать о нескольких путях, но они не практичны.

Один из способов:

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

Используйте переключатели и тест с несколькими вариантами выбора. Не пытайтесь заменить профессоров человека :) –

+0

Это очень сложно сделать правильно. Что-то в царстве ИИ. Вероятно, именно по этой причине каждый он-лайн вопросник основан на списке возможных ответов, в которых пользователь выбирает правильный номер. – Steve

+2

Другие решения неизбежны. Например, ваш подход «процент правильности» имел бы трудную дифференциацию. * Обратная реакция - это реакция, в которой продукты реагируют с образованием реагентов и наоборот *. Обратная реакция представляет собой реакцию, в которой продукты * *** не реагируют *** на формы реагентов и наоборот *. –

ответ

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" 
    

В настоящее время, я считаю, что лучше способ сделать это - , ограничивая пользовательский ввод нескольких вариантов, предоставленных вами.

И один из лучших элементов для этого - радиокнопки. Но вы могли бы сделать это combo box and button или ListBox which allows single/multiple choices, как вы хотите, но в нижней строке одно и то же:

ограничить данных, вводимых пользователем, или вы не можете сказать, является ли его ответ семантически правильно/неправильно легко.

Для этого может потребоваться экспертиза в грамматическом понимании, множество словарных слов, сложные модели отношений слов и значений и отличные интерпретации фоновых контекстов.


Это, как говорится,

Regex не может помочь проверить, если ответ семантически правильно - это может только помочь вам найти шаблон который вы можете использовать для проверки, если пользователь вводит семантически правильный ответ.

Таким образом ...

Если он используется вместе с человеческим осмотром, то, вероятно, ваш второй и третий способы + Regex даст определенные преимущества.

Смежные вопросы