code: Hit<String> bestMatchingSynonym(OntologyTerm ontologyTerm, Set<String> searchTerms) {
      // ontologyTerm.getSynonyms() will never be empty because it contains itself as a synonym
      Optional<Hit<String>> bestSynonym =
          ontologyTerm
              .getSynonyms()
              .stream()
              .map(synonym -> Hit.create(synonym, distanceFrom(synonym, searchTerms)))
              .max(Comparator.naturalOrder());
  
      return bestSynonym.orElseThrow(
          () ->
              new IllegalStateException("ontologyTerm.getSynonyms() shouldn't return an empty list"));
    }
docs: Computes the best matching synonym which is closest to a set of search terms.<br>
  Will stem the {@link OntologyTerm} 's synonyms and the search terms, and then compute the
  maximum {@link StringDistance} between them. 0 means disjunct, 1 means identical
  
  @param ontologyTerm the {@link OntologyTerm}
  @param searchTerms the search terms
  @return the maximum {@link StringDistance} between the ontologyterm and the search terms