def determine_intent(self, utterance, num_results=<NUM_LIT:1>, include_tags=False, context_manager=None):
parser = Parser(self.tokenizer, self.tagger)<EOL>parser.on('<STR_LIT>',<EOL>(lambda result:<EOL>self.emit("<STR_LIT>", result)))<EOL>context = []<EOL>if context_manager:<EOL><INDENT>context = context_manager.get_context()<EOL><DEDENT>for result in parser.parse(utterance, N=num_results, context=context):<EOL><INDENT>self.emit("<STR_LIT>", result)<EOL>remaining_context = self.__get_unused_context(result, context)<EOL>best_intent, tags = self.__best_intent(result, remaining_context)<EOL>if best_intent and best_intent.get('<STR_LIT>', <NUM_LIT:0.0>) > <NUM_LIT:0>:<EOL><INDENT>if include_tags:<EOL><INDENT>best_intent['<STR_LIT>'] = tags<EOL><DEDENT>yield best_intent<EOL><DEDENT><DEDENT>
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.