docs: def disambiguate(self, docs, **kwargs):
          """ Performs morphological analysis along with different morphological 
              disambiguation steps (pre-disambiguation, vabamorf's disambiguation
              and post-disambiguation) in the input document collection `docs`.
          
          Note
          ----
               It is assumed that the documents in the input document collection `docs`
              have some similarities, e.g. they are parts of the same story, they are 
              on the same topic etc., so that morphologically ambiguous words (for 
              example: proper names) reoccur in different parts of the collection. 
              The information about reoccurring ambiguous words is then used in 
              pre-disambiguation and post-disambiguation steps for improving the overall
              quality of morphological disambiguation.
              
               Additionally, the input collection `docs` can have two levels: it can be
              list of list of estnltk.text.Text . For example, if we have a corpus of
              daily newspaper issues from one month, and each issue consists of articles
              (published on a single day), we can place the issues to the outer list, 
              and the articles of the issues to the inner lists. 
          
          Parameters
          ----------
          docs: list of estnltk.text.Text
                List of texts (documents) in which the morphological disambiguation
                is performed. Additionally, the list can have two levels: it can be
                list of list of estnltk.text.Text (this can improve quality of the
                post-disambiguation);
          post_disambiguate : boolean, optional
                Applies the lemma-based post-disambiguation on the collection. 
                Default: True;
          disambiguate : boolean, optional
                Applies vabamorf's statistical disambiguation on the collection. 
                Default: True;
                Note: this step shouldn't be turned off, unless for testing purposes;
          pre_disambiguate : boolean, optional
                Applies the pre-disambiguation of proper names on the collection. 
                Default: True;
          vabamorf : boolean, optional
                Applies vabamorf's morphological analyzer on the collection. 
                Default: True;
                Note: this step shouldn't be turned off, unless for testing purposes.
                
          Returns
          -------
          list of estnltk.text.Text
            List of morphologically disambiguated texts (documents). Preserves the
            structure, if the input was  list of list of estnltk.text.Text;
            
          """
          # For testing purposes, morph analysis and morph disambiguation can both
          # be switched off:
          use_vabamorf              = kwargs.get('vabamorf', True)
          use_vabamorf_disambiguate = kwargs.get('disambiguate', True)
          # Configuration for pre- and post disambiguation:
          use_pre_disambiguation    = kwargs.get('pre_disambiguate', True)
          use_post_disambiguation   = kwargs.get('post_disambiguate', True)
  
          kwargs = kwargs
          # Inner/default configuration for text objects:
          kwargs['disambiguate'] = False # do not use vabamorf disambiguation at first place
          kwargs['guess']        = True  # should be set for the morph analyzer
          kwargs['propername']   = True  # should be set for the morph analyzer
          
          # Check, whether the input is a list of lists of docs, or just a list of docs
          if not self.__isListOfLists( docs ):
              if not self.__isListOfTexts( docs ):
                  raise Exception("Unexpected input argument 'docs': should be a list of strings or Text-s;")
              collections = [ docs ]
          else:
              collections = docs
          
          #  I. perform morphological analysis, pre_disambiguation, and 
          #     statistical (vabamorf) disambiguation with-in a single 
          #     document collection;
          for i in range(len(collections)):
              docs = [Text(doc, **kwargs) for doc in collections[i]]
  
              # morf.analysis without disambiguation
              if use_vabamorf:
                  docs = [doc.tag_analysis() for doc in docs]
  
              if use_pre_disambiguation:
                  docs = self.pre_disambiguate(docs)
  
              if use_vabamorf_disambiguate:
                  docs = self.__vabamorf_disambiguate(docs)
              
              collections[i] = docs
  
          #
          #  II. perform post disambiguation over all document collections;
          #
          if use_post_disambiguation:
             collections = self.post_disambiguate( collections )
          return collections if len(collections)>1 else collections[0]