def evaluate(bits): """ Calculates an average of the F-Measure for every query that has recorded interactions """ candidate = CandidateSolution(bits) f_measures = [] #for query in SolrRepository.interactive_queries(): for query in ["red lobster"]: results = SolrRepository.search(query, candidate.name_boost.value, candidate.description_boost.value) precision = CandidateSolution.calculate_precision(query, results) recall = CandidateSolution.calculate_recall(query, results) f_measures.append(CandidateSolution.f_measure(precision, recall)) return sum(f_measures) / len(f_measures),
def test_total_matches(self): expected = 2 actual = SolrRepository.total_matches("seafood") self.assertEqual(actual, expected)
def test_interactive_queries(self): expected = ["red lobster", "crabs", "seafood", "lobster"] results = SolrRepository.interactive_queries() self.assertItemsEqual(results, expected)
def test_search_zero_boost_description(self): results = SolrRepository.search("red", 2, 0) self.assertEqual(len(results), 1) result = list(results)[0] self.assertEqual(result["name"], "Red Lobster")
def test_search_zero_boost_name(self): results = SolrRepository.search("red", 0, 2) self.assertEqual(len(results), 1) result = list(results)[0] self.assertEqual(result["name"], "Joe's Crab Shack")
def test_search(self): results = SolrRepository.search("crab shack", 10, 2) self.assertEqual(len(results), 1, "Expected one result") result = list(results)[0] self.assertEqual(result["name"], "Joe's Crab Shack")
def calculate_recall(query, results): correct_matches = CandidateSolution.discounted_correct_matches(query, results) total_matches = float(SolrRepository.total_matches(query)) missed_matches = total_matches - correct_matches return correct_matches / (correct_matches + missed_matches)
def test_discounted_correct_matches(self): query = "red lobster" results = SolrRepository.search(query, 1, 1) actual = CandidateSolution.discounted_correct_matches(query, results) expected = 1. / math.log(3) self.assertEqual(actual, expected)