Пример #1
0
 /// <summary>
 /// Adds the responce given to the database.
 /// </summary>
 /// <returns>
 /// Returns true if responce was added to the database succesfully,
 /// returns false otherwise
 /// </returns>
 public static bool AddResponce(Responce res, ChatbotContext context)
 {
     context.Responce.Add(res);
     if (context.SaveChanges() == 1)
     {
         return(true);
     }
     return(false);
 }
Пример #2
0
        /// <summary>
        /// Grabs all responces from the database.
        /// </summary>
        /// <returns>
        /// Returns a list of all responces from the database
        /// </returns>
        public static List <Responce> GetAllResponces(ChatbotContext context)
        {
            List <Responce> res =
                (from r in context.Responce
                 orderby r.Input
                 select new Responce
            {
                ResponceID = r.ResponceID,
                Input = r.Input,
                Output = r.Output
            }).ToList();

            context.SaveChanges();
            return(res);
        }
Пример #3
0
        /// <summary>
        /// Grabs one responce from the database with the same Id given,
        /// Throws a KeyNotFoundException if not found
        /// </summary>
        /// <returns>
        /// Returns the responce with the same Id
        /// </returns>
        internal static Responce GetOneResponce(int responceID, ChatbotContext context)
        {
            Responce res =
                (from r in context.Responce
                 where r.ResponceID == responceID
                 select new Responce
            {
                ResponceID = r.ResponceID,
                Input = r.Input,
                Output = r.Output
            }).Single();

            context.SaveChanges();
            return(res);
        }
Пример #4
0
        /// <summary>
        /// Grabs all responces that have an input, and returns that as a list.
        /// if no such input exists, returns an empty list
        /// </summary>
        /// <returns>
        /// Returns a list of all responces with the same input given,
        /// returns an empty list if no responces have that input
        /// </returns>
        public static List <Responce> GetSomeResponces(string input, ChatbotContext context)
        {
            List <Responce> res =
                (from r in context.Responce
                 where r.Input == input
                 orderby r.Input
                 select new Responce
            {
                ResponceID = r.ResponceID,
                Input = r.Input,
                Output = r.Output
            }).ToList();

            context.SaveChanges();
            return(res);
        }
