def project_usl_with_data(usls_data, metric=None):
projection = project_usls_on_dictionary(usls_data)<EOL>all_terms = set(c for u in usls_data for t in u.objects(Term) for c in t.singular_sequences)<EOL>if metric is None:<EOL><INDENT>metric = lambda e: len(e['<STR_LIT>']) * len(all_terms.intersection(e['<STR_LIT>'].singular_sequences))<EOL><DEDENT>return sorted(({<EOL>'<STR_LIT>': table,<EOL>'<STR_LIT>': usls,<EOL>'<STR_LIT>': list(set(chain.from_iterable(usls_data[u] for u in usls)))<EOL>} for table, usls in projection.items()), key=metric, reverse=True)<EOL>
usls_data: usl => data[]
:param usls_data:
:return: