docs: def extract_keywords_from_text(index_page, no_items=5):
      """
      Try to process text on the `index_page` deduce the keywords and then try
      to match them on the Aleph's dataset.
  
      Function returns maximally `no_items` items, to prevent spamming the user.
  
      Args:
          index_page (str): Content of the page as UTF-8 string
          no_items (int, default 5): Number of items to return.
  
      Returns:
          list: List of :class:`.SourceString` objects.
      """
      index_page = MLStripper.strip_tags(index_page)
      tokenized_index = TextBlob(index_page).lower()
  
      def to_str(key):
          if isinstance(key, unicode):
              return key.encode("utf-8")
  
          return key
  
      present_keywords = [
          KEYWORDS_LOWER[key]
          for key in KEYWORDS_LOWER.keys()
          if len(key) > 3 and key in tokenized_index
      ]
  
      def to_source_string(key):
          source = "Keyword analysis"
          try:
              return SourceString(key, source)
          except UnicodeEncodeError:
              return SourceString(key.encode("utf-8"), source)
  
      multi_keywords = [
          to_source_string(key)
          for key in present_keywords
          if tokenized_index.words.count(key) >= 1
      ]
  
      multi_keywords = sorted(multi_keywords, key=lambda x: len(x), reverse=True)
  
      if len(multi_keywords) > no_items:
          return multi_keywords[:no_items]
  
      return multi_keywords