示例#1
0
  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