diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 6414a8fe..c0e8df0f 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -14,7 +14,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "v1.2.6" # v1.2.6: Erweiterte String-Bereinigung und robustere Umwandlung von Umsatz/Mitarbeiterwerten + VERSION = "v1.2.7" # v1.2.7: Verbesserte numerische Extraktion für Umsatz und Mitarbeiterzahlen LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -72,34 +72,36 @@ def normalize_company_name(name): return normalized.lower() def extract_numeric_value(raw_value, is_umsatz=False): - # Erweiterte Vorverarbeitung: Entferne gängige Zusätze und unerwünschte Zeichen. raw_value = raw_value.strip() if not raw_value: return "k.A." - # Entferne häufige Zusätze + # Entferne gängige Zusätze raw_value = re.sub(r'\b(ca\.?|circa|etwa|über|rund)\b', '', raw_value, flags=re.IGNORECASE) - # Entferne unnötige Leerzeichen und Sonderzeichen raw_value = raw_value.replace("\xa0", " ").strip() - raw = raw_value.lower() - match = re.search(r'([\d.,]+)', raw, flags=re.UNICODE) - if not match or not match.group(1).strip(): + # Entferne führende Nicht-Ziffern + num_str = re.sub(r'^[^\d]+', '', raw_value) + # Extrahiere die Zahl (Ziffern, Komma und Punkt) + match = re.search(r'([\d.,]+)', num_str) + if not match: debug_print(f"Keine numerischen Zeichen gefunden im Rohtext: '{raw_value}'") return "k.A." num_str = match.group(1) - # Prüfe, ob Komma als Dezimaltrennzeichen genutzt wird (deutsches Format) - if ',' in num_str and num_str.count(',') == 1 and len(num_str.split(',')[1]) <= 2: - num_str = num_str.replace('.', '').replace(',', '.') + # Prüfe, ob ein einzelnes Komma als Dezimaltrennzeichen verwendet wird (wenn kein Punkt vorhanden) + if ',' in num_str and '.' not in num_str and len(num_str.split(',')[1]) <= 2: + num_str = num_str.replace(',', '.') else: - num_str = num_str.replace(' ', '').replace('.', '') + # Entferne alle Kommas als Tausendertrennzeichen + num_str = num_str.replace(',', '') try: num = float(num_str) except Exception as e: debug_print(f"Fehler bei der Umwandlung von '{num_str}' (Rohtext: '{raw_value}'): {e}") return raw_value if is_umsatz: - if "mrd" in raw or "milliarden" in raw: + raw_lower = raw_value.lower() + if "mrd" in raw_lower or "milliarden" in raw_lower: num *= 1000 - elif "mio" in raw or "millionen" in raw: + elif "mio" in raw_lower or "millionen" in raw_lower: pass else: num /= 1e6 @@ -402,11 +404,6 @@ class DataProcessor: if i >= self.sheet_handler.get_start_index(): self._process_single_row(i, row) def _process_single_row(self, row_num, row_data): - # Neues Schema: - # B: Firmenname, C: Website, CRM-Umsatz in Spalte I (Index 8) - # Wikipedia-Daten: Spalten K bis Q - # ChatGPT Umsatz in Spalte AF, Vergleich in Spalte AG, - # Timestamp in Spalte AH, Version in Spalte AI. company_name = row_data[1] if len(row_data) > 1 else "" website = row_data[2] if len(row_data) > 2 else "" wiki_update_range = f"K{row_num}:Q{row_num}" @@ -429,7 +426,7 @@ class DataProcessor: 'full_infobox': 'k.A.' } wiki_values = [ - "k.A.", # Vorschlag Wiki URL + "k.A.", # Vorschlag Wiki URL (spalte K) company_data.get('url', 'k.A.'), company_data.get('first_paragraph', 'k.A.'), company_data.get('branche', 'k.A.'), @@ -438,15 +435,13 @@ class DataProcessor: company_data.get('categories', 'k.A.') ] self.sheet_handler.sheet.update(values=[wiki_values], range_name=wiki_update_range) - time.sleep(1) # 1 Sekunde Pause, um sicherzustellen, dass die Daten gespeichert wurden - # ChatGPT API: Umsatzbewertung + time.sleep(1) # 1 Sekunde Pause für Datensynchronisation wiki_umsatz = company_data.get('umsatz', 'k.A.') if wiki_umsatz != "k.A.": chatgpt_umsatz = evaluate_umsatz_chatgpt(company_name, wiki_umsatz) else: chatgpt_umsatz = "k.A." self.sheet_handler.sheet.update(values=[[chatgpt_umsatz]], range_name=chatgpt_range) - # Umsatz-Abgleich: CRM-Umsatz (Spalte I) vs. Wikipedia-Umsatz crm_umsatz = row_data[8] if len(row_data) > 8 else "k.A." debug_print(f"Bereinigte Vergleichswerte vor Umwandlung: CRM Umsatz: '{crm_umsatz}', Wiki Umsatz: '{wiki_umsatz}'") abgleich_result = compare_umsatz_values(crm_umsatz, wiki_umsatz)