docs: def recognise_model(feature_filename,
                      symbollist_filename,
                      model_directory,
                      recognition_filename,
                      pronunciation_dictionary_filename,
                      list_words_filename='',
                      cmllr_directory=None,
                      tokens_count=None,
                      hypotheses_count=1,
                      htk_trace=0):
      """
          Perform recognition using a model and assuming a single word language.
  
          If the list_words_filename is == '' then all the words in the dictionary are used as language words.
      """
      # Normalize UTF-8 to avoid Mac problems
      temp_dictionary_filename = utf8_normalize(pronunciation_dictionary_filename)
  
      # Create language word list
      if list_words_filename:
          list_words = parse_wordlist(list_words_filename)
      else:
          list_words = sorted(parse_dictionary(temp_dictionary_filename).keys())
  
      # Create language model
      temp_directory = config.project_path('tmp', create=True)
      grammar_filename = config.path(temp_directory, 'grammar_words')
      wdnet_filename = config.path(temp_directory, 'wdnet')
      logging.debug('Create language model')
      create_language_model(list_words,
                            grammar_filename,
                            wdnet_filename)
  
      # Handle the Adaptation parameters
      cmllr_arguments = ''
      if cmllr_directory:
          if not os.path.isdir(cmllr_directory):
              logging.error('CMLLR adapatation directory not found: {}'.format(cmllr_directory))
  
          cmllr_arguments = "-J {} mllr2 -h '*/*_s%.mfc' -k -J {}".format(
              os.path.abspath(config.path(cmllr_directory, 'xforms')),
              os.path.abspath(config.path(cmllr_directory, 'classes')))
      # Handle the N-Best parameters
      hypotheses_count = hypotheses_count or 1
      tokens_count = tokens_count or int(math.ceil(hypotheses_count / 5.0))
      if hypotheses_count == 1 and tokens_count == 1:
          nbest_arguments = ""
      else:
          nbest_arguments = "-n {tokens_count} {hypotheses_count} ".format(tokens_count=tokens_count,
                                                                           hypotheses_count=hypotheses_count)
  
      # Run the HTK command
      config.htk_command("HVite -A -l '*' -T {htk_trace} "
                         "-H {model_directory}/macros -H {model_directory}/hmmdefs "
                         "-i {recognition_filename} -S {feature_filename} "
                         "{cmllr_arguments} -w {wdnet_filename} "
                         "{nbest_arguments} "
                         "-p 0.0 -s 5.0 "
                         "{pronunciation_dictionary_filename} "
                         "{symbollist_filename}".format(htk_trace=htk_trace,
                                                        model_directory=model_directory,
                                                        recognition_filename=recognition_filename,
                                                        feature_filename=feature_filename,
                                                        symbollist_filename=symbollist_filename,
                                                        nbest_arguments=nbest_arguments,
                                                        pronunciation_dictionary_filename=temp_dictionary_filename,
                                                        wdnet_filename=wdnet_filename,
                                                        cmllr_arguments=cmllr_arguments))
  
      # Remove temporary files
      os.remove(temp_dictionary_filename)
      os.remove(wdnet_filename)
      os.remove(grammar_filename)