5

我有一个 javascript 聊天机器人,人们可以在输入框中输入他们喜欢的任何问题,并希望得到准确的答案。我可以这样做,但我知道我做错了,因为我不知道数字将出现在句子中的哪个位置。如果一个人准确地输入:

5 的平方根是多少,这很好用。

如果他输入这样的东西,它不会。

5的平方根是多少

5的平方根是什么

你知道5的平方根是多少吗

ETC

我需要能够确定数字出现在句子中的位置,然后从那里进行计算。请注意,下面的行是更大的工作聊天机器人的一部分。在下面的行中,我只是想能够回答任何平方根问题,而不管数字出现在句子中的什么位置。我也知道开放式输入框有很多陷阱,人们可以在其中输入任何内容,例如拼写错误等。这只是为了娱乐而不是一个严肃的科学项目。:)

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”和“square root”以及“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 正则表达式网站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?

您应该在加号之前检测到减号。

对于使用两个数字的操作,您需要获取找到的前两个数字并执行操作并将这两个数字替换为结果。如果您不太了解我要做什么,我正在尝试使用反向波兰符号,如果不知道它是什么,请查看它。

我希望我正确理解了您的问题,并为找到解决方案提供了一些帮助,因为您提出的问题很难但看起来很有趣。祝你好运。另外作为警告,我没有在我的回复中考虑操作顺序。

于 2012-06-08T09:28:42.267 回答