2012-06-07 247 views
5

我有一個JavaScript聊天機器人,一個人可以在輸入框中鍵入任何他們喜歡的問題,並希望得到一個準確的答案。我可以做到這一點,但我知道我正在討論這一切都是錯誤的,因爲我不知道該數字在句子中會出現什麼位置。如果一個人正好輸入:數字搜索字符串

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」寫有一個原因。如果在這種情況下的輸入不包括單詞「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網站。 –