Fonction qui vérifie si un message contient tels mots.

Résolu
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 - 7 juin 2007 à 19:09
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 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.

17 réponses

ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
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.

if(  msg.IndexOf("ça") > -1 && msg.IndexOf("va")> -1)

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.

Eric
3
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
8 juin 2007 à 18:58
petite erreur

if(  msg.IndexOf("ça") > -1 && msg.IndexOf("va")> msg.IndexOf("ça") && msg.IndexOf("va") - msg.IndexOf("ça") <= 3 )

Eric
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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...

<hr />
-Blog-
0
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
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 !!! :)");
                }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
7 juin 2007 à 22:01
Euh non ça marche pas vraiment... et je ne trouve pas d'aide sur le net à ce sujet.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 juin 2007 à 22:11
msg.Contains("comensava") == 0

=>

msg.Contains("comensava")

<hr />
-Blog-
0
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
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") <-
0
BaKaa Messages postés 2 Date d'inscription dimanche 3 juin 2007 Statut Membre Dernière intervention 7 juin 2007
7 juin 2007 à 22:57
La méthode Contains n'est disponible qu'a partir de la v2 du Framework .NET, tu peux télécharger le SDK sur le [http://msdn2.microsoft.com/fr-fr/netframework/aa731542 site de Microsoft[url].

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.


Ex:
msg.ToLower().Contains("salut");


[ [url=http://blog2baka.goldzoneweb.info]Blog] ]
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
8 juin 2007 à 00:27
Sinon, tu peux toujours faire


if(  msg.ToLower().IndexOf("salut") > -1 )

qui est l'équivalent de .Contains

Eric
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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  

<hr />
-Blog-
0
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
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.
0
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
10 juin 2007 à 17:46
Merci beaucoup Ricklekebekoi pour cette précieuse aide, mon robot va devenir intelligent graçe à toi.
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
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" ...

Parce que dieu sait que sur msn ....

Eric
0
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
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.
0
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
11 juin 2007 à 12:53
Ah non finalement, je ne préfère pas l'utiliser car si on veux dire au robot : Espece de salade il va comprendre : espece de calade ...
0
ricklekebekoi Messages postés 303 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 24 avril 2009 5
11 juin 2007 à 16:17
En fait, j'avais mis un espace avant et apres le "sa", soit " sa ", pour éviter cela

Eric
0
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
12 juin 2007 à 09:19
Oui mais : sa maman => ça maman ?
Enfin, le bot avance bien... tu peux le tester si tu veux : robeauf at hotmail.fr (msn)
0
Rejoignez-nous