madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 2007
-
7 juin 2007 à 19:09
madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 2007
-
12 juin 2007 à 09:19
Bonjour à tous,
Je débute dans la programmation et j'ai juste l'intention de développer un bot MSN assez simple. J'ai un code source de départ mais j'aimerais savoir s'il existe une fonction qui vérifie si un mot est présent dans la phrase de l'utilisateur au lieu de comparer la phrase entière avec : "CompareIt".
else if
( msg.CompareTo("salutsava") 0 || msg.CompareTo("sava") 0 || msg.CompareTo("comensava") 0 || msg.CompareTo("commentsava") 0 || msg.CompareTo("cava") 0 || msg.CompareTo("commentvatu") 0 || msg.CompareTo("salutcava") 0 || msg.CompareTo("bonjoursava") 0 || msg.CompareTo("tuvasbien") 0 || msg.CompareTo("tuvabien") 0
)
{
Random rand = new Random(DateTime.Now.Millisecond);
int value = rand.Next(3);
if (value == 0) session.send("Moi sa va bien :)");
else if (value == 1) session.send("Je pete la forme LOL ;)");
else if (value == 2) session.send("Sa va sa va !!! :)");
}
Exemple je dis au robot : salut ca va, il réponds => Moi sa va bien (par exemple)
Et quand je lui dis : bjr ca va, il comprends rien => Désolé, je ne comprends pas ...
J'aimerais savoir si je peux remplacer le CompareTo pour simplement vérifier si le mot est présent (ou plusieurs mots) sont présents.
Par exemple, dès qu'il voit que l'utilisateur utilise les mots : "tu" "va" dans n'importe quel sens : le robot peut répondre => ça va !
J'éspère avoir été assez clair pour obtenir de l'aide. Merci d'avance à vous.
ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 20095 8 juin 2007 à 18:57
Hmmm, ya sa qui le fait, mais c pas tres intelligent, car si tu dit quelquechose comme "Va me chercher du lait, ça serait gentil", eh bah sa va le prendre en compte.
Tu peux toujours faire cela, c'est déjà mieux, ça vérifie que le "va" vient apres le "ça", sauf que encore là, ya possibilité de lire quelquechose comme "ça fait 2 fois qu'il va chercher du lait"
if( msg.IndexOf("ça") > -1 && msg.IndexOf("va")> msg.IndexOf("ça"))
Alors moi ce que je propose c'est ça:
if( msg.IndexOf("ça") > -1 && msg.IndexOf("va")> msg.IndexOf("ça") && msg.IndexOf("ça") - msg.IndexOf("va") <= 3 )
Ça régit donc à ce qu'il y ait un espace ou pas entre, et sa s'assur qu'ils se suivent dans la plupart des cas.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 7 juin 2007 à 19:16
Salut,
La class string possède une méthode Contains qui te permet de savoir si une occurance est présente dans ton string (voire également les méthodes IndexOf et compagnies).
Sinon, tu peux aussi regarder du côté des expressions régulières...
madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 20077 7 juin 2007 à 20:21
Ca ça peut marcher ? Eh doucement je débute.
else if
( msg.Contains("salutsava") 0 || msg.CompareTo("sava") 0 || msg.Contains("comensava") 0 || msg.CompareTo("commentsava") 0 || msg.Contains("cava") 0 || msg.CompareTo("commentvatu") 0 || msg.Contains("salutcava") 0 || msg.CompareTo("bonjoursava") 0 || msg.Contains("tuvasbien") 0 || msg.CompareTo("tuvabien") 0
)
{
Random rand = new Random(DateTime.Now.Millisecond);
int value = rand.Next(3);
if (value == 0) session.send("Moi sa va bien :)");
else if (value == 1) session.send("Je pete la forme LOL ;)");
else if (value == 2) session.send("Sa va sa va !!! :)");
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 20077 7 juin 2007 à 22:19
Dans mon compilateur, j'ai cette erreur après avoir utilisé ce code :
if
(
msg.Contains("salut")
)
{
Random rand = new Random(DateTime.Now.Millisecond);
int value = rand.Next(3); //La valeur max (3 ici) n'est pas pris en compte. Donc .Next(x) et x est le nombre de question ;)
if (value == 0) session.send("Salut "+session.getUser().getFriendlyName());
else if (value == 1) session.send("Hello !!!");
else if (value == 2) session.send("Slt !!! :)");
}
String does not contain a definition for 'Contains' (CS0117) à la ligne -> msg.Contains("salut") <-
Sinon, à part ça, un conseil quand tu dois comparer des chaines de caractères, utilise la méthode ToLower() car si tu as des caractères en majuscule dans le msg ça n'ira pas.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 8 juin 2007 à 08:14
Arf oui, il fallait dire que tu travaillais avec un framework ancestrale...
Le plus simple reste alors effectivement la méthode IndeOf (comme dit déjà plus haut).
Mais bon, si regardes juste si y'a quelques mot dans une phrase, ton bot ne sera pas très intelligent
madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 20077 8 juin 2007 à 18:21
C'est toujours mieux que de regarder si la phrase est identique a une enregistré => là il est encore moins inteligent !
Euh enfin si tu me propose une autre méthode je suis preneur ...
J'avais pensé a combiner plusieurs mots comme : "ça" "va" " pour que le robot sache qu'on lui demande s'il va bien.
Je pense utiliser IndexOf puisque j'utilise SDK 1.1 mais comment puis combiner plusieurs mots ?
Pour ce qui est du tolower je n'est pas besoin de le mettre là, c'est déjà prévu au début du script pour que le message devienne en minuscules avec cette même fonction mais merci.
ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 20095 10 juin 2007 à 18:46
de plus, je te conseil au départ de faire un truc du style cela:
msg = msg.Replace(" sa "," ça ").Replace(" ca "," ça ").Replace(" cela "," ça ");
du coup, qu'on écrive:
"salut sa va", "salut, ca va" ou "salut, ça va", toi ensuite t'à qu'a tester le "ça", et a chaque fois que tu voudra tester un "sa/ca/ça/cela", t'aura qu'a tester le "ça" ...
madshell
Messages postés59Date d'inscriptiondimanche 29 avril 2007StatutMembreDernière intervention21 août 20077 11 juin 2007 à 12:52
J'avais déjà supprimé avec cette fonction les caracteres spéciaux et les espaces (question de simplicité) mais c'est vrai que ton astuce n'est pas bête ! Merci bien je vais l'essayer.