Esempio n. 1
0
    def test_normalize(self):
        data = [1.1, 2.4, 3.2, 4.6, 5.8, 6.5, 7.9, 8.1, 9.1, 10, None]
        mean = 5.87
        max_value = max(filter(None, data))
        min_value = min(filter(None, data))
        calc_result = [float(v - mean) / (max_value - min_value) for v in data if v]

        calc_returned = ItemEvaluator.normalize(data)

        for index, value in enumerate(calc_result):
            self.assertLess(abs(calc_result[index] - calc_returned[index]), 1 / pow(10, 5))
Esempio n. 2
0
    def test_calc_more_is_better(self):
        data = self.__create_test_data()

        values = vector_manager.to_vector("reviews", data)
        max_value = max(filter(None, values))
        min_value = min(filter(None, values))
        calc_result = [(v - min_value) / (max_value - min_value) for v in values if v]

        calc_returned = ItemEvaluator.calc_more_is_better("reviews", data)

        for index, value in enumerate(calc_result):
            self.assertLess(abs(calc_result[index] - calc_returned[index]), 1 / pow(10, 5))
            print(calc_result[index])
Esempio n. 3
0
    def test_calc_near_is_better(self):
        data = self.__create_test_data()

        values = vector_manager.to_vector("bpm", data)
        max_value = max(filter(None, values))
        min_value = min(filter(None, values))
        selected = EvaluateItem().set_params(100, 10, datetime(2010, 4, 1, 0, 0))
        calc_result = [1 - abs(v - selected.bpm) / (max_value - min_value) for v in values if v]

        calc_returned = ItemEvaluator.calc_near_is_better("bpm", data, selected)

        for index, value in enumerate(calc_result):
            self.assertLess(abs(calc_result[index] - calc_returned[index]), 1 / pow(10, 5))
            print(calc_result[index])
Esempio n. 4
0
    def test_calc_text_token_distance(self):
        item_count = 5
        test_items = [EvaluateItem()] * item_count

        for i in range(item_count):
            if i == 0:
                test_items[i].tags = ["folk", "Rock", "Folk Rock", "Indie"]
            elif i == 1:
                test_items[i].tags = ["rock"]
            elif i == 2:
                test_items[i].tags = ["rock", "alternative rock"]
            elif i == 3:
                test_items[i].tags = ["magnet", "rock", "melodious chorus"]
            elif i == 4:
                test_items[i].tags = ["Rock", "Creature", "3d", "Mashup"]

        distances = ItemEvaluator.calc_text_token_distance("tags", test_items, test_items[0])
        print(distances)
    def test_make_pattern(self):
        data = self.__create_test_data()
        selected = EvaluateItem().set_params(100, 10, datetime(2013, 4, 1, 0, 0))

        evaluator = ItemEvaluator()
        evaluator.set_rule("bpm", ItemEvaluator.calc_near_is_better)
        evaluator.set_rule("reviews", ItemEvaluator.calc_more_is_better)
        evaluator.set_rule("elapsed", ItemEvaluator.calc_less_is_better)

        patterns = evaluator.make_pattern(data, selected)
        for p in patterns:
            print(p)
            self.assertLess(abs(p.score - self.__calculate_pattern_percentage(p, selected, data)), 1 / pow(10, 5))
Esempio n. 6
0
 def test_get_attributes(self):
     item = EvaluateItem()
     attributes = ItemEvaluator.get_attributes(item)
     for a in attributes:
         print(a)
     self.assertEquals(5, len(attributes))  # 4 is the number of attribute except private.
Esempio n. 7
0
    def make_evaluator(cls, history=None):
        from .track_criticize_pattern import TrackCriticizePattern
        evaluator = ItemEvaluator(TrackCriticizePattern)
        evaluator.set_rule("elapsed", EvaluationType.LessIsBetter)
        evaluator.set_rule("genre_score", EvaluationType.NearIsBetter)
        evaluator.set_rule("bpm", EvaluationType.NearIsBetter)
        evaluator.set_rule("comment_count", EvaluationType.MoreIsBetter)
        evaluator.set_rule("download_count", EvaluationType.MoreIsBetter)
        evaluator.set_rule("playback_count", EvaluationType.MoreIsBetter)
        evaluator.set_rule("favoritings_count", EvaluationType.MoreIsBetter)
        evaluator.set_rule("tag_tokens", EvaluationType.TextTokens)

        # set weight by history
        evaluator.set_weight("comment_count", 1.5)
        evaluator.set_weight("playback_count", 2)
        evaluator.set_weight("favoritings_count", 2)

        return evaluator
 def __get_ruled_evaluator(self):
     evaluator = ItemEvaluator()
     evaluator.set_rule("bpm", ItemEvaluator.calc_near_is_better)
     evaluator.set_rule("reviews", ItemEvaluator.calc_more_is_better)
     evaluator.set_rule("elapsed", ItemEvaluator.calc_less_is_better)
     return evaluator