Beispiel #1
0
    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
    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