Пример #1
0
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)
Пример #2
0
 def test_similarity(self):
     self.assertEquals(0.8, matching.similarity('abcde', 'abcdf'))