2012-06-07 6 views
5

У меня есть javascript chat bot, где человек может вводить в поле ввода любой вопрос, который им нравится, и надеется получить точный ответ. Я могу это сделать, но я знаю, что все это неправильно, потому что я не знаю, в какой позиции номер появится в предложении. Если человек точно набирает:Строка поиска для чисел

что такое квадратный корень из 5, это отлично работает.

Если он типа в таких вещах, это не так.

что квадратный корень из 5

квадратный корень из 5 является то, что

вы знаете, что квадратный корень из 5 является

и т.д.

мне нужно в состоянии определить, где номер появляется в предложении, тогда выполните расчет оттуда. Обратите внимание, что приведенная ниже строка является частью более крупного рабочего чата. В приведенной ниже строке я просто пытаюсь ответить на любой вопрос с квадратным корнем независимо от того, где число появляется в предложении. Я также знаю, что есть много подводных камней с открытым полем ввода, где человек может вводить что угодно, например, орфографические ошибки и т. Д. Это просто для развлечения не серьезный научный проект. :)

if(
    (word[0]=="what's") && 
    (word[1]=="the") && 
    (word[2]=="square") && 
    (word[3]=="root") && 
    (word [4]=="of") && 
    (input.search(/\d{1,10}/)!=-1) && 
    (num_of_words==6) 
){   
    var root= word[5]; 
    if(root<0){ 
     document.result.result.value = "The square root of a negative number is not possible."; 
    }else{ 
     word[5] = Math.sqrt(root); 
     word[5] = Math.round(word[5]*100)/100 
     document.result.result.value = "The square root of "+ root +" is "+ word[5] +"."; 
    } 
    return true; 
} 

Только для того, чтобы быть понятным, бот написан по мотивам «Если statemments» по причине. Если вход в этом случае не содержит слов «что» и «квадратный корень» и «некоторый номер», строка не запускается, и ответ на нее бот с общим «я не знаю типа ответ". Поэтому я надеюсь, что любой ответ будет соответствовать формату, который я использую. Будь добрым, я здесь новый. Мне нравится делать боты, но я не очень программист. Благодарю.

+0

Ничего себе. Вы уверены, что ваши развлечения на высоких уровнях. :) –

ответ

2

Вы можете сделать это, используя регулярное выражение.

"What is the sqrt of 5?".match(/\d+/g); 
["5"] 

Выход представляет собой массив, содержащий все числа, найденные в строке. Если у вас более одного, например «Является ли квадратный корень 100 100?»? то это будет

"Is the square root of 100 10?".match(/\d+/g); 
["100", "10"] 

, так что вы можете выбрать, какой номер вы хотите использовать в своем скрипте.

+0

'' Является ли смысл жизни 42? "' -> '6.48' –

+0

Этот код даст вам только номер, как задавался оригинальный вопрос. Кажется, что 'mister movie' уже имеет способ обработать _kind_ вопроса. – sachleen

+0

Я думаю, что этот вопрос может быть неясным. В «If Statement» отображается вся ненужная информация. Если информация отсутствует, то оператор никогда не запускается. Поэтому я знаю, что в выражении if будет число. Я надеялся что-то вроде var root = независимо от того, что это такое. Затем выполните простой расчет по этому числу, например sum = Math.sqrt (root); Глядя на исходное сообщение, я знаю, что слово [5] - это число. Однако, если словосочетание отличается от числа, возможно, слова [3], слова [4] и т. Д. Есть ли способ поиска ввода. Найдите, где число падает и калькулятор соответственно. –

1

Вам нужно будет использовать регулярные выражения, если вы не знаете, что они собой представляют, вы должны искать их, потому что в этом ответе потребуется слишком много времени, чтобы объяснить их. Вот полезный сайт для регулярных выражений в JavaScript https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions.

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

nums = someString./\d+|pi|e/gi 

Следующая часть будет трудно, но кипеть его вниз к основной концепции, вы должны искать ключевые слова, такие как «квадратный корень», «время», или «плюс» , Вы должны делать это слово за словом, идущим слева направо.Например, если пользователь вводит

What is 5 plus 3 minus 8? 

вы должны обнаружить плюс до минус, а если это вводится

What is 5 minus 3 plus 8? 

Вы должны обнаружить минус до плюс.

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

Надеюсь, я правильно понял ваш вопрос и предоставил некоторую помощь для решения проблемы, потому что то, что вы просили, очень сложно, но кажется забавным. Удачи. Также в качестве предупреждения я не рассматриваю порядок операций в своем ответе.

+0

[Пожалуйста, подумайте об избежании w3schools.] (Http://w3fools.com) – Pointy

+0

@Pointy Спасибо, я не понимал, что w3schools могут быть вредными, изменили его на сайт MDN, как это было предложено w3fools. –