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

明確にするために、ボットが「If ステートメント」を使用して記述されているのには理由があります。この場合の入力に「what」、「平方根」、「some number」という単語が含まれていない場合、行はトリガーされず、ボットによって一般的な「タイプがわからない」でさらに下に回答されます。応答"。だから、どんな答えも私が使っているフォーマットに合うことを願っています。親切にしてください、私はここに来たばかりです。ボットを作るのは好きですが、プログラマーはあまり得意ではありません。ありがとう。

4

2 に答える 2

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"]

そのため、スクリプトで使用する番号を選択できます。

于 2012-06-07T23:52:59.630 に答える
1

正規表現を使用する必要があります。正規表現がわからない場合は、この応答で説明すると時間がかかりすぎるため、調べてください。JavaScript の正規表現に関する便利な Web サイト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?

プラスの前にマイナスを検出する必要があります。

2 つの数値を使用する演算では、最初に見つかった 2 つの数値を取得して演算を実行し、2 つの数値を結果に置き換える必要があります。私がやろうとしていることをよく理解していない場合は、逆ポーランド記法を使用しようとしています。それが何であるかわからない場合は調べてください。

私はあなたの質問を正しく理解し、解決策にたどり着くための助けを提供したことを願っています. 幸運を。また、警告として、私は応答で操作の順序を考慮していません。

于 2012-06-08T09:28:42.267 に答える