def search(self, query: str, **opt) -> List[Score]: """ Performs a recommendation-based search. Returns an array of score objects, containing the relevant pages and their associated scores. """ scores = [] queryWords = self.__parse_query_string(query) for page in self.__pages: # create and calculate scores pageScore = Score(page) wordFreq = self.__metrics.get_word_frequency_score(page, queryWords) docLoc = self.__metrics.get_document_location_score(page, queryWords) pageScore.set_content_score(wordFreq) pageScore.set_location_score(docLoc) scores.append(pageScore) # normalize scores self.__metrics.normalize_scores(scores) # generate results relevantScores = list(filter(lambda x : x.get_content_score() > 0, scores)) # sort list relevantScores.sort(key=lambda x : x.get_weighted_score(), reverse=True) if COUNT_ID in opt: return relevantScores[0:opt[COUNT_ID]] else: return relevantScores