public KeyValuePair <int, string> GetEntityforIntent(ChatIntent intent) { string entity = string.Empty; List <ChatEntity> entityList = new List <ChatEntity>(); // db.ChatEntity.Where(z => z.ChatIntentId == chatIntentId.ToString()).ToList(); List <string> questionList = db.ChatIntentQuestion.Where(x => x.ChatIntentId == intent.ChatIntentId && x.QuestionDesc.ToLower().Contains("entity")).Select(y => y.QuestionDesc).ToList(); TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; KeyValuePair <int, string> responseIntent = new KeyValuePair <int, string>(); int foundEntityMatch = 0; string extractedEntityName = string.Empty; string extractedEntityValue = string.Empty; foreach (string question in questionList) { string textPriortoEntityinQuestion = string.Empty; string textPriortoEntityinMessage = string.Empty; int iStart = question.IndexOf("["); int iEnd = question.IndexOf("]"); if (iStart != -1 && iEnd != -1) { extractedEntityName = question.Substring(iStart + 1, iEnd - iStart - 1); textPriortoEntityinQuestion = question.Substring(0, iStart); textPriortoEntityinMessage = Message.Substring(0, iStart); LevenshteinDistance dist = new LevenshteinDistance(); int matching = dist.Compute(textPriortoEntityinQuestion.ToLower(), textPriortoEntityinMessage.ToLower()); if (matching <= 6) { int iStartSpace = textPriortoEntityinMessage.LastIndexOf(" "); int iEndSpace = Message.IndexOf(",", textPriortoEntityinMessage.Length); if (iEndSpace == -1) { iEndSpace = Message.Length; } extractedEntityValue = Message.Substring(iStartSpace, iEndSpace - iStartSpace); extractedEntityValue = textInfo.ToTitleCase(extractedEntityValue); AskMeOnlineApi online = new AskMeOnlineApi(); responseIntent = online.OnlineApiChannel(intent, extractedEntityName, extractedEntityValue); foundEntityMatch = foundEntityMatch + 1; break; } } } if (foundEntityMatch == 0) { ChatIntent noEntityFound = db.ChatIntent.Where(x => x.ParentId == intent.ChatIntentId).Where(x => x.IntentName.Contains("Entity")).FirstOrDefault(); HttpContext httpContext = HttpContext.Current; httpContext.Session["EntityIssue"] = extractedEntityName; responseIntent = new KeyValuePair <int, string>(noEntityFound.ChatIntentId, noEntityFound.Response); } return(responseIntent); }
public KeyValuePair <int, string> PutEntityforIntent(ChatIntent intent) { KeyValuePair <int, string> responseIntent = new KeyValuePair <int, string>(); HttpContext httpContext = HttpContext.Current; if (httpContext.Session["EntityIssue"] != null) { string extractedEntityName = httpContext.Session["EntityIssue"].ToString(); string extractedEntityValue = Message; AskMeOnlineApi online = new AskMeOnlineApi(); responseIntent = online.OnlineApiChannel(intent, extractedEntityName, extractedEntityValue); httpContext.Session["EntityIssue"] = null; } else { responseIntent = new KeyValuePair <int, string>(intent.ChatIntentId, "Sorry, i did not understand"); } return(responseIntent); }
public KeyValuePair <int, string> CheckIfAtleastOneEntityHasValue(List <ChatSessionEntity> entityListRecognized) { AskMeEntityExtracttionNLP nlp = new AskMeEntityExtracttionNLP(); List <EntityRecognition> entityListMessage = new List <EntityRecognition>(); List <ChatEntity> entityListDb = db.ChatEntity.Where(x => x.ChatIntentId == Node).ToList(); if (entityListDb.Where(x => x.EntityType.Contains("PERSON")).Any() || entityListDb.Where(x => x.EntityType.Contains("LOCATION")).Any()) { entityListMessage = nlp.ExtractionChannel(Message); } HttpContext httpContext = HttpContext.Current; foreach (ChatSessionEntity entityRecognized in entityListRecognized) { if (entityRecognized.NotRecognized) { if (entityRecognized.EntityName.ToUpper().Contains("PERSON")) { if (entityListMessage.Where(x => x.EntityType == "PERSON").Any()) { entityRecognized.EntityValue = entityListMessage.Where(x => x.EntityType == "PERSON").Select(Y => Y.EntityValue).FirstOrDefault(); entityRecognized.EntityType = "PERSON"; entityRecognized.NotRecognized = false; if (entityRecognized.EntityName.ToUpper().Contains("USERNAME")) { httpContext.Session["authUser"] = entityRecognized.EntityValue; ChatSession chatSession = db.ChatSession.Where(x => x.SessionId == SessionId).FirstOrDefault(); chatSession.SessionUd = entityRecognized.EntityValue; db.SaveChanges(); } } } else if (entityRecognized.EntityName.ToUpper().Contains("LOCATION")) { if (entityListMessage.Where(x => x.EntityType == "LOCATION").Any()) { entityRecognized.EntityValue = entityListMessage.Where(x => x.EntityType == "LOCATION").Select(Y => Y.EntityValue).FirstOrDefault(); entityRecognized.EntityType = "LOCATION"; entityRecognized.NotRecognized = false; } } else if (entityRecognized.EntityName.ToUpper().Contains("NUMBER")) { string numericValue = new String(Message.Where(Char.IsDigit).ToArray()); if (numericValue.Length > 0) { entityRecognized.EntityValue = numericValue; entityRecognized.EntityType = "NUMBER"; entityRecognized.NotRecognized = false; } } } } string noEntityMessage = string.Empty; foreach (ChatSessionEntity recognized in entityListRecognized) { ChatSessionEntity sessionEntity = new ChatSessionEntity(); sessionEntity.SessionId = SessionId; sessionEntity.EntityType = recognized.EntityType; sessionEntity.EntityName = recognized.EntityName; sessionEntity.EntityValue = recognized.EntityValue; sessionEntity.NotRecognized = recognized.NotRecognized; if (recognized.NotRecognized) { noEntityMessage = noEntityMessage + recognized.EntityValue + " "; } } db.SaveChanges(); if (noEntityMessage.Length > 1) { Message = noEntityMessage; httpContext.Session[Node.ToString()] = entityListRecognized; } else { AskMeOnlineApi onlineApi = new AskMeOnlineApi(); ChatIntent forOnline = db.ChatIntent.Where(x => x.ChatIntentId == Node).FirstOrDefault(); return(onlineApi.OnlineApiChannelforNLP(forOnline, entityListRecognized)); } return(new KeyValuePair <int, string>(Node, Message)); }
public ChatIntent GetEntityforIntentfromNLP(ChatIntent responseIntent) { AskMeEntityExtracttionNLP nlp = new AskMeEntityExtracttionNLP(); List <EntityRecognition> entityListMessage = new List <EntityRecognition>(); List <EntityRecognized> entityListRecognized = new List <EntityRecognized>(); List <ChatEntity> entityListDb = db.ChatEntity.Where(x => x.ChatIntentId == Node).ToList(); if (entityListDb.Where(x => x.EntityType.Contains("PERSON")).Any() || entityListDb.Where(x => x.EntityType.Contains("LOCATION")).Any()) { entityListMessage = nlp.ExtractionChannel(Message); } HttpContext httpContext = HttpContext.Current; foreach (ChatEntity entity in entityListDb) { if (entity.EntityType.ToUpper().Contains("PERSON") && entityListMessage.Count > 0) { var hasRecognition = entityListMessage.Where(x => x.EntityType == "PERSON"); if (hasRecognition.Any()) { EntityRecognition recog = hasRecognition.FirstOrDefault(); EntityRecognized recognized = new EntityRecognized(); recognized.EntityType = entity.EntityType; recognized.EntityName = entity.EntityName; recognized.EntityValue = recog.EntityValue; recognized.NotRecognized = false; entityListRecognized.Add(recognized); if (entity.EntityName.ToUpper().Contains("USERNAME")) { httpContext.Session["authUser"] = recog.EntityValue; ChatSession chatSession = db.ChatSession.Where(x => x.SessionId == SessionId).FirstOrDefault(); chatSession.SessionUd = recog.EntityValue; db.SaveChanges(); } } } else if (entity.EntityType.ToUpper().Contains("LOCATION") && entityListMessage.Count > 0) { var hasRecognition = entityListMessage.Where(x => x.EntityType == "LOCATION"); if (hasRecognition.Any()) { EntityRecognition recog = hasRecognition.FirstOrDefault(); EntityRecognized recognized = new EntityRecognized(); recognized.EntityType = entity.EntityType; recognized.EntityName = entity.EntityName; recognized.EntityValue = recog.EntityValue; recognized.NotRecognized = false; entityListRecognized.Add(recognized); } } else if (entity.EntityType.ToUpper().Contains("NUMBER") && entityListMessage.Count > 0) { string numericValue = new String(Message.Where(Char.IsDigit).ToArray()); if (numericValue.Length > 0) { EntityRecognized recognized = new EntityRecognized(); recognized.EntityType = entity.EntityType; recognized.EntityName = entity.EntityName; recognized.EntityValue = numericValue; recognized.NotRecognized = false; entityListRecognized.Add(recognized); } } else { EntityRecognized recognized = new EntityRecognized(); recognized.EntityType = entity.EntityType; recognized.EntityName = entity.EntityName; recognized.EntityValue = entity.EntityDescription; recognized.NotRecognized = true; entityListRecognized.Add(recognized); } } string noEntityMessage = string.Empty; List <ChatSessionEntity> sessionEntityList = new List <ChatSessionEntity>(); foreach (EntityRecognized recognized in entityListRecognized) { ChatSessionEntity sessionEntity = new ChatSessionEntity(); sessionEntity.SessionId = SessionId; sessionEntity.EntityType = recognized.EntityType; sessionEntity.EntityName = recognized.EntityName; sessionEntity.EntityValue = recognized.EntityValue; sessionEntity.NotRecognized = recognized.NotRecognized; db.ChatSessionEntity.Add(sessionEntity); sessionEntityList.Add(sessionEntity); if (recognized.NotRecognized) { noEntityMessage = noEntityMessage + recognized.EntityValue + " "; } } db.SaveChanges(); if (noEntityMessage.Length > 1) { Message = noEntityMessage; httpContext.Session[Node.ToString()] = entityListRecognized; } else { AskMeOnlineApi onlineApi = new AskMeOnlineApi(); ChatIntent forOnline = db.ChatIntent.Where(x => x.ChatIntentId == Node).FirstOrDefault(); KeyValuePair <int, string> onlineResponse = onlineApi.OnlineApiChannelforNLP(forOnline, sessionEntityList); Node = onlineResponse.Key; Message = onlineResponse.Value; } responseIntent.ChatIntentId = Node; responseIntent.Response = Message; return(responseIntent); }