From f4336f977749c9c01c37e10f3cad838f0c5272c6 Mon Sep 17 00:00:00 2001 From: Glax Date: Mon, 26 Aug 2024 10:35:16 +0200 Subject: [PATCH] #227 Mangasee Return results that have similarity over 95% or at least top ten results --- Tranga/MangaConnectors/Mangasee.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Tranga/MangaConnectors/Mangasee.cs b/Tranga/MangaConnectors/Mangasee.cs index 2de2b2f..b10421c 100644 --- a/Tranga/MangaConnectors/Mangasee.cs +++ b/Tranga/MangaConnectors/Mangasee.cs @@ -61,21 +61,28 @@ public class Mangasee : MangaConnector } } + private readonly string[] _filterWords = {"a", "the", "of", "as", "to", "no", "for", "on", "with", "be", "and", "in", "wa", "at", "be", "ni"}; + private string ToFilteredString(string input) => string.Join(' ', input.ToLower().Split(' ').Where(word => _filterWords.Contains(word))); private SearchResult[] FilteredResults(string publicationTitle, SearchResult[] unfilteredSearchResults) { Dictionary similarity = new(); foreach (SearchResult sr in unfilteredSearchResults) { List scores = new(); - foreach (string se in sr.a) - scores.Add(NeedlemanWunschStringUtil.CalculateSimilarity(se.ToLower(), publicationTitle.ToLower())); - scores.Add(NeedlemanWunschStringUtil.CalculateSimilarity(sr.s.ToLower(), publicationTitle.ToLower())); + string filteredPublicationString = ToFilteredString(publicationTitle); + string filteredSString = ToFilteredString(sr.s); + scores.Add(NeedlemanWunschStringUtil.CalculateSimilarity(filteredSString, filteredPublicationString)); + foreach (string srA in sr.a) + { + string filteredAString = ToFilteredString(srA); + scores.Add(NeedlemanWunschStringUtil.CalculateSimilarity(filteredAString, filteredPublicationString)); + } similarity.Add(sr, scores.Sum() / scores.Count); } - SearchResult[] similarity90 = similarity.Where(s => s.Value < 10).Select(s => s.Key).ToArray(); - - return similarity90; + List ret = similarity.OrderBy(s => s.Value).Take(10).Select(s => s.Key).ToList(); + ret.AddRange(similarity.Where(s => s.Value < 5).Select(s => s.Key)); + return ret.ToArray(); } public override Manga? GetMangaFromId(string publicationId)