From 99fba5787d41b71e088f8c2686e4c7287a96ae3c Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 1 Apr 2025 03:46:24 +0000 Subject: [PATCH] =?UTF-8?q?Optimierung=20der=20Mitarbeiter-=20und=20Umsatz?= =?UTF-8?q?extraktion:=20Mitarbeiterzahl=20als=20vollst=C3=A4ndige=20Zahl?= =?UTF-8?q?=20und=20Umsatz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Umsatz-Extraktion: Der Zahlenstring wird robust normalisiert, indem Tausendertrennzeichen (Punkte, Leerzeichen) entfernt und das Komma als Dezimaltrenner berücksichtigt wird. Falls keine Einheit ("mio" oder "mrd") angegeben ist, wird der Wert als Euro angenommen und durch 1.000.000 geteilt. Mitarbeiter-Extraktion: Die Regex wurde erweitert, um gezielt nach dem Begriff "mitarbeiterzahl" (oder "mitarbeiter") zu suchen und alle Ziffern (einschließlich Tausendertrennzeichen) zu extrahieren, sodass z. B. aus "4.175" der Wert "4175" wird. Re-Evaluierungsmodus: Im Modus "2" werden alle Zeilen mit "x" in Spalte A verarbeitet, und der komplette Infobox-Inhalt wird in der Konsole ausgegeben. Spaltenanpassungen: Normalmodus: Firmenname in Spalte A, Website in Spalte B; Ausgabe in G:K, Datum in N, Version in Q. Re‑Evaluierungsmodus: Firmenname in Spalte B, Website in Spalte C; Ausgabe in H:L, Datum in O, Version in R. --- brancheneinstufung.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index d6d6d2f4..1033601d 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -12,7 +12,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "1.1.9" # Neue Version mit Re-Evaluierungsmodus, Umsatz- und Mitarbeiteroptimierung + VERSION = "1.1.10" # Neue Version mit verbesserter Umsatz- und Mitarbeiterextraktion LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -199,16 +199,20 @@ class WikipediaScraper: return raw_value.strip() if target == 'mitarbeiter': raw = raw_value.lower() - # Spezifische Suche: Wenn "mitarbeiterzahl" vorkommt, direkt danach extrahieren. - if "mitarbeiterzahl" in raw: - match = re.search(r'mitarbeiterzahl\D*(\d+)', raw) - if match: - debug_print(f"Mitarbeiterzahl gefunden: {match.group(1)} in Text: {raw_value}") - return match.group(1) - # Fallback: Erste gefundene Zahl + # Suche nach "mitarbeiterzahl" oder "mitarbeiter" gefolgt von Zahlen (inkl. Tausendertrennzeichen) + match = re.search(r'(?:mitarbeiterzahl|mitarbeiter)[^\d]*([\d.,\s]+)', raw) + if match: + num_str = match.group(1) + num_str = num_str.replace(" ", "") + # Entferne alle Zeichen, die keine Ziffern sind + num_str = re.sub(r'[^\d]', '', num_str) + if num_str: + debug_print(f"Mitarbeiterzahl gefunden: {num_str} in Text: {raw_value}") + return num_str + # Fallback: Kombiniere alle gefundenen Zahlen numbers = re.findall(r'\d+', raw) if numbers: - return numbers[0] + return "".join(numbers) return raw_value.strip() return "k.A." def extract_full_infobox(self, soup): @@ -307,7 +311,6 @@ class DataProcessor: company_data = self.wiki_scraper.extract_company_data(article.url) else: company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'} - # Update der Spalten self.sheet_handler.sheet.update(values=[[ company_data.get('url', 'k.A.'), company_data.get('first_paragraph', 'k.A.'), @@ -319,7 +322,6 @@ class DataProcessor: self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range) self.sheet_handler.sheet.update(values=[[Config.VERSION]], range_name=ver_range) print(f"✅ Aktualisiert: URL: {company_data.get('url', 'k.A.')}, Erster Absatz: {company_data.get('first_paragraph', 'k.A.')[:30]}..., Branche: {company_data.get('branche', 'k.A.')}, Umsatz: {company_data.get('umsatz', 'k.A.')}, Mitarbeiter: {company_data.get('mitarbeiter', 'k.A.')}") - # Im Re-Evaluierungsmodus: Ausgabe des kompletten Infobox-Inhalts in der Konsole if MODE == "2": print("----- Vollständiger Infobox-Inhalt -----") print(company_data.get("full_infobox", "k.A."))