我有一个简单的基本问题,我被困在应该采取哪种方法上。

我正在创建一个聊天机器人。因此,每当一个真正的人类用户键入一条消息时,我都希望检测用户在消息中键入了哪些单词,然后根据他/她的单词,该机器人将特别回复。

 // A string containing user message
        var UserMsg = data.message;
////Means if ANY ONE of this words are contained in user message then I will tell the bot to respond to the greeting message.
    if UserMsg.contains("Hi", "Hello", "Hey", "Morning");

    var welcomeArray = ['Hey!!', 'Hi', 'Hello :)'];

 //gets a random welcome msg to respond
      var welcomeMsg = welcomeArray[Math.floor(Math.random() * welcomeArray.length)];


      if(data.message=='Hi') //if user says Hi or hello hey etc
       socket.emit('message', 'welcomeMsg'); //Bot will respond by one of the random greetings messages


例如我的代码输出:
实例1:
   用户:你好!
   Bot:嘿!

实例2:
   用户:上午研究员
   机器人:你好:)

我只想检测用户消息的语义,然后根据用户从我的数组中说出的内容进行回复。

就像当用户说“再见”或“保重”等其中任何一种时,我的机器人应了解用户想要离开,然后机器人应说“保重:)”

我在想我需要Reg ex来匹配这种情况或String contains函数吗?任何基本的编码示例将不胜感激。

或者,或者,我可以使用一些AIML(例如NodeJS中的Eliza Bot DB)来代替自己做出手动响应,这样我就可以将其包含在代码中,然后将用户消息发送给Eliza Bot,然后回信Eliza Bot的答复。

最佳答案

您是否尝试过使用indexOf?如果您要搜索字符串或数组上的特定文本/字符串,它的工作方式类似于.contains()。它基本上检查您要检查的字符串的索引。然后,您只需要添加某种条件即可使该语句为真。


  通过添加> -1


从逻辑上讲,如果找不到字符串,它将返回false语句;如果找到字符串,则将返回true,因为它将返回其索引。索引从0开始。

尝试检查一下

var data = {
   message1 : 'Hi there', message2 : 'Hello there', message3 : 'Hey bot',message4 : 'Good Morning'
}

var userMsg = data;

if (userMsg.message1.indexOf('Hi') > -1) {
   //Do something
}

if (userMsg.message2.indexOf('Hello') > -1) {
   //Do something
}
if (userMsg.message3.indexOf('Hey') > -1) {
   //Do something
}

if (userMsg.message4.indexOf('Morning') > -1) {
   //Do something
}


附言由于我的声誉不高,所以我无法发表评论。 :)

10-05 23:03
查看更多