private string PickMostSimilar(string previous, IEnumerable <string> options) { //Order by word vector similarity var sims = options.Select(a => (a, Task.Run(() => _wordVectors.Similarity(previous, a)))) .Select(a => (a.a, a.Item2.Result ?? 0)) .OrderByDescending(a => a.Item2); //Take the most similar return(sims .Select(a => a.a) .First()); }
public async Task GetVectorSimilarity(string a, string b) { var result = await _wordVectors.Similarity(a, b); if (!result.HasValue) { var av = await _wordVectors.Vector(a); if (av == null) { await TypingReplyAsync($"I don't know the word `{a}`"); } var bv = await _wordVectors.Vector(b); if (bv == null) { await TypingReplyAsync($"I don't know the word `{b}`"); } } else if (result < 0.2) { await TypingReplyAsync($"`{a}` and `{b}` are very different ({result:0.0##})"); } else if (result < 0.5) { await TypingReplyAsync($"`{a}` and `{b}` are not very similar ({result:0.0##})"); } else if (result < 0.65) { await TypingReplyAsync($"`{a}` and `{b}` are a bit similar ({result:0.0##})"); } else if (result < 0.85) { await TypingReplyAsync($"`{a}` and `{b}` are quite similar ({result:0.0##})"); } else { await TypingReplyAsync($"`{a}` and `{b}` are analagous ({result:0.0##})"); } }