class RelevantRespGenerator: # a constant controls the number of relevant responses RESPONSE_NUM = 3 def __init__(self, brown_ic, spotify_client): self.brown_ic = brown_ic self.client = spotify_client def create_phrase_measurer(self, search_query): if Config.s_measurer == 'levenshtein': self.create_levenshtein_measurer(search_query) elif Config.s_measurer == 'naive': self.create_naive_measurer(search_query) elif Config.s_measurer == 'semantic': self.create_semantic_measurer(search_query) else: raise ValueError("Only levenshtein, naive and semantic are allowed for measurer") # Create the Levenshtein Distance to measure the similarity between search and response phrases def create_levenshtein_measurer(self, search_query): self.measurer = LevenPhraseSimMeasurer(search_query) # Create the Semantic Similarity measurer to measure the similarity between search and response phrases def create_semantic_measurer(self, search_query): self.measurer = NLPPhraseSimMeasurer(self.brown_ic, search_query) # Create a naive identical words measurer to measure similarity between search and response phrases def create_naive_measurer(self, search_query): self.measurer = NaivePhraseSimMeasurer(search_query) # Generate the most relevant responses from Spotify with given search_query def generate_response(self, search_query): search_query = search_query.lower() # Get a list of Track objects which are the response tracks from Spotify playlist = self.get_playlist(search_query) # for each response track, compute the semantic similarity between search_query and response track name self.create_phrase_measurer(search_query) for track in playlist: phrase_sim = self.measurer.measure_phrase_sim(track.name) #print track.name.encode('utf-8') + ":" + str(phrase_sim) track.set_similarity(phrase_sim) # sort all the Track objects and get top Track objects playlist = sorted(playlist) # get top RESPONSE_NUM tracks from playlist return playlist[0 : RelevantRespGenerator.RESPONSE_NUM] def get_playlist(self, search_query): return self.client.get_playlist(search_query)
def create_semantic_measurer(self, search_query): self.measurer = NLPPhraseSimMeasurer(self.brown_ic, search_query)
def create_naive_measurer(self, search_query): self.measurer = NaivePhraseSimMeasurer(search_query)
def create_levenshtein_measurer(self, search_query): self.measurer = LevenPhraseSimMeasurer(search_query)