input: Write a function to generate a fuzzy search algorithm in Python that can match strings with near similarities by using the Levenshtein distance as the similarity measure. The function should accept a query string, a list of string choices, and a threshold value for the distance. It should return a list of choices that have a Levenshtein distance less than or equal to the threshold when compared with the query string. If the query matches any choice within the threshold, that choice is added to the results.
  assert find_matches("apple", ["apples", "aple", "appel", "banana"], 2)==['apples', 'aple', 'appel']
  assert find_matches("dog", ["dogs", "doggy", "dodge", "cat"], 1)==['dogs']
  assert find_matches("python", ["pithon", "pythagoras", "pythos"], 3)==['pithon']
  assert find_matches("java", ["javascript", "javelin", "javelina"], 2)==['javascript', 'javelin']
  assert find_matches("", ["apple", "banana", "cherry"], 0)==[]
output: def find_matches(query, choices, threshold):
      def levenshtein_distance(s1, s2):
          if len(s1) < len(s2):
              return levenshtein_distance(s2, s1)
          if len(s2) == 0:
              return len(s1)
          previous_row = range(len(s2) + 1)
          for i, c1 in enumerate(s1):
              current_row = [i + 1]
              for j, c2 in enumerate(s2):
                  insertions = previous_row[j + 1] + 1
                  deletions = current_row[j] + 1
                  substitutions = previous_row[j] + (c1 != c2)
                  current_row.append(min(insertions, deletions, substitutions))
              previous_row = current_row
          return previous_row[-1]
      
      return [choice for choice in choices if levenshtein_distance(query, choice) <= threshold]