/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }