Fonction qui vérifie si un message contient tels mots. [Résolu]

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

Votre réponse

17 réponses

ricklekebekoi 305 Messages postés mardi 11 février 2003Date d'inscription 24 avril 2009 Dernière intervention - 8 juin 2007 à 18:57
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ricklekebekoi
ricklekebekoi 305 Messages postés mardi 11 février 2003Date d'inscription 24 avril 2009 Dernière intervention - 8 juin 2007 à 18:58
+3
Utile
petite erreur

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

Eric
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ricklekebekoi
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 7 juin 2007 à 19:16
0
Utile
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-
Commenter la réponse de cs_Bidou
madshell 59 Messages postés dimanche 29 avril 2007Date d'inscription 21 août 2007 Dernière intervention - 7 juin 2007 à 20:21
0
Utile
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 !!! :)");
                }
Commenter la réponse de madshell
madshell 59 Messages postés dimanche 29 avril 2007Date d'inscription 21 août 2007 Dernière intervention - 7 juin 2007 à 22:01
0
Utile
Euh non ça marche pas vraiment... et je ne trouve pas d'aide sur le net à ce sujet.
Commenter la réponse de madshell
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 7 juin 2007 à 22:11
0
Utile
msg.Contains("comensava") == 0

=>

msg.Contains("comensava")

<hr />
-Blog-
Commenter la réponse de cs_Bidou
madshell 59 Messages postés dimanche 29 avril 2007Date d'inscription 21 août 2007 Dernière intervention - 7 juin 2007 à 22:19
0
Utile
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") <-
Commenter la réponse de madshell
BaKaa 2 Messages postés dimanche 3 juin 2007Date d'inscription 7 juin 2007 Dernière intervention - 7 juin 2007 à 22:57
0
Utile
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] ]
Commenter la réponse de BaKaa
ricklekebekoi 305 Messages postés mardi 11 février 2003Date d'inscription 24 avril 2009 Dernière intervention - 8 juin 2007 à 00:27
0
Utile
Sinon, tu peux toujours faire


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

qui est l'équivalent de .Contains

Eric
Commenter la réponse de ricklekebekoi
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 8 juin 2007 à 08:14
0
Utile
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-
Commenter la réponse de cs_Bidou
madshell 59 Messages postés dimanche 29 avril 2007Date d'inscription 21 août 2007 Dernière intervention - 8 juin 2007 à 18:21
0
Utile
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.
Commenter la réponse de madshell
madshell 59 Messages postés dimanche 29 avril 2007Date d'inscription 21 août 2007 Dernière intervention - 10 juin 2007 à 17:46
0
Utile
Merci beaucoup Ricklekebekoi pour cette précieuse aide, mon robot va devenir intelligent graçe à toi.
Commenter la réponse de madshell
ricklekebekoi 305 Messages postés mardi 11 février 2003Date d'inscription 24 avril 2009 Dernière intervention - 10 juin 2007 à 18:46
0
Utile
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
Commenter la réponse de ricklekebekoi
madshell 59 Messages postés dimanche 29 avril 2007Date d'inscription 21 août 2007 Dernière intervention - 11 juin 2007 à 12:52
0
Utile
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.
Commenter la réponse de madshell
madshell 59 Messages postés dimanche 29 avril 2007Date d'inscription 21 août 2007 Dernière intervention - 11 juin 2007 à 12:53
0
Utile
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 ...
Commenter la réponse de madshell
ricklekebekoi 305 Messages postés mardi 11 février 2003Date d'inscription 24 avril 2009 Dernière intervention - 11 juin 2007 à 16:17
0
Utile
En fait, j'avais mis un espace avant et apres le "sa", soit " sa ", pour éviter cela

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.