def match_up_albums(artist, mb_artist, logger): '''Matches up the user albums by artist with the albums from musicbrainz''' mb_albums = MBAlbum.objects.filter(artist=mb_artist) for album in artist.album_set.all(): if album.mb_id: continue for mb_album in mb_albums: if matching.match(album.name, mb_album.name): logger.debug('direct match album %s to mb album %s', album, mb_album) album.mb_id = mb_album.mb_id album.save() break else: by_similarity = [(mba, matching.similarity(album.name, mba.name)) \ for mba in mb_albums] by_similarity.sort(key=operator.itemgetter(1), reverse=True) if by_similarity: mb_album, similarity = by_similarity[0] if similarity > 0.8: logger.info('picking similar: album %s, mb_album %s, similarity %s', album, mb_album, similarity) album.mb_id = mb_album.mb_id album.save() else: logger.info('not close enough: album %s, mb_album %s, similarity %s', album, mb_album, similarity)
def test_similarity(self): self.assertEquals(0.8, matching.similarity('abcde', 'abcdf'))