# function to find the similarity between one track # and all other tracks, returns top 5 tracks # uses scipy correlation() function to calculate similarity # author: Taylor Keppler import trim2 import math import scipy.spatial.distance as dis allSongsDict = trim2.makeGenomes() def getSimilarity(baseDict, tidDict): # generates vectors for two tracks to be used in similarity function #returns similarity between base vector and track vector baseVector = [] tidVector = [] if len(baseDict) >= len(tidDict) : for (k,v) in baseDict.iteritems(): baseVector.append(v) if k in tidDict: tidVector.append(tidDict[k]) else: tidVector.append(0) else: for (k,v) in tidDict.iteritems(): tidVector.append(v) if k in baseDict:
# Author: Taylor Keppler # Critique Recommender # file will be used to, given a track and a tag, return tracks similar to the track, # similar to that track but more *tag*, and similar to that track but less *tag* # currently these functions work less than ideally. Asking for more or less *tag* # often returns similar songs. To fix this we would create a better metric of adding # or subtracting tag values resulting in a more effective critique. import trim2 import calcSimilarity import ChosenTags as CT import get_metadata as getMB songDict = trim2.makeGenomes() def initialSims(tid): # returns original top 5 similar songs for a given track baseGenome = songDict[tid] return calcSimilarity.allCorrelations(baseGenome) def critiqueTagMore(baseDict, tag): #given a tag, return songs that are similar to inputed tag vector, but more *tag* newBase = baseDict if not baseDict.has_key(tag): newBase[tag] = 15 else: newBase[tag] += 15 return calcSimilarity.allCorrelations(newBase) def critiqueTagLess(baseDict, tag):