docs: def get_iso3_country_code_fuzzy(cls, country, use_live=True, exception=None):
          # type: (str, bool, Optional[ExceptionUpperBound]) -> Tuple[[Optional[str], bool]]
          """Get ISO3 code for cls. A tuple is returned with the first value being the ISO3 code and the second
          showing if the match is exact or not.
  
          Args:
              country (str): Country for which to get ISO3 code
              use_live (bool): Try to get use latest data from web rather than file in package. Defaults to True.
              exception (Optional[ExceptionUpperBound]): An exception to raise if country not found. Defaults to None.
  
          Returns:
              Tuple[[Optional[str], bool]]: ISO3 code and if the match is exact or (None, False).
          """
          countriesdata = cls.countriesdata(use_live=use_live)
          iso3 = cls.get_iso3_country_code(country,
                                           use_live=use_live)  # don't put exception param here as we don't want it to throw
  
          if iso3 is not None:
              return iso3, True
  
          def remove_matching_from_list(wordlist, word_or_part):
              for word in wordlist:
                  if word_or_part in word:
                      wordlist.remove(word)
  
          # fuzzy matching
          expanded_country_candidates = cls.expand_countryname_abbrevs(country)
          match_strength = 0
          matches = set()
          for countryname in sorted(countriesdata['countrynames2iso3']):
              for candidate in expanded_country_candidates:
                  simplified_country, removed_words = cls.simplify_countryname(candidate)
                  if simplified_country in countryname:
                      words = get_words_in_sentence(countryname)
                      new_match_strength = 0
                      if simplified_country:
                          remove_matching_from_list(words, simplified_country)
                          new_match_strength += 32
                      for word in removed_words:
                          if word in countryname:
                              remove_matching_from_list(words, word)
                              new_match_strength += 4
                          else:
                              if word in cls.major_differentiators:
                                  new_match_strength -= 16
                              else:
                                  new_match_strength -= 1
                      for word in words:
                          if word in cls.major_differentiators:
                              new_match_strength -= 16
                          else:
                              new_match_strength -= 1
                      iso3 = countriesdata['countrynames2iso3'][countryname]
                      if new_match_strength > match_strength:
                          match_strength = new_match_strength
                          matches = set()
                      if new_match_strength == match_strength:
                          matches.add(iso3)
  
          if len(matches) == 1 and match_strength > 16:
              return matches.pop(), False
  
          # regex lookup
          for iso3, regex in countriesdata['aliases'].items():
              index = re.search(regex, country.upper())
              if index is not None:
                  return iso3, False
  
          if exception is not None:
              raise exception
          return None, False