docs: def wordify_example(name_to_table, connecting_tables, context, cached_sentences, index_by_value, target_table_name,
                      word_att_length, data_name, ex, searched_connections):
      """
      Recursively constructs the 'wordification' document for the given example.
  
          :param data: The given examples ExampleTable
          :param ex: Example for which the document is constructed
      """
      debug = False
      data_name = str(data_name)
  
      if debug:
          print("======================================")
          print("example:", ex)
          print("table name:", data_name)
          print("searched_connections:", len(searched_connections), searched_connections)
          print("connecting_tables:", len(connecting_tables[data_name]), connecting_tables[data_name])
  
      ex_pkey_value = data_name in context.pkeys and ex[str(context.pkeys[data_name])]
  
      if not data_name in cached_sentences or not str(ex_pkey_value) in cached_sentences[data_name]:
  
          words = []  # word list for every example
          if debug:
              print("words:", len(words))
          # Construct words (tableName_attributeName_attributeValue) from the given table
          for att in name_to_table[data_name].domain.attributes:
              if not str(att.name) in context.pkeys[data_name] and not str(att.name) in context.fkeys[data_name]:
                  words.append(att_to_s(data_name) + "_" + att_to_s(att.name) + "_" + att_to_s(ex[att]))
  
          # Words from pairs of attributes
          single_words = words[:]
          for comb_length in range(word_att_length + 1):
              if comb_length > 1:
                  words.extend(["__".join(sorted(b)) for b in itertools.combinations(single_words, comb_length)])
  
          # Apply the wordification methodology recursively on all connecting tables
          for sec_t_name, sec_fkey, prim_fkey in connecting_tables[data_name]:
              sec_t = name_to_table[sec_t_name]
              if debug:
                  print("------------------")
                  print("(sec_t,sec_fkey,prim):", (sec_t_name, sec_fkey, prim_fkey))
                  print("search this table:", not (sec_t_name,
                                                   sec_fkey) in searched_connections and sec_t_name != target_table_name)
                  print("search this table:", not prim_fkey or not (data_name,
                                                                    sec_fkey) in searched_connections)  # and sec_t!=self.target_table
              if not (sec_t_name, sec_fkey) in searched_connections and sec_t_name != target_table_name and (
                          not prim_fkey or not (data_name, sec_fkey) in searched_connections):
                  example_indexes = index_by_value[sec_t_name][str(sec_fkey)][str(ex_pkey_value)] if not prim_fkey else \
                      index_by_value[sec_t_name][str(prim_fkey)][str(ex[str(sec_fkey)])]
  
                  for sec_ex_idx in example_indexes:
                      words += wordify_example(name_to_table, connecting_tables, context, cached_sentences,
                                               index_by_value, target_table_name, word_att_length, sec_t_name,
                                               sec_t[sec_ex_idx], searched_connections | set(
                              [(sec_t_name, sec_fkey), prim_fkey and (data_name, prim_fkey)]))
  
          cached_sentences[data_name][str(ex_pkey_value)] = words
  
      return cached_sentences[data_name][str(ex_pkey_value)]