This commit is contained in:
2025-04-10 06:25:21 +00:00
parent 1a894da4a7
commit e93d2615a8

View File

@@ -98,6 +98,52 @@ def simple_normalize_url(url):
except Exception as e:
return "k.A."
def normalize_string(s):
"""
Normalisiert Sonderzeichen in einem String anhand eines umfangreichen Mappings.
Ersetzt beispielsweise:
- Deutsche Umlaute: ü -> ue, ö -> oe, ä -> ae, ß -> ss
- Verschiedene diakritische Zeichen: č, ć -> c; š -> s; ž -> z; etc.
- Auch weitere Buchstaben mit Akzenten werden konvertiert.
"""
replacements = {
# Deutsche Umlaute und spezielle Buchstaben
'Ä': 'Ae', 'Ö': 'Oe', 'Ü': 'Ue', 'ß': 'ss',
'ä': 'ae', 'ö': 'oe', 'ü': 'ue',
# Lateinische Buchstaben mit Akzenten
'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Å': 'A', 'Æ': 'AE',
'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 'å': 'a', 'æ': 'ae',
'Ç': 'C', 'ç': 'c',
'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E',
'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e',
'Ì': 'I', 'Í': 'I', 'Î': 'I', 'Ï': 'I',
'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i',
'Ñ': 'N', 'ñ': 'n',
'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ø': 'O',
'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ø': 'o',
'Œ': 'OE', 'œ': 'oe',
'Š': 'S', 'š': 's',
'Ž': 'Z', 'ž': 'z',
'Ý': 'Y', 'ý': 'y', 'ÿ': 'y',
# Zusätzliche spezifische Buchstaben
'Đ': 'D', 'đ': 'd',
'č': 'c', 'Č': 'C', 'ć': 'c', 'Ć': 'C',
'ł': 'l', 'Ł': 'L',
'ğ': 'g', 'Ğ': 'G',
'ş': 's', 'Ş': 'S',
# Weitere diakritische Zeichen (z. B. aus osteuropäischen Sprachen)
'ă': 'a', 'Ă': 'A',
'ı': 'i', 'İ': 'I',
'ň': 'n', 'Ň': 'N',
'ř': 'r', 'Ř': 'R',
'ő': 'o', 'Ű': 'U', 'ű': 'u', 'Ű': 'U',
'ț': 't', 'Ț': 'T',
'ș': 's', 'Ș': 'S'
}
for src, target in replacements.items():
s = s.replace(src, target)
return s
def get_gender(firstname):
"""
Ermittelt das Geschlecht anhand des Vornamens.
@@ -131,19 +177,20 @@ def get_gender(firstname):
def get_email_address(firstname, lastname, website):
"""
Generiert eine E-Mail-Adresse im Format vorname.nachname@domain.tld.
Dabei wird der Domainname aus der Website extrahiert.
Dabei wird der Domainname aus der Website extrahiert und Vor- und Nachname
zunächst mittels normalize_string normalisiert.
"""
# Falls die Website keinen Protokoll-Präfix hat, hinzufügen, um das Parsen zu ermöglichen
# Falls Website nicht mit http/https beginnt, Protokoll hinzufügen
url = website if website.startswith("http") else "http://" + website
parsed = urlparse(url)
domain = parsed.netloc
if domain.startswith("www."):
domain = domain[4:]
# Entferne Nicht-Alphanumerische Zeichen aus Vor- und Nachnamen und wandle in Kleinbuchstaben um
f = re.sub(r'\W+', '', firstname.lower())
l = re.sub(r'\W+', '', lastname.lower())
if f and l:
return f"{f}.{l}@{domain}"
# Vor- und Nachname normalisieren, in Kleinbuchstaben umwandeln und nicht-alphanumerische Zeichen entfernen
normalized_first = re.sub(r'\W+', '', normalize_string(firstname.lower()))
normalized_last = re.sub(r'\W+', '', normalize_string(lastname.lower()))
if normalized_first and normalized_last:
return f"{normalized_first}.{normalized_last}@{domain}"
else:
return ""