code: def get_all_keywords(self, term_so_far='', current_dict=None):
          
          terms_present = {}
          if not term_so_far:
              term_so_far = ''
          if current_dict is None:
              current_dict = self.keyword_trie_dict
          for key in current_dict:
              if key == '_keyword_':
                  terms_present[term_so_far] = current_dict[key]
              else:
                  sub_values = self.get_all_keywords(term_so_far + key, current_dict[key])
                  for key in sub_values:
                      terms_present[key] = sub_values[key]
          return terms_present
docs: Recursively builds a dictionary of keywords present in the dictionary
          And the clean name mapped to those keywords.
  
          Args:
              term_so_far : string
                  term built so far by adding all previous characters
              current_dict : dict
                  current recursive position in dictionary
  
          Returns:
              terms_present : dict
                  A map of key and value where each key is a term in the keyword_trie_dict.
                  And value mapped to it is the clean name mapped to it.
  
          Examples:
              >>> keyword_processor = KeywordProcessor()
              >>> keyword_processor.add_keyword('j2ee', 'Java')
              >>> keyword_processor.add_keyword('Python', 'Python')
              >>> keyword_processor.get_all_keywords()
              >>> {'j2ee': 'Java', 'python': 'Python'}
              >>> # NOTE: for case_insensitive all keys will be lowercased.