static L ai_misrecognitionCandidates3() { S text = lines(ai_misrecognitionCandidates2()); L l = ai_parseStatementsWithReasoning(text); new Matches m; new Map scored; for (Proposition p : l) if (match("* is usually a misrecognition of *", p!, m)) { S a = $1, b = $2; continue if eqic(a, b); scored.put(pair(a, b), levenIC(a, b)); } ret map(mapSortedByValue(scored), (pair, distance) -> withReasoning( format_quoteAll("* is usually a misrecognition of *", pair.a, pair.b), "Levenshtein distance is " + distance + " of " + max(l(pair.a), l(pair.b)) )); }