v1.2.6: Erweiterte String-Bereinigung für Umsatz/Mitarbeiterwerte; verbesserter Debug-Log

Erweiterte String-Bereinigung:
Zusätzliche Ersetzungen in extract_numeric_value (Entfernung von "ca.", "circa", "etwa", "über", "rund") zur robusteren Extraktion numerischer Werte aus Rohtexten.

Fallback-Handling:
Bei Fehlern in der Umwandlung wird der Originaltext oder "k.A." als Fallback ausgegeben.

Zusätzliche Debug-Ausgabe:
Vor dem Vergleich der CRM- und Wikipedia-Umsätze werden die bereinigten Werte im Debug-Log ausgegeben.

Kurze Pause (1 Sekunde):
Eine 1-Sekunden-Pause wird nach dem Update in Google Sheets eingefügt, um sicherzustellen, dass die Werte vor dem Vergleich vollständig gespeichert sind.
This commit is contained in:
2025-04-01 18:19:07 +00:00
parent e7a30eb587
commit 74b1395c57

View File

@@ -14,7 +14,7 @@ import csv
# ==================== KONFIGURATION ====================
class Config:
VERSION = "v1.2.5" # v1.2.5: Umsatzvergleich verbessert; 1 Sekunde Pause + zusätzliche Debug-Ausgabe
VERSION = "v1.2.6" # v1.2.6: Erweiterte String-Bereinigung und robustere Umwandlung von Umsatz/Mitarbeiterwerten
LANG = "de"
CREDENTIALS_FILE = "service_account.json"
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
@@ -72,31 +72,30 @@ 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 gängige Zusätze wie "ca.", "circa", "über" etc.
raw_value = re.sub(r'\b(ca\.?|circa|über)\b', '', raw_value, flags=re.IGNORECASE)
raw = raw_value.lower().replace("\xa0", " ")
# Entferne häufige 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():
debug_print(f"Keine numerischen Zeichen gefunden im Rohtext: '{raw_value}'")
return "k.A."
num_str = match.group(1)
if ',' in num_str:
# 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(',', '.')
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
else:
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}' (Rohtext: '{raw_value}'): {e}")
return raw_value
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:
num *= 1000
@@ -403,12 +402,10 @@ 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
# Neues Schema:
# B: Firmenname, C: Website, CRM-Umsatz in Spalte I (Index 8)
# Wikipedia-Daten: Spalten K bis Q
# ChatGPT Umsatz: Spalte AF
# CRM Umsatz in Spalte I (Index 8)
# Umsatz-Abgleich: Spalte AG
# 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 ""
@@ -441,18 +438,18 @@ class DataProcessor:
company_data.get('categories', 'k.A.')
]
self.sheet_handler.sheet.update(values=[wiki_values], range_name=wiki_update_range)
# Pause einbauen, damit die Werte in Google Sheets aktualisiert werden.
time.sleep(1)
# ChatGPT API: Umsatzbewertung basierend auf Firmenname und Wikipedia-Umsatz
time.sleep(1) # 1 Sekunde Pause, um sicherzustellen, dass die Daten gespeichert wurden
# ChatGPT API: Umsatzbewertung
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 aus Spalte I und Wikipedia-Umsatz
# Umsatz-Abgleich: CRM-Umsatz (Spalte I) vs. Wikipedia-Umsatz
crm_umsatz = row_data[8] if len(row_data) > 8 else "k.A."
abgleich_result = compare_umsatz_values(crm_umsatz, company_data.get('umsatz', '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)
self.sheet_handler.sheet.update(values=[[abgleich_result]], range_name=abgleich_range)
current_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range)