code: def choose(s, possibilities, threshold=.6):
      
      if not possibilities: return None
      if s in possibilities: return s
      if s == '': return None
      startswith = [x for x in possibilities if x.lower().startswith(s.lower())]
      if len(startswith) == 1: return startswith[0]
      contained = [x for x in possibilities if s.lower() in x.lower()]
      if len(contained) == 1: return contained[0]
      best = max([(x, Levenshtein.jaro_winkler(s, x, .05)) for x in possibilities], key=itemgetter(1))
      if best[1] < threshold:
          #print 'did you mean %s?' % best[0]
          return None
      return best[0]
docs: Returns the closest match to string s if exceeds threshold, else returns None