diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 42ce3b6f..1fb1f838 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -12,7 +12,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "1.1.12" # Version mit optimierter Umsatz- und Mitarbeiterextraktion + VERSION = "1.1.13" # Neue Version mit finaler Umsatz- und Mitarbeiterextraktion LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -72,30 +72,37 @@ def normalize_company_name(name): def extract_numeric_value(raw_value, is_umsatz=False): """ Extrahiert den numerischen Wert aus raw_value. + - Falls raw_value leer ist, wird "k.A." zurückgegeben. - Wenn ein Komma vorhanden ist, werden Punkte als Tausendertrennzeichen entfernt und das Komma als Dezimaltrenner genutzt. - Wenn kein Komma vorhanden ist, werden alle Punkte entfernt (als Tausendertrennzeichen). - - Für Umsatz: Falls "mrd" (Milliarden) vorkommt, multipliziert mit 1000; falls keine Einheit (weder "mio" noch "mrd") vorhanden ist, wird der Wert als Euro angenommen und durch 1e6 geteilt. + - Für Umsatz: Falls "mrd" (Milliarden) vorkommt, wird der Wert mit 1000 multipliziert; enthält der Text weder "mio" noch "mrd", so wird angenommen, dass der Wert in Euro ist, und er wird durch 1e6 geteilt. - Für Mitarbeiter: Der extrahierte Wert wird als ganze Zahl zurückgegeben. """ + raw_value = raw_value.strip() + if not raw_value: + return "k.A." raw = raw_value.lower() match = re.search(r'([\d.,]+)', raw) if not match: - return raw_value.strip() + return "k.A." num_str = match.group(1) + if not num_str: + return "k.A." + # Wenn ein Komma vorhanden ist, behandeln wir es als Dezimaltrenner. if ',' in num_str: num_str = num_str.replace('.', '').replace(',', '.') try: num = float(num_str) except Exception as e: debug_print(f"Fehler bei der Umwandlung von {num_str}: {e}") - return raw_value.strip() + return "k.A." else: - num_str = num_str.replace('.', '') + num_str = num_str.replace(' ', '').replace('.', '') try: num = float(num_str) except Exception as e: debug_print(f"Fehler bei der Umwandlung von {num_str}: {e}") - return raw_value.strip() + return "k.A." if is_umsatz: if "mrd" in raw or "milliarden" in raw: num *= 1000 @@ -235,7 +242,7 @@ class WikipediaScraper: return result def extract_company_data(self, page_url): if not page_url: - return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', + return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'} try: response = requests.get(page_url) @@ -258,7 +265,7 @@ class WikipediaScraper: } except Exception as e: debug_print(f"Extraktionsfehler: {str(e)}") - return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', + return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'} @retry_on_failure @@ -317,7 +324,7 @@ class DataProcessor: if article: company_data = self.wiki_scraper.extract_company_data(article.url) else: - company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', + company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'} self.sheet_handler.sheet.update(values=[[ company_data.get('url', 'k.A.'),