Пример #1
0
    def track_distance(self, item, info):
        last_data = last_match(item.path)
        if not last_data:
            # Match failed.
            return 0.0, 0.0

        dist, dist_max = 0.0, 0.0

        # Track title distance.
        dist += match.string_dist(last_data['title'],
                                  info.title) \
                * match.TRACK_TITLE_WEIGHT
        dist_max += match.TRACK_TITLE_WEIGHT
        
        # MusicBrainz track ID.
        if last_data['track_mbid']:
            # log.debug('Last track ID match: %s/%s' %
            #           (last_data['track_mbid'], track_data['id']))
            if last_data['track_mbid'] != last_data['id']:
                dist += match.TRACK_ID_WEIGHT
            dist_max += match.TRACK_ID_WEIGHT

        # log.debug('Last data: %s; distance: %f' %
        #           (str(last_data), dist/dist_max if dist_max > 0.0 else 0.0))

        return dist * DISTANCE_SCALE, dist_max * DISTANCE_SCALE
Пример #2
0
    def track_distance(self, item, info):
        last_data = last_match(item.path)
        if not last_data:
            # Match failed.
            return 0.0, 0.0

        dist, dist_max = 0.0, 0.0

        # Track title distance.
        dist += match.string_dist(last_data['title'],
                                  info.title) \
                * match.TRACK_TITLE_WEIGHT
        dist_max += match.TRACK_TITLE_WEIGHT

        # MusicBrainz track ID.
        if last_data['track_mbid']:
            # log.debug('Last track ID match: %s/%s' %
            #           (last_data['track_mbid'], track_data['id']))
            if last_data['track_mbid'] != last_data['id']:
                dist += match.TRACK_ID_WEIGHT
            dist_max += match.TRACK_ID_WEIGHT

        # log.debug('Last data: %s; distance: %f' %
        #           (str(last_data), dist/dist_max if dist_max > 0.0 else 0.0))

        return dist * DISTANCE_SCALE, dist_max * DISTANCE_SCALE
Пример #3
0
    def album_distance(self, items, info):
        last_artist, last_artist_id = get_cur_artist(
            [item for item in items if item])

        # Compare artist to MusicBrainz metadata.
        dist, dist_max = 0.0, 0.0
        if last_artist:
            dist += match.string_dist(last_artist, info.artist) \
                    * match.ARTIST_WEIGHT
            dist_max += match.ARTIST_WEIGHT

        log.debug('Last artist (%s/%s) distance: %f' %
                  (last_artist, info.artist,
                   dist / dist_max if dist_max > 0.0 else 0.0))

        #fixme: artist MBID currently ignored (as in vanilla tagger)
        return dist, dist_max
Пример #4
0
    def album_distance(self, items, info):
        last_artist, last_artist_id = get_cur_artist(
            [item for item in items if item]
        )

        # Compare artist to MusicBrainz metadata.
        dist, dist_max = 0.0, 0.0
        if last_artist:
            dist += match.string_dist(last_artist, info.artist) \
                    * match.ARTIST_WEIGHT
            dist_max += match.ARTIST_WEIGHT

        log.debug('Last artist (%s/%s) distance: %f' %
                  (last_artist, info.artist,
                   dist/dist_max if dist_max > 0.0 else 0.0))

        #fixme: artist MBID currently ignored (as in vanilla tagger)
        return dist, dist_max
Пример #5
0
 def test_parens_have_lower_weight(self):
     dist1 = match.string_dist(u'One .Two.', u'One')
     dist2 = match.string_dist(u'One (Two)', u'One')
     self.assert_(dist2 < dist1)
Пример #6
0
 def test_case_ignored(self):
     dist = match.string_dist(u'Some String', u'sOME sTring')
     self.assertEqual(dist, 0.0)
Пример #7
0
 def test_different_strings(self):
     dist = match.string_dist(u'Some String', u'Totally Different')
     self.assertNotEqual(dist, 0.0)
