2016-03-19 13 views
2

Basit bir temel sorum var ve bu konuda hangi yaklaşımı kullanmam gerektiği konusunda takıldım.Javascript/jQuery, dizginin isteğe bağlı sözcüklerden biriyle mi yoksa kelime mi içerdiğini kontrol edin

Sohbet botum oluyorum. Yani, gerçek bir insan kullanıcısı her zaman bir mesaj yazdığında, kullanıcının mesajda hangi kelimeyi yazdığını ve daha sonra kendi kelimelerini temel alarak tespit etmesini istiyorum, bot özellikle cevap verecektir.

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

benim kod Örn çıkışı: Örnek 1: Kullanıcı: Merhaba! Bot: Hey !!

Örnek 2: Kullanıcı: Sabah Fellow Bot: Merhaba :)

Sadece daha sonra kullanıcı mesajının semantik anlamını tespit etmek ve istediklerini kullanıcıya dayalı yanıtı benim dizilerden söyledi.

kullanıcı bunlardan herhangi biri, bir kullanıcı anlamalıdır benim bot gitmek ve daha sonra bot ben düşünüyorum

":) bak" demeli istiyor vs "Take Care" "Bye" diyor ya gibi zaman Bu tür olayları eşleştirmek için Reg ex'e mi ihtiyacım var, yoksa String fonksiyonlar içeriyor mu? Herhangi bir temel kodlama örneği çok takdir edilecektir. Sadece bunu içerebilir Bunun yerine kendi manuel yanıtları yapma benim kodunda, NodeJS içinde Eliza Bot DB gibi bazı AIML kullanabilir ve geri cevap sonra Eliza Bot kullanıcı mesaj göndermek ve

VEYA Alternatif olarak, Eliza Bot cevapları ne olursa olsun.

+0

https://github.com/modInfo/Eliza.js-chatbot-in-NodeJS Eliza Bot'u socket.io uygulama koduma nasıl entegre edebilirim? Herhangi bir yardım? – Faizan

cevap

2

DizinOf kullanmayı denediniz mi? Bir dizide veya dizide belirli bir metni/dizeyi aramaya çalışıyorsanız .contains() gibi çalışır. Temelde kontrol etmek istediğiniz dizinin dizinini kontrol eder. Daha sonra ifadeyi doğru yapmak için bir çeşit koşul eklemeniz gerekir. ekleyerek

> -1 Mantıken onun endeksi dönecekti çünkü dize bulunursa dize bulundu ve gerçek değilse bu yanlış ifadeleri döneceğini konuşan

. ve endeks

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 
} 

kazanacağınızı bunu kontrol etmek 0.

deneyin başlar Henüz çok fazla itibarım olmadığı için yorum yazamam. :)

+0

Teşekkürler, ama tüm bu koşulları tek bir satırda yazmanın bir yolu var. Yani eğer kullanıcı dizgisi Hi, ya da merhaba içeriyorsa ya da hepsi aynı şeyi kastediyorsa, bu yüzden sadece bir blok kodun buna dayanarak doğru olmasını istiyorum .. bunun yerine birden çok şey yapmak.Tüm bu vakalar için geçerli olmak için sadece bir tane istiyorum. – Faizan

1

Şimdilik bir normal ifadeyi kullanabilirsiniz. Çok karmaşık değil gibi görünüyor. Örneğin van bunu kullanın:

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

Bu, kendi mantığı veya maç için kelimelerin bir sözlük programlama ile uzatabilirsiniz temel örnektir. Bu yardımcı olur umarım.

İlgili konular