def bai(name): # Remove content in parentheses name = _bai_parentheses_cleaner.sub("", name) # Get last name and initials names = _bai_last_name_separator.split(name, maxsplit=1) names = _nonempty(names) if len(names) == 1: names = _bai_spaces.split(name, maxsplit=1) names = _nonempty(names) if len(names) == 0: return "" elif len(names) == 2: last_name = names[0] initials = [ w[0].upper() for w in _bai_names_separator.split(names[1]) if w ] else: last_name = names[0] initials = [] # Asciify for char, replacement in _bai_special_char_mapping.items(): last_name = last_name.replace(char, replacement) initials = [i.replace(char, replacement) for i in initials] last_name = asciify(last_name) initials = _nonempty([asciify(i) for i in initials]) # Capitalize words in last name words = _bai_names_separator.split(last_name) words = _nonempty(words) for i, w in enumerate(words): if w.lower() in _bai_particles and i < len(words) - 1: words[i] = w.lower() elif (all([c.isupper() or c == "'" for c in w]) or all([c.islower() or c == "'" for c in w])): words[i] = w.title() else: words[i] = w bai = "%s %s" % (" ".join(initials), " ".join(words)) # Keep letters and spaces bai = _bai_nonletters.sub("", bai) bai = bai.strip() # Replace all spaces with . bai = _bai_spaces.sub(".", bai) return bai
def bai(name): # Remove content in parentheses name = _bai_parentheses_cleaner.sub("", name) # Get last name and initials names = _bai_last_name_separator.split(name, maxsplit=1) names = _nonempty(names) if len(names) == 1: names = _bai_spaces.split(name, maxsplit=1) names = _nonempty(names) if len(names) == 0: return "" elif len(names) == 2: last_name = names[0] initials = [w[0].upper() for w in _bai_names_separator.split(names[1]) if w] else: last_name = names[0] initials = [] # Asciify for char, replacement in _bai_special_char_mapping.items(): last_name = last_name.replace(char, replacement) initials = [i.replace(char, replacement) for i in initials] last_name = asciify(last_name) initials = _nonempty([asciify(i) for i in initials]) # Capitalize words in last name words = _bai_names_separator.split(last_name) words = _nonempty(words) for i, w in enumerate(words): if w.lower() in _bai_particles and i < len(words) - 1: words[i] = w.lower() elif (all([c.isupper() or c == "'" for c in w]) or all([c.islower() or c == "'" for c in w])): words[i] = w.title() else: words[i] = w bai = "%s %s" % (" ".join(initials), " ".join(words)) # Keep letters and spaces bai = _bai_nonletters.sub("", bai) bai = bai.strip() # Replace all spaces with . bai = _bai_spaces.sub(".", bai) return bai
def test_asciify(): """Test of asciify.""" assert asciify("") == "" assert asciify("foo") == "foo" assert asciify("bèård") == "beard" assert asciify("schröder") == "schroder"