2012-06-07 6 views
5

나는 사람들이 입력 상자에 그들이 좋아하는 질문을 입력하고 정확한 답변을 얻을 수있는 javascript chat bot을 가지고 있습니다. 나는 이것을 할 수는 있지만 나는이 모든 잘못에 대해 알고있다. 왜냐하면 그 숫자가 문장의 어떤 위치에 나타날지 모르기 때문이다. 어떤 사람이 정확히 입력하면 :숫자에 대한 검색 문자열

무엇이 제곱근인가? 잘 작동합니다.

그가 이런 식으로 입력하면 그렇지 않습니다.

당신이 5의 제곱근은 내가해야

무엇을 알고 무엇을 5의 제곱근 인 5

의 제곱근 것입니다 그 숫자가 문장에 나타나는 곳을 결정할 수 있고 그곳에서 계산을 할 수 있습니다. 아래 줄은 더 큰 작업 chatbot의 일부입니다. 아래 줄에서 나는 문장에 숫자가 나타나는 곳과 관계없이 모든 제곱근 질문에 답할 수 있도록 노력하고 있습니다. 또한 사람들이 맞춤법 오류 등을 입력 할 수있는 개방형 입력 상자가있는 함정이 많다는 것을 알고 있습니다. 이것은 심각한 과학 프로젝트가 아닌 엔터테인먼트에만 해당됩니다. :)

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

봇은 이유가있는 경우 "if statemments"를 사용하여 작성되었습니다. 이 경우 입력 내용에 "what"과 "square root"및 "some number"라는 단어가 포함되지 않으면 해당 줄이 트리거되지 않고 일반 봇과 더 이상 응답하지 않습니다. "나는 유형을 모릅니다. 응답". 그래서 나는 어떤 형식이든 내가 쓰고있는 형식에 맞기를 바라고있다. 친절 하구나, 나는 여기서 새로운 사람이다. 나는 봇을 만드는 것을 좋아하지만 나는 프로그래머가 아니다. 감사.

+0

와우. 당신은 확실히 높은 수준으로 엔터테인먼트를 받아. :) –

답변

2

정규 표현식을 사용하여이 작업을 수행 할 수 있습니다.

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

출력은 문자열에서 발견 된 모든 숫자를 포함하는 배열입니다. "100의 제곱근은 10입니까?"와 같이 하나 이상인 경우

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

이 될 수 있으므로 스크립트에서 사용할 번호를 선택할 수 있습니다.

+0

''인생의 의미인가? 42? "'->'6.48' –

+0

원래의 질문과 같이 그 코드는 숫자 만 알려줄 것입니다. '미스터 영화'에는 이미 질문 한 질문을 처리 할 수있는 방법이있는 것으로 보입니다. – sachleen

+0

나는이 점이 분명하지 않을 것이라고 생각한다. "If 문"은 모든 불필요한 정보를가립니다. 정보가 없으면 문이 실행되지 않습니다. 그래서 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가 해로울 수 있다는 것을 몰랐습니다. w3fools에서 제안한대로 MDN 사이트로 변경했습니다. –