code: def determine_intent(self, utterance, num_results=1, include_tags=False, context_manager=None):
          
          parser = Parser(self.tokenizer, self.tagger)
          parser.on('tagged_entities',
                    (lambda result:
                     self.emit("tagged_entities", result)))
  
          context = []
          if context_manager:
              context = context_manager.get_context()
  
          for result in parser.parse(utterance, N=num_results, context=context):
              self.emit("parse_result", result)
              # create a context without entities used in result
              remaining_context = self.__get_unused_context(result, context)
              best_intent, tags = self.__best_intent(result, remaining_context)
              if best_intent and best_intent.get('confidence', 0.0) > 0:
                  if include_tags:
                      best_intent['__tags__'] = tags
                  yield best_intent
docs: Given an utterance, provide a valid intent.
  
          Args:
              utterance(str): an ascii or unicode string representing natural language speech
              include_tags(list): includes the parsed tags (including position and confidence)
                  as part of result
              context_manager(list): a context manager to provide context to the utterance
              num_results(int): a maximum number of results to be returned.
  
          Returns: A generator that yields dictionaries.