Пример #8
0
 def test_accented_characters(self):
     dist = match.string_dist(u"\xe9\xe1\xf1", u"ean")
     self.assertEqual(dist, 0.0)
Пример #9
0
 def test_different_strings(self):
     dist = match.string_dist('Some String', 'Totally Different')
     self.assertNotEqual(dist, 0.0)
Пример #10
0
 def test_ampersand_expansion(self):
     dist = match.string_dist(u'And', u'&')
     self.assertEqual(dist, 0.0)
Пример #11
0
 def test_postfix_an(self):
     dist = match.string_dist(u'An Album Title', u'Album Title, An')
     self.assertEqual(dist, 0.0)
Пример #12
0
 def test_postfix_an(self):
     dist = match.string_dist('An Album Title', 'Album Title, An')
     self.assertEqual(dist, 0.0)
Пример #13
0
 def test_postfix_a(self):
     dist = match.string_dist('A Song Title', 'Song Title, A')
     self.assertEqual(dist, 0.0)
Пример #14
0
 def test_postfix_the(self):
     dist = match.string_dist('The Song Title', 'Song Title, The')
     self.assertEqual(dist, 0.0)
Пример #15
0
 def test_brackets_have_lower_weight(self):
     dist1 = match.string_dist('One .Two.', 'One')
     dist2 = match.string_dist('One [Two]', 'One')
     self.assert_(dist2 < dist1)
Пример #16
0
 def test_parens_have_lower_weight(self):
     dist1 = match.string_dist('One .Two.', 'One')
     dist2 = match.string_dist('One (Two)', 'One')
     self.assert_(dist2 < dist1)
Пример #17
0
 def test_leading_the_has_lower_weight(self):
     dist1 = match.string_dist('XXX Band Name', 'Band Name')
     dist2 = match.string_dist('The Band Name', 'Band Name')
     self.assert_(dist2 < dist1)
Пример #18
0
 def test_case_ignored(self):
     dist = match.string_dist('Some String', 'sOME sTring')
     self.assertEqual(dist, 0.0)
Пример #19
0
 def test_ep_label_has_zero_weight(self):
     dist = match.string_dist(u'My Song (EP)', u'My Song')
     self.assertEqual(dist, 0.0)
Пример #20
0
 def test_postfix_the(self):
     dist = match.string_dist(u'The Song Title', u'Song Title, The')
     self.assertEqual(dist, 0.0)
Пример #21
0
 def test_postfix_a(self):
     dist = match.string_dist("A Song Title", "Song Title, A")
     self.assertEqual(dist, 0.0)
Пример #22
0
 def test_solo_pattern(self):
     # Just make sure these don't crash.
     match.string_dist(u'The ', u'')
     match.string_dist(u'(EP)', u'(EP)')
     match.string_dist(u', An', u'')
Пример #23
0
 def test_empty_strings(self):
     dist = match.string_dist("", "")
     self.assertEqual(dist, 0.0)
Пример #24
0
 def test_solo_pattern(self):
     # Just make sure these don't crash.
     match.string_dist('The ', '')
     match.string_dist('(EP)', '(EP)')
     match.string_dist(', An', '')
Пример #25
0
 def test_heuristic_does_not_harm_distance(self):
     dist = match.string_dist("Untitled", "[Untitled]")
     self.assertEqual(dist, 0.0)
Пример #26
0
 def test_postfix_an(self):
     dist = match.string_dist("An Album Title", "Album Title, An")
     self.assertEqual(dist, 0.0)
Пример #27
0
 def test_ampersand_expansion(self):
     dist = match.string_dist('And', '&')
     self.assertEqual(dist, 0.0)
Пример #28
0
 def test_solo_pattern(self):
     # Just make sure these don't crash.
     match.string_dist("The ", "")
     match.string_dist("(EP)", "(EP)")
     match.string_dist(", An", "")
Пример #29
0
 def test_accented_characters(self):
     dist = match.string_dist(u'\xe9\xe1\xf1', u'ean')
     self.assertEqual(dist, 0.0)
