def calculate_users_similarity(self, user_dictionary, user1, user2): common_items = extractor.get_common_items(user_dictionary, user1, user2) if not common_items: return None if self._min_common_items is not None and len( common_items) < self._min_common_items: return None user1_ratings =\ extractor.get_user_ratings(user_dictionary, user1, common_items) user2_ratings =\ extractor.get_user_ratings(user_dictionary, user2, common_items) similarity_value = similarity_calculator.calculate_similarity( user1_ratings, user2_ratings, self._similarity_metric) return similarity_value
def calculate_users_similarity(self, user_dictionary, user1, user2): common_items = extractor.get_common_items(user_dictionary, user1, user2) if not common_items: return None if self._min_common_items is not None and len( common_items) < self._min_common_items: return None user1_overall_ratings =\ extractor.get_user_ratings(user_dictionary, user1, common_items) user1_multi_ratings =\ extractor.get_user_multi_ratings(user_dictionary, user1, common_items) user2_overall_ratings =\ extractor.get_user_ratings(user_dictionary, user2, common_items) user2_multi_ratings =\ extractor.get_user_multi_ratings(user_dictionary, user2, common_items) num_criteria = len(user1_multi_ratings[0]) total_similarity = 0. for i in xrange(0, num_criteria): user1_criterion_item_ratings =\ extractor.get_matrix_column(user1_multi_ratings, i) user2_criterion_item_ratings =\ extractor.get_matrix_column(user2_multi_ratings, i) total_similarity += similarity_calculator.calculate_similarity( user1_criterion_item_ratings, user2_criterion_item_ratings, self._similarity_metric) # We also add the overall similarity total_similarity += similarity_calculator.calculate_similarity( user1_overall_ratings, user2_overall_ratings, self._similarity_metric) average_similarity = total_similarity / (num_criteria + 1) return average_similarity