public void Should_Calculate_Levenshtein_Distance_Correctly(string source, string target, int expected) { // Given, When var result = LevenshteinScorer.Score(source, target, false); // Then Assert.Equal(expected, result); }
private static float CalculateDistance(IndexedEntry entry, string query) { #if DEBUG return(Math.Min(LevenshteinScorer.Distance(entry.Title, query), LevenshteinScorer.Distance(entry.Description ?? entry.Title, query))); #else return(0); #endif }
public override async Task <IEnumerable <IQueryResult> > QueryAsync(Query query) { Ensure.NotNull(query, nameof(query)); if (string.IsNullOrWhiteSpace(query.Argument)) { var uri = new Uri("https://en.wikipedia.org"); return(new[] { (IQueryResult) new WikipediaResult( uri, "Open Wikipedia in browser", uri.AbsoluteUri, 0, 0) }); } try { var uri = $"https://en.wikipedia.org/w/api.php?action=opensearch&profile=fuzzy&limit=5&search={Encode(query.Argument)}"; var result = await _client.GetAsync(uri); if (result.IsSuccessStatusCode) { var data = await result.Content.ReadAsStringAsync(); var keywords = JArray.Parse(data)[1].Where(x => x.Type == JTokenType.String).Select(x => x.Value <string>()); var uris = JArray.Parse(data)[3].Where(x => x.Type == JTokenType.String).Select(x => new Uri(x.Value <string>())); var results = keywords .Zip(uris, (title, url) => (IQueryResult) new WikipediaResult(url, title, url.AbsoluteUri, LevenshteinScorer.Score(title, query.Argument, false), LevenshteinScorer.Score(title, query.Argument))) .ToList(); if (!results.Any()) { var fallbackUrl = new Uri($"https://en.wikipedia.org/wiki/{Encode(query.Argument)}"); return(new[] { (IQueryResult) new WikipediaResult( fallbackUrl, $"Search Wikipedia for '{query.Argument}'", fallbackUrl.AbsoluteUri, 0, 0) }); } return(results); } } catch (Exception e) { _log.Error(e, "An error occured while querying Wikipedia."); } return(Enumerable.Empty <IQueryResult>()); }
public static IQueryResult Create(Query query, string term = null, string description = null) { Ensure.NotNull(query, nameof(query)); term = term ?? query.Argument; description = description ?? term; var isGoogleQuery = !(term.StartsWith("http://") || term.StartsWith("https://")); var uri = isGoogleQuery ? new Uri($"https://www.google.se/search?q={WebUtility.UrlEncode(term)}") : new Uri(term); return(new GoogleResult(uri, isGoogleQuery, description, uri.AbsoluteUri, isGoogleQuery ? LevenshteinScorer.Score(term, query.Argument, false) : 0, isGoogleQuery ? LevenshteinScorer.Score(term, query.Argument) : 0)); }
private static float CalculateScore(IndexedEntry entry, string query) { return(Math.Min(LevenshteinScorer.Score(entry.Title, query), LevenshteinScorer.Score(entry.Description ?? entry.Title, query))); }