sS ai_ngb_correctWords1_explain(S input, O... _) {
  optPar int maxPerWord = 3;
  optPar int minDistance = 1;
  optPar int maxDistance = 1;
  
  ret mapJavaTokens(s -> joinWithSlash(
    map(w -> w + "[" + ai_ngbWordList_multiSet().get(w) + "]",
    takeFirst(maxPerWord, sortByCalculatedFieldDesc(w -> ai_ngbWordList_multiSet().get(w),
    asCISet(allWithLevenICDistanceBetween(minDistance, maxDistance, ai_ngbWordListByFrequency(), s)))))
  ), input);
}