我有一个简单的基本问题,我不知道应该采用哪种方法。
我正在创建一个聊天机器人。因此,每当真正的人类用户键入消息时,我想要检测用户在消息中键入哪些单词,然后根据他/她的单词,机器人将特别回复。
// 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
E.g输出我的代码: 实例1: 网友:您好! Bot:嘿!!
实例2: 用户:Morning Fellow 机器人:您好:)
我只是想检测用户消息的语义含义,然后根据用户从我的数组中说出来回复。
当用户说“再见”或“保重”等任何一个时,我的机器人应该了解用户想去,然后机器人应该说“保重:)”
我在想我需要Reg ex来匹配这样的事件或String包含函数吗?任何基本的编码示例都将非常感激。
或者,我可以在NodeJS中使用像Eliza Bot DB这样的AIML,而不是自己的手动响应,这样我就可以将它包含在我的代码中并将用户消息发送给Eliza Bot然后回复Eliza Bot回复的任何内容。
答案 0 :(得分:2)
您是否尝试过使用indexOf?如果你试图在字符串或数组上搜索特定的文本/字符串,它就像.contains()。它基本上检查您要检查的字符串的索引。然后你只需要添加某种条件来使语句成立。
添加> -1
从逻辑上讲,如果找不到string,它将返回false语句;如果找到string则返回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
}
P.S。我不能写评论,因为我还没有太多的声誉。 :)
答案 1 :(得分:1)
你现在可以使用正则表达式。看起来并不那么复杂。例如,你使用这个:
//Use your array here with a regex with your own logic.
var myRegExp = /Hello/;
var userText = "Hello my friend";
if(myRegExp.test(userText))
{
console.log("Found a Hello!")
}
这是一个基本示例,您可以使用自己的逻辑扩展或编写要匹配的单词词典。希望这会有所帮助。