def closest_by_spelling(klass, search_string, n=100): d = [] for obj in klass.objects.all(): args = [str(obj.name).upper(), search_string.upper()] args_dists = utils.calc_dists(*args) # use the shortest of these distances d.append((search_string, obj,\ args_dists[0], args_dists[1],\ args_dists[2])) return utils.closest_matches(d, n)
def closest_by_code(klass, search_string, n=100): d = [] for obj in klass.objects.all(): args = [str(obj.code), search_string] alt_args = [str(obj.code) + str(obj.satellite_number), search_string] args_dists = utils.calc_dists(*args) alt_dists = utils.calc_dists(*alt_args) # use the shortest of these distances d.append((search_string, obj,\ min([args_dists[0], alt_dists[0]]),\ min([args_dists[1], alt_dists[1]]),\ max([args_dists[2], alt_dists[2]]))) return utils.closest_matches(d, n)
def closest_by_spelling(klass, search_string, n=100): d = [] for obj in klass.objects.all(): args = [str(obj.name).upper(), search_string.upper()] # also calculate distance between search_string and # the best guess of a surname (longest word in name) name_list = str(obj.name).upper().replace('.', ' ').split() surname_guess = max(name_list, key=len) alt_args = [surname_guess, search_string.upper()] args_dists = utils.calc_dists(*args) alt_dists = utils.calc_dists(*alt_args) # use the shortest of these distances d.append((search_string, obj,\ min([args_dists[0], alt_dists[0]]),\ min([args_dists[1], alt_dists[1]]),\ max([args_dists[2], alt_dists[2]]))) return utils.closest_matches(d, n)