Exemple #1
0
        public DialogActBase GetBestDialogAct(ParsedUtterance utterance)
        {
            if (HasImplicitDontKnow(utterance))
            {
                return(new DontKnowAct());
            }

            if (HasImplicitNegation(utterance))
            {
                return(new NegateAct());
            }


            var currentStateLayer = new List <PatternState>();

            foreach (var pattern in _patterns.Keys)
            {
                var state = pattern.InitialState(0);
                currentStateLayer.Add(state);
            }

            var nextStateLayer = new List <PatternState>();
            var wordIndex      = 0;

            foreach (var word in utterance.Words)
            {
                foreach (var state in currentStateLayer)
                {
                    var nextStates = state.GetNextStates(word, wordIndex);
                    nextStateLayer.AddRange(nextStates);
                }
                wordIndex += 1;
                //swap current with next state layer
                var swapLayer = currentStateLayer;
                currentStateLayer = nextStateLayer;
                nextStateLayer    = swapLayer;
                nextStateLayer.Clear();

                if (currentStateLayer.Count == 0)
                {
                    //we dont have any matching pattern
                    break;
                }
            }

            currentStateLayer.RemoveAll((p) => !p.IsFinished);

            if (currentStateLayer.Count < 1)
            {
                return(new UnrecognizedAct(utterance));
            }

            var bestState  = currentStateLayer[0];
            var actFactory = _patterns[bestState.OriginalPattern];
            var handler    = new PatternHandler(utterance, bestState);

            return(actFactory(handler));
        }
Exemple #2
0
        internal PatternHandler(ParsedUtterance utterance, PatternState state)
        {
            var substitutions   = state.Substitutions.ToArray();
            var originalPattern = state.OriginalPattern;

            for (var i = 0; i < originalPattern.Length; ++i)
            {
                var sentenceKey = originalPattern.GetSentenceKey(i);
                if (sentenceKey != null)
                {
                    var sentence = ParsedUtterance.From(substitutions[i]);
                    _sentences[int.Parse(sentenceKey)] = sentence;
                }
            }

            _sentences[0] = utterance;
        }
Exemple #3
0
        public IEnumerable <DialogActBase> GetDialogActs(ParsedUtterance utterance)
        {
            var currentStateLayer = new List <PatternState>();
            var finishedStates    = new List <PatternState>();

            var currentWordIndex = 0;

            foreach (var word in utterance.Words)
            {
                //we allow pattern begin at every word
                foreach (var pattern in _patterns.Keys)
                {
                    var state = pattern.InitialState(currentWordIndex);
                    currentStateLayer.Add(state);
                }

                var nextStateLayer = new List <PatternState>();
                foreach (var state in currentStateLayer)
                {
                    var nextStates = state.GetNextStates(word, currentWordIndex);
                    foreach (var nextState in nextStates)
                    {
                        if (nextState.IsFinished)
                        {
                            //state has been finished - don't continue expanding from it
                            finishedStates.Add(nextState);
                        }
                        else
                        {
                            //state still needs continuation
                            nextStateLayer.Add(nextState);
                        }
                    }
                }

                currentStateLayer = nextStateLayer;
                currentWordIndex += 1;
            }

            var stateCovers = findStateCovers(currentWordIndex - 1, finishedStates).ToArray();

            throw new NotImplementedException();
        }
Exemple #4
0
 public static bool HasImplicitDontKnow(ParsedUtterance utterance)
 {
     return(HasImplicitDontKnow(utterance.OriginalSentence));
 }
Exemple #5
0
 public static bool HasImplicitNegation(ParsedUtterance utterance)
 {
     return(HasImplicitNegation(utterance.OriginalSentence));
 }