From e93d2615a88c05eda9fed0d63a9c00a009e75306 Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 10 Apr 2025 06:25:21 +0000 Subject: [PATCH] bugfix --- brancheneinstufung.py | 61 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 0ce7ded8..1a99dd5d 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -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 ""