<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def analyze(self, words, **kwargs):
 """Perform morphological analysis and disambiguation of given text. Parameters words: list of str or str Either a list of pretokenized words or a string. In case of a string, it will be splitted using default behaviour of string.split() function. disambiguate: boolean (default: True) Disambiguate the output and remove incosistent analysis. guess: boolean (default: True) Use guessing in case of unknown words propername: boolean (default: True) Perform additional analysis of proper names. compound: boolean (default: True) Add compound word markers to root forms. phonetic: boolean (default: False) Add phonetic information to root forms. Returns ------- list of (list of dict) List of analysis for each word in input. """

        # if input is a string, then tokenize it
        if isinstance(words, six.string_types):
            words = words.split()

        # convert words to native strings
        words = [convert(w) for w in words]

        morfresults = self._morf.analyze(
            vm.StringVector(words),
            kwargs.get('disambiguate', True),
            kwargs.get('guess', True),
            True, # phonetic and compound information
            kwargs.get('propername', True))
        trim_phonetic = kwargs.get('phonetic', False)
        trim_compound = kwargs.get('compound', True)

        return [postprocess_result(mr, trim_phonetic, trim_compound) for mr in morfresults]