def __get_doc_scores(self, posting_list, query: Query):
     click.secho("[Search Engine] Computing search scores ...",
                 fg="bright_blue")
     query_tf_idf = {}
     norm_query_vector = 0
     query_vocabulary = query.get_vocabulary()
     for token in query_vocabulary:
         tf_idf = query.get_tf(token) * self.collection.get_idf(token)
         query_tf_idf[token] = tf_idf
         norm_query_vector += tf_idf**2
     norm_query_vector = sqrt(norm_query_vector)
     doc_scores = {}
     for doc_id in posting_list:
         score = 0
         for token in query_vocabulary:
             if self.weighting_model == "tw-idf":
                 weight = self.collection.get_tw_idf(target_term=token,
                                                     target_doc_id=doc_id,
                                                     b=0.003)
             elif self.weighting_model == "tf-idf":
                 weight = self.collection.get_piv_plus(target_term=token,
                                                       target_doc_id=doc_id,
                                                       b=0.2)
             else:
                 weight = self.collection.get_bm25_plus(
                     target_term=token,
                     target_doc_id=doc_id,
                     b=0.75,
                     k1=1.2)
             score += query_tf_idf[token] * weight
         score /= self.collection.documents_norms[doc_id] * norm_query_vector
         doc_scores[doc_id] = score
     return doc_scores