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
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
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
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)
def test_case_ignored(self): dist = match.string_dist(u'Some String', u'sOME sTring') self.assertEqual(dist, 0.0)
def test_different_strings(self): dist = match.string_dist(u'Some String', u'Totally Different') self.assertNotEqual(dist, 0.0)
def test_accented_characters(self): dist = match.string_dist(u"\xe9\xe1\xf1", u"ean") self.assertEqual(dist, 0.0)
def test_different_strings(self): dist = match.string_dist('Some String', 'Totally Different') self.assertNotEqual(dist, 0.0)
def test_ampersand_expansion(self): dist = match.string_dist(u'And', u'&') self.assertEqual(dist, 0.0)
def test_postfix_an(self): dist = match.string_dist(u'An Album Title', u'Album Title, An') self.assertEqual(dist, 0.0)
def test_postfix_an(self): dist = match.string_dist('An Album Title', 'Album Title, An') self.assertEqual(dist, 0.0)
def test_postfix_a(self): dist = match.string_dist('A Song Title', 'Song Title, A') self.assertEqual(dist, 0.0)
def test_postfix_the(self): dist = match.string_dist('The Song Title', 'Song Title, The') self.assertEqual(dist, 0.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)
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)
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)
def test_case_ignored(self): dist = match.string_dist('Some String', 'sOME sTring') self.assertEqual(dist, 0.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)
def test_postfix_the(self): dist = match.string_dist(u'The Song Title', u'Song Title, The') self.assertEqual(dist, 0.0)
def test_postfix_a(self): dist = match.string_dist("A Song Title", "Song Title, A") self.assertEqual(dist, 0.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'')
def test_empty_strings(self): dist = match.string_dist("", "") self.assertEqual(dist, 0.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', '')
def test_heuristic_does_not_harm_distance(self): dist = match.string_dist("Untitled", "[Untitled]") self.assertEqual(dist, 0.0)
def test_postfix_an(self): dist = match.string_dist("An Album Title", "Album Title, An") self.assertEqual(dist, 0.0)
def test_ampersand_expansion(self): dist = match.string_dist('And', '&') self.assertEqual(dist, 0.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", "")
def test_accented_characters(self): dist = match.string_dist(u'\xe9\xe1\xf1', u'ean') self.assertEqual(dist, 0.0)
def test_ampersand_expansion(self): dist = match.string_dist("And", "&") self.assertEqual(dist, 0.0)
def test_equal_strings(self): dist = match.string_dist("Some String", "Some String") self.assertEqual(dist, 0.0)
def test_equal_strings(self): dist = match.string_dist(u'Some String', u'Some String') self.assertEqual(dist, 0.0)
def test_different_strings(self): dist = match.string_dist("Some String", "Totally Different") self.assertNotEqual(dist, 0.0)
def test_punctuation_ignored(self): dist = match.string_dist(u'Some String', u'Some.String!') self.assertEqual(dist, 0.0)
def test_punctuation_ignored(self): dist = match.string_dist("Some String", "Some.String!") self.assertEqual(dist, 0.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)
def test_case_ignored(self): dist = match.string_dist("Some String", "sOME sTring") self.assertEqual(dist, 0.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)
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)
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)
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)
def test_postfix_a(self): dist = match.string_dist(u'A Song Title', u'Song Title, A') self.assertEqual(dist, 0.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)
def test_empty_strings(self): dist = match.string_dist(u'', u'') self.assertEqual(dist, 0.0)
def test_ep_label_has_zero_weight(self): dist = match.string_dist("My Song (EP)", "My Song") self.assertEqual(dist, 0.0)
def test_heuristic_does_not_harm_distance(self): dist = match.string_dist(u'Untitled', u'[Untitled]') self.assertEqual(dist, 0.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)
def test_postfix_the(self): dist = match.string_dist("The Song Title", "Song Title, The") self.assertEqual(dist, 0.0)