我有一个简单的基本问题,我被困在应该采取哪种方法上。
我正在创建一个聊天机器人。因此,每当一个真正的人类用户键入一条消息时,我都希望检测用户在消息中键入了哪些单词,然后根据他/她的单词,该机器人将特别回复。
// 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
}
附言由于我的声誉不高,所以我无法发表评论。 :)