我有一个简单的基本问题,但我不知道应该采取哪种方法。
我正在创建一个聊天机器人。因此,每次真正的人类用户输入一条消息时,我想检测用户在消息中输入了哪些单词,然后根据他/她的单词,机器人会专门回复。
// 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: 用户:您好! 机器人:嘿!!
实例 2: 用户:早安同学 机器人:你好:)
我只想检测用户消息的语义,然后根据用户从我的数组中所说的内容进行回复。
就像当用户说“再见”或“保重”等其中任何一个时,我的机器人应该理解用户想去,然后机器人应该说“保重:)”
我想我需要 Reg ex 来匹配此类事件或字符串包含函数?任何基本的编码示例将不胜感激。
或者,我可以使用一些 AIML(例如 NodeJS 中的 Eliza Bot DB)来代替自己手动响应,这样我就可以将其包含在我的代码中并将用户消息发送给 Eliza Bot然后回复 Eliza Bot 回复的内容。
最佳答案
您尝试过使用indexOf吗?如果您尝试在字符串或数组上搜索特定文本/字符串,它的工作方式类似于 .contains() 。它基本上检查您想要检查的字符串的索引。然后您只需添加某种条件即可使该语句成立。
By adding > -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
}
附注我无法写评论,因为我还没有太多声誉。 :)
关于Javascript/jQuery 检查字符串是否包含单词或可选单词之一的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36101939/