Пример #30
0
 def test_ampersand_expansion(self):
     dist = match.string_dist("And", "&")
     self.assertEqual(dist, 0.0)
Пример #31
0
 def test_equal_strings(self):
     dist = match.string_dist("Some String", "Some String")
     self.assertEqual(dist, 0.0)
Пример #32
0
 def test_equal_strings(self):
     dist = match.string_dist(u'Some String', u'Some String')
     self.assertEqual(dist, 0.0)
Пример #33
0
 def test_different_strings(self):
     dist = match.string_dist("Some String", "Totally Different")
     self.assertNotEqual(dist, 0.0)
Пример #34
0
 def test_punctuation_ignored(self):
     dist = match.string_dist(u'Some String', u'Some.String!')
     self.assertEqual(dist, 0.0)
Пример #35
0
 def test_punctuation_ignored(self):
     dist = match.string_dist("Some String", "Some.String!")
     self.assertEqual(dist, 0.0)
Пример #36
0
 def test_leading_the_has_lower_weight(self):
     dist1 = match.string_dist(u'XXX Band Name', u'Band Name')
     dist2 = match.string_dist(u'The Band Name', u'Band Name')
     self.assert_(dist2 < dist1)
Пример #37
0
 def test_case_ignored(self):
     dist = match.string_dist("Some String", "sOME sTring")
     self.assertEqual(dist, 0.0)
Пример #38
0
 def test_brackets_have_lower_weight(self):
     dist1 = match.string_dist(u'One .Two.', u'One')
     dist2 = match.string_dist(u'One [Two]', u'One')
     self.assert_(dist2 < dist1)
Пример #39
0
 def test_leading_the_has_lower_weight(self):
     dist1 = match.string_dist("XXX Band Name", "Band Name")
     dist2 = match.string_dist("The Band Name", "Band Name")
     self.assert_(dist2 < dist1)
Пример #40
0
 def test_featured_has_lower_weight(self):
     dist1 = match.string_dist(u'My Song blah Someone', u'My Song')
     dist2 = match.string_dist(u'My Song feat Someone', u'My Song')
     self.assert_(dist2 < dist1)
Пример #41
0
 def test_parens_have_lower_weight(self):
     dist1 = match.string_dist("One .Two.", "One")
     dist2 = match.string_dist("One (Two)", "One")
     self.assert_(dist2 < dist1)
Пример #42
0
 def test_postfix_a(self):
     dist = match.string_dist(u'A Song Title', u'Song Title, A')
     self.assertEqual(dist, 0.0)
Пример #43
0
 def test_brackets_have_lower_weight(self):
     dist1 = match.string_dist("One .Two.", "One")
     dist2 = match.string_dist("One [Two]", "One")
     self.assert_(dist2 < dist1)
Пример #44
0
 def test_empty_strings(self):
     dist = match.string_dist(u'', u'')
     self.assertEqual(dist, 0.0)
Пример #45
0
 def test_ep_label_has_zero_weight(self):
     dist = match.string_dist("My Song (EP)", "My Song")
     self.assertEqual(dist, 0.0)
Пример #46
0
 def test_heuristic_does_not_harm_distance(self):
     dist = match.string_dist(u'Untitled', u'[Untitled]')
     self.assertEqual(dist, 0.0)
Пример #47
0
 def test_featured_has_lower_weight(self):
     dist1 = match.string_dist("My Song blah Someone", "My Song")
     dist2 = match.string_dist("My Song feat Someone", "My Song")
     self.assert_(dist2 < dist1)
Пример #48
0
 def test_accented_characters(self):
     dist = match.string_dist(u'\xe9\xe1\xf1', u'ean')
     self.assertEqual(dist, 0.0)
Пример #49
0
 def test_postfix_the(self):
     dist = match.string_dist("The Song Title", "Song Title, The")
     self.assertEqual(dist, 0.0)