Ejemplo n.º 1
0
    def test_index_query(self):
        movies_index = os.path.join(dir_test_files, 'complex_contents',
                                    'index/')
        filter_list = ['tt0114319', 'tt0114388']
        recs_number = 3

        # Test prediction and ranking with the Index Query algorithm
        alg = IndexQuery({'Plot': ['index_original', 'index_preprocessed']})
        rs = ContentBasedRS(alg, ratings, movies_index)

        # Prediction should raise error since it's not a ScorePredictionAlg
        with self.assertRaises(NotPredictionAlg):
            rs.fit_predict('A000')

        result_rank = rs.fit_rank('A000')
        self.assertGreater(len(result_rank), 0)

        # Test prediction and ranking with the IndexQuery algorithm on specified items, prediction will raise exception
        # since it's not a PredictionAlgorithm
        with self.assertRaises(NotPredictionAlg):
            rs.fit_predict('A000', filter_list=filter_list)

        result_rank_filtered = rs.fit_rank('A000', filter_list=filter_list)
        self.assertGreater(len(result_rank_filtered), 0)

        # Test top-n ranking with the IndexQuery algorithm
        result_rank_numbered = rs.fit_rank('A000', recs_number=recs_number)
        self.assertEqual(len(result_rank_numbered), recs_number)
Ejemplo n.º 2
0
    def test_empty_frame(self):
        ratings_only_positive = pd.DataFrame.from_records(
            [("A000", "tt0114576", 5, "54654675")],
            columns=["from_id", "to_id", "score", "timestamp"])

        ratings_only_negative = pd.DataFrame.from_records(
            [("A000", "tt0114576", 1, "54654675")],
            columns=["from_id", "to_id", "score", "timestamp"])

        ratings_item_inexistent = pd.DataFrame.from_records(
            [("A000", "not exists", 1, "54654675")],
            columns=["from_id", "to_id", "score", "timestamp"])

        # ClassifierRecommender returns an empty frame
        alg = ClassifierRecommender({'Plot': ['tfidf', 'embedding']},
                                    SkSVC(),
                                    threshold=3)
        rs = ContentBasedRS(alg, ratings_only_positive, self.movies_multiple)
        result = rs.fit_rank('A000')
        self.assertTrue(result.empty)

        alg = ClassifierRecommender({'Plot': ['tfidf', 'embedding']},
                                    SkSVC(),
                                    threshold=3)
        rs = ContentBasedRS(alg, ratings_only_negative, self.movies_multiple)
        result = rs.fit_rank('A000')
        self.assertTrue(result.empty)

        alg = ClassifierRecommender({'Plot': ['tfidf', 'embedding']},
                                    SkSVC(),
                                    threshold=3)
        rs = ContentBasedRS(alg, ratings_item_inexistent, self.movies_multiple)
        result = rs.fit_rank('A000')
        self.assertTrue(result.empty)

        # CentroidVector returns an empty frame
        alg = CentroidVector({'Plot': ['tfidf', 'embedding']},
                             CosineSimilarity(),
                             threshold=3)
        rs = ContentBasedRS(alg, ratings_only_negative, self.movies_multiple)
        result = rs.fit_rank('A000')
        self.assertTrue(result.empty)

        alg = CentroidVector({'Plot': ['tfidf', 'embedding']},
                             CosineSimilarity(),
                             threshold=3)
        rs = ContentBasedRS(alg, ratings_item_inexistent, self.movies_multiple)
        result = rs.fit_rank('A000')
        self.assertTrue(result.empty)
Ejemplo n.º 3
0
    def test_classifier_recommender(self):
        recs_number = 3

        # Test prediction and ranking with the Classifier Recommender algorithm
        alg = ClassifierRecommender({'Plot': ['tfidf', 'embedding']}, SkSVC())
        rs = ContentBasedRS(alg, ratings, self.movies_multiple)

        # Prediction should raise error since it's not a ScorePredictionAlg
        with self.assertRaises(NotPredictionAlg):
            rs.fit_predict('A000')

        # Test ranking with the Classifier Recommender algorithm on specified items
        result_rank_filtered = rs.fit_rank('A000',
                                           filter_list=self.filter_list)
        self.assertEqual(len(result_rank_filtered), len(self.filter_list))

        # Test top-n ranking with the Classifier Recommender algorithm
        result_rank_numbered = rs.fit_rank('A000', recs_number=recs_number)
        self.assertEqual(len(result_rank_numbered), recs_number)
Ejemplo n.º 4
0
    def test_linear_predictor(self):
        recs_number = 3

        # Test prediction and ranking with the Classifier Recommender algorithm
        alg = LinearPredictor({'Plot': ['tfidf', 'embedding']},
                              SkLinearRegression())
        rs = ContentBasedRS(alg, ratings, self.movies_multiple)

        # Prediction
        result_pred_filtered = rs.fit_predict('A000',
                                              filter_list=self.filter_list)
        self.assertEqual(len(result_pred_filtered), len(self.filter_list))

        # Test ranking with the Classifier Recommender algorithm on specified items
        result_rank_filtered = rs.fit_rank('A000',
                                           filter_list=self.filter_list)
        self.assertEqual(len(result_rank_filtered), len(self.filter_list))

        # Test top-n ranking with the Classifier Recommender algorithm
        result_rank_numbered = rs.fit_rank('A000', recs_number=recs_number)
        self.assertEqual(len(result_rank_numbered), recs_number)