Пример #5
0
        public Response GetResult(string search)
        {
            Response response       = new Response();
            var      ListCompetence = new List <string>()
            {
                "Nous espérons que notre reponse correspond à vos attentes",
                "Cette réponse générique."
            };

            var ListNotResult = new List <string>()
            {
                "Nous rencontrons quelques problèmes techniques, nous vous invitons à consulter notre " +
                "FAQ ou de consulter note service par téléphone au +32 000 111 222",
                "Nous ne pouvons pas vous donner de reponse à cette question",
                "Aucun resultat pour cette question",
                "Nous n'avons pas de reponse à cette préocupation",
                "Votre question contient probablement des fautes de frappes. Vérifiez et réessayez",
                "Votre question est en dehors de notre domaine de compétence."
            };


            var search1 = search.ToLower().Trim();
            var l       = list.Where(f => f.Key.ToLower().Trim().Contains(search1)).ToList();

            bool istrue = false;

            string competence = null;

            if (l.Count == 0)
            {
                l = list.Where(f => f.Value.ToLower().Trim().Contains(search1)).ToList();
                System.Threading.Thread.Sleep(500);
                competence = ListCompetence[(new Random()).Next(0, ListCompetence.Count)];
                istrue     = true;
            }


            if (l.Count == 0)
            {
                list.Where(f => search1.Contains(f.Key.ToLower().Trim())).ToList();

                if (l.Count == 0)
                {
                    l = list.Where(f => search1.Contains(f.Value.ToLower().Trim())).ToList();
                }
                if (l.Count > 0)
                {
                    System.Threading.Thread.Sleep(500);
                    competence = ListCompetence[(new Random()).Next(0, ListCompetence.Count)];
                }
            }

            //enlever tous les reponses qui n'ont pas de valeur
            l = l.Where(f => !string.IsNullOrEmpty(f.Value)).ToList();

            //indisponibilité de la reponse
            if (l.Count == 0)
            {
                l = list.Where(f => f.Key.ToLower().Trim().Contains(search1)).ToList();
                // principe
                // parcourir la liste de nos faits
                // pour chaque fait
                // on doit verifier la presence de chaque mot de la liste des mots de la recherche de l'utilisateur
                //dans un fait et si un mot s'y trouve on compte.
                //si au final plus de la moitié des mots de la recherche de l'utilisateur se trouve dans
                // le fait alors on suppose que le fait est resultat de la recherche
                // par consequent on ajoute le fait dans la liste des resultats
                var result = SplitPhrase(search);
                foreach (var travelHelp in list)
                {
                    var countValue = 0;
                    var countKey   = 0;
                    foreach (var item in result)
                    {
                        if (travelHelp.Key.ToLower().Trim().Contains(item.Trim().ToLower()))
                        {
                            countKey++;
                        }
                        if (travelHelp.Value.ToLower().Trim().Contains(item.Trim().ToLower()))
                        {
                            countValue++;
                        }
                    }


                    if (countValue > result.Count / 2 || countKey > result.Count / 2)
                    {
                        travelHelp.Id = countValue > countKey ? countValue : countKey;
                        l.Add(travelHelp);
                    }
                }



                if (l.Count > 0)
                {
                    //Il est propable que le fait (question)  qui contient plus de mots de l'utilisateur
                    // soit la question que  l'utilisateur souhaite poser
                    var travel = l.OrderByDescending(f => f.Id).FirstOrDefault();
                    response = response = new Response()
                    {
                        Key      = null,
                        BotBegin = false,
                        Value    = travel.Value,
                        Search   = search
                    };
                    listResponse.Add(response);
                }
                else
                {
                    //aucune reponse trouvé il n'y a aucun fait qui correspond
                    // à la question de l'utilisateur

                    System.Threading.Thread.Sleep(500);
                    response = new Response()
                    {
                        Key      = null,
                        BotBegin = false,
                        Value    = ListNotResult[(new Random()).Next(0, ListNotResult.Count)],
                        Search   = search
                    };
                    listResponse.Add(response);

                    string uriString = "http://www.google.com/search";

                    WebClient webClient = new WebClient();

                    NameValueCollection nameValueCollection = new NameValueCollection();
                    nameValueCollection.Add("q", search);

                    webClient.QueryString.Add(nameValueCollection);
                    var val         = webClient.DownloadString(uriString);
                    var link        = $"https://www.google.com/search?q={search}";
                    var proposition = $"Je vous recommende ce lien" +
                                      $"<a href='{link}' target='_blank' > {search} </a>";
                    //ajouter le fait dans la bd
                    var tHp = new TravelHelp()
                    {
                        Key   = search,
                        Value = proposition
                    };
                    db.TravelHelps.Add(tHp);
                    db.SaveChanges();
                    list = db.TravelHelps.ToList().Where(f => !string.IsNullOrEmpty(f.Key)).OrderBy(f => f.Key).ToList();
                }
            }
            else
            {
                if (l.Count == 1)
                {
                    var travelhelp = l.FirstOrDefault();
                    response = new Response()
                    {
                        Key      = istrue ? competence: null,
                        Value    = travelhelp.Value,
                        BotBegin = false,
                        Search   = search
                    };
                    response.Key = string.IsNullOrEmpty(competence) ? response.Key : competence;
                    listResponse.Add(response);
                }
                else
                {
                    var alea = new Random();
                    l = l.Where(f => !f.Value.ToString().ToLower().Contains("html")).ToList();
                    var travelhelp = l[alea.Next(0, l.Count)];
                    response = new Response()
                    {
                        Key      = istrue ? competence : null,
                        Value    = travelhelp.Value,
                        BotBegin = false,
                        Search   = search
                    };
                    response.Key = string.IsNullOrEmpty(competence) ? response.Key : competence;
                    listResponse.Add(response);
                }
            }
            return(response);
        }