private ResponseBase edgeHintInput(ParsedUtterance utterance, DialogActBase act) { if (act.IsDontKnow) { return(new NotUsefulContinuationAct(startNewFrame())); } var edgeHint = utterance.OriginalSentence; var intextFormat = getIntextFormat(edgeHint); if (act.IsNegate && intextFormat == null) { return(new RequestWordingAct()); } if (act.IsAffirm) { //force users to really output something if (_initialEdgeHypothesis != _currentEdgeHypothesis) { HadInformativeInput = true; CanBeCompleted = true; _currentEdgeTopic.AddExpression(_currentEdgeHypothesis); return(new UsefulContinuationAct(startNewFrame())); } else { return(new NotUsefulContinuationAct(startNewFrame())); } } if (intextFormat == null) { var taggedInput = tagEdgeHint(edgeHint); if (getWords(taggedInput).Length < 2) { return(new DontUnderstandAct()); } if (!taggedInput.Contains(_label1Tag)) { return(new NoConnectionToEntityAct(entityInfo(_currentEdgeRepresentant.Item1))); } if (!taggedInput.Contains(_label2Tag)) { return(new NoConnectionToEntityAct(entityInfo(_currentEdgeRepresentant.Item3))); } } if (intextFormat.Replace(_label1Tag, "").Replace(_label2Tag, "").Trim() == "") { return(new NotUsefulContinuationAct(startNewFrame())); } _currentEdgeHypothesis = intextFormat; parseCurrentEdgeRepresentant(out string label1, out string requestedRelation, out string edgeHypothesis, out string label2); return(new EdgeConfirmationRequestAct(label1, intextFormat, label2)); }
private ResponseBase entityLabelHintInput(ParsedUtterance utterance, DialogActBase act) { if (act.IsAffirm) { return(new ContinueAct()); } if (act.IsDontKnow || act.IsNegate) { return(new NotUsefulContinuationAct(startNewFrame())); } if (act.IsAdvice) { var advice = act as AdviceAct; _currentEntityTopic.AddLabelCandidate(advice.Answer.OriginalSentence); } HadInformativeInput = utterance.Words.Count() > 2; CanBeCompleted = true; // now we are just collecting simple data without any negotiation return(new UsefulContinuationAct(startNewFrame())); /*var linkedUtterance = _linker.LinkUtterance(utterance.OriginalSentence); * if (linkedUtterance.Entities.Count() != 0) * throw new NotImplementedException("maybe noise, relevant entities, etc"); * * * throw new NotImplementedException("parse entities");*/ }
/// <summary> /// Apply given input on given state. /// </summary> /// <param name="input"></param> /// <param name="state"></param> /// <returns>State after input application.</returns> private DialogState applyInput(DialogActBase input, DialogState state) { var processor = new InputProcessor(state); input.Visit(processor); return(processor.Output); }