搜索数字的字符串

时间:2012-06-07 23:45:17

标签: javascript math nlp string-parsing square-root

我有一个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 statemments”编写的。如果在这种情况下的输入不包括单词“what”和“square root”和“some number”,那么该行不会触发,并且机器人会通过通用的“我不知道类型响应”。所以我希望任何答案都适合我正在使用的格式。善待,我是新来的。我喜欢制作机器人,但我不是一个程序员。感谢。

2 个答案:

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

因此您可以选择要在脚本中使用的号码。

答案 1 :(得分:1)

你需要使用正则表达式,如果你不知道它们是什么,你应该查看它们,因为在这个响应中解释它们需要很长时间。这是一个有用的网站,用于JavaScript https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions中的正则表达式。

假设你知道正则表达式,你应首先搜索数字并存储你找到的所有数字,如果没有找到数字,则打印出错误信息。作为补充说明,您可以考虑搜索数学常量,例如pi或e。这应该工作

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

下一部分将是艰难的,但要将其归结为核心概念,您需要寻找关键词,例如'square root','times'或'plus'。你应该从左到右逐字逐句地做这个。例如,如果用户输入

What is 5 plus 3 minus 8?

你应该在减号之前检测加号,而如果输入了

What is 5 minus 3 plus 8?

你应该在加号前检测减号。

对于使用两个数字的操作,您需要获取找到的前两个数字并执行操作,并将两个数字替换为结果。我试图使用反向抛光表示法,如果你不太明白我想要做什么,如果不知道它是什么就查找它。

我希望我能正确理解你的问题并为解决问题提供一些帮助,因为你提出的问题非常困难,但看起来很有趣。祝好运。另外作为警告,我不在考虑我的回应中的操作顺序。