2016-03-19 24 views
2

Ich habe eine einfache grundlegende Frage und ich bin fest, über welchen Ansatz sollte ich in diesem nehmen.Javascript/jQuery überprüfen, ob String ein Wort oder Vorkommen eines der optionalen Wörter enthält

Ich erstelle einen Chat-Bot. Jedes Mal, wenn ein echter menschlicher Benutzer eine Nachricht eintippt, möchte ich herausfinden, welche Wörter der Benutzer in die Nachricht eingegeben hat, und dann wird der Bot anhand seiner Worte antworten.

// 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 

Z. B Ausgang meines Codes: Instanz 1: Benutzer: Hallo! Bot: Hey !!

Instanz 2: Benutzer: Morgen Fellow Bot: Hallo :)

Ich möchte nur die semantische Bedeutung der Benutzernachricht erkennen und von meinem Arrays Antwort sagte dann basierend auf welchem ​​Benutzer.

Wie, wenn Benutzer sagt: „Bye“ oder „Take Care“ etc einer dieser, sollte mein Bot User verstehen will gehen und dann sollte bot sagen: „Achten Sie darauf :)“

Ich denke dabei an Ich brauche Reg ex, um solche Vorkommen oder String-Funktionen zu finden? Irgendwelche grundlegenden Kodierungsbeispiele würden sehr geschätzt werden.

oder alternativ Statt meine eigenen manuellen Antworten machen kann ich einige AIML wie Eliza Bietet DB in NodeJS verwenden, so dass ich nur kann es in meinem Code enthalten und die Benutzer Nachricht an Eliza Bot senden und dann antworten zurück was auch immer Eliza Bot antwortet.

+0

https://github.com/modInfo/Eliza.js-chatbot-in-NodeJS Wie kann ich Eliza Bot in meinen socket.io Anwendungscode integrieren? Irgendwelche Hilfe? – Faizan

Antwort

2

Haben Sie versucht mit IndexOf? Es funktioniert wie .contains(), wenn Sie versuchen, einen bestimmten Text/String in einer Zeichenfolge oder einem Array zu suchen. Es überprüft grundsätzlich den Index der zu überprüfenden Zeichenfolge. Dann müssen Sie nur eine Bedingung hinzufügen, um die Aussage wahr zu machen.

Durch das Hinzufügen> -1

Logisch gesehen, es wäre eine falsche Anweisungen geben, wenn der String nicht gefunden wird, und dann, wenn Zeichenfolge gefunden wird, da es seinen Index zurückkehren würde. und Index beginnt bei 0.

versuchen, dies zu überprüfen,

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. Ich konnte keinen Kommentar schreiben, da ich noch nicht viel Ansehen habe. :)

+0

Gut danke, aber gibt es eine Möglichkeit, alle diese Bedingungen in einer Zeile zu schreiben. Ich meine, wenn die Benutzerzeichenfolge entweder Hallo oder Hallo oder hey sie alle die gleiche Sache, so dass ich nur einen Block von Code basierend darauf true .. statt mehrere Dinge.Ich will nur eins, wenn ich in all diesen Fällen wahr sein will. – Faizan

1

Sie könnten eine Regex für jetzt verwenden. Es scheint nicht so kompliziert zu sein. Sie können beispielsweise van verwenden:

//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!") 
} 

Dies ist ein einfaches Beispiel, das Sie mit Ihrem eigenen Logik oder Programmierung ein Wörterbuch von Wörtern entsprechen erweitern können. Hoffe das hilft.

Verwandte Themen