bugfix
This commit is contained in:
@@ -857,56 +857,47 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor, row_limit=N
|
||||
logging.info(f"Wiki-Updates abgeschlossen. {processed_rows_count} Zeilen geprüft. {updated_url_count} URLs kopiert & für ReEval markiert, {cleared_suggestion_count} ungültige Vorschläge gelöscht/markiert.")
|
||||
|
||||
def extract_numeric_value(raw_value, is_umsatz=False):
|
||||
"""Extrahiert und normalisiert Zahlenwerte (Umsatz in Mio, Mitarbeiter)."""
|
||||
"""Extrahiert und normalisiert Zahlenwerte (Umsatz in Mio, Mitarbeiter).
|
||||
Berücksichtigt jetzt auch Apostroph (') als Tausendertrenner."""
|
||||
if not raw_value: return "k.A."
|
||||
# Stelle sicher, dass raw_value ein String ist
|
||||
raw_value_str = str(raw_value)
|
||||
# Frühe Prüfung auf leeren String oder bekannte "Nicht verfügbar"-Werte
|
||||
if not raw_value_str.strip() or raw_value_str.strip().lower() in ['k.a.', 'n/a', '-']:
|
||||
return "k.A."
|
||||
|
||||
# Bereinige Text vor der Verarbeitung
|
||||
processed_value = clean_text(raw_value_str) # clean_text sollte "k.A." zurückgeben, wenn nichts übrig bleibt
|
||||
processed_value = clean_text(raw_value_str)
|
||||
if processed_value == "k.A.": return "k.A."
|
||||
|
||||
# Debug-Log des zu verarbeitenden Werts
|
||||
logging.debug(f"extract_numeric_value: Verarbeite Wert: '{processed_value}' (is_umsatz={is_umsatz})")
|
||||
|
||||
# Entferne Präfixe wie ca., über, etc. und Währungssymbole (€, $, etc.)
|
||||
# --- Anpassung hier: Entferne auch Apostroph ---
|
||||
processed_value = re.sub(r'(?i)^\s*(ca\.?|circa|rund|etwa|über|unter|mehr als|weniger als|bis zu)\s+', '', processed_value)
|
||||
processed_value = re.sub(r'[€$£¥]', '', processed_value).strip()
|
||||
|
||||
# Behandle Bereiche (z.B. "100 - 200 Mio") -> Nimm die erste Zahl
|
||||
processed_value = re.split(r'\s*(-|–|bis)\s*', processed_value, 1)[0].strip()
|
||||
# Entferne Punkte UND Apostrophe als Tausendertrenner
|
||||
processed_value = processed_value.replace('.', '').replace("'", "")
|
||||
# Ersetze Komma durch Punkt für Dezimaltrennung
|
||||
processed_value = processed_value.replace(',', '.')
|
||||
# --- Ende Anpassung ---
|
||||
|
||||
# Entferne Tausendertrennzeichen (Punkte oder Kommas, abhängig von Lokalisierung - hier generell Punkte)
|
||||
# Behalte Komma als mögliches Dezimaltrennzeichen
|
||||
processed_value = processed_value.replace('.', '') # Entferne Punkte GANZ
|
||||
processed_value = processed_value.replace(',', '.') # Ersetze Komma durch Punkt
|
||||
|
||||
# Suche nach der ersten Zahl (kann Dezimalpunkt enthalten)
|
||||
# Erlaube optional ein Leerzeichen vor Einheiten wie Mio/Mrd etc.
|
||||
match = re.search(r'([\d.]+)', processed_value)
|
||||
if not match:
|
||||
# Warne, wenn keine Zahl gefunden wurde
|
||||
logging.warning(f"Keine numerischen Zeichen gefunden nach Bereinigung von: '{raw_value_str}' -> Ergibt: '{processed_value}'")
|
||||
return "k.A."
|
||||
|
||||
num_str = match.group(1)
|
||||
try:
|
||||
# Versuche, leere Strings oder nur '.' abzufangen
|
||||
if not num_str or num_str == '.': raise ValueError("Leerer oder ungültiger Zahlenstring")
|
||||
num = float(num_str)
|
||||
except ValueError:
|
||||
# Fehler loggen
|
||||
logging.error(f"Fehler bei Float-Umwandlung des extrahierten Strings '{num_str}' (aus '{processed_value}')")
|
||||
except ValueError as e:
|
||||
logging.error(f"Fehler bei Float-Umwandlung des extrahierten Strings '{num_str}' (aus '{processed_value}'): {e}")
|
||||
return "k.A."
|
||||
|
||||
# Multiplikatoren anwenden (Groß/Kleinschreibung ignorieren)
|
||||
original_lower = raw_value_str.lower() # Nutze Original für Keyword-Suche
|
||||
original_lower = raw_value_str.lower()
|
||||
multiplier = 1.0
|
||||
unit_found = None
|
||||
|
||||
# Priorisiere spezifischere Einheiten zuerst (Mrd. vor Mio.)
|
||||
if "mrd" in original_lower or "milliarden" in original_lower or "billion" in original_lower: # Englisch Billion = Deutsch Milliarde
|
||||
if "mrd" in original_lower or "milliarden" in original_lower or "billion" in original_lower:
|
||||
multiplier = 1000000000.0
|
||||
unit_found = "Mrd"
|
||||
elif "mio" in original_lower or "millionen" in original_lower or "mill." in original_lower:
|
||||
@@ -920,14 +911,11 @@ def extract_numeric_value(raw_value, is_umsatz=False):
|
||||
if unit_found:
|
||||
logging.debug(f" -> Multiplikator '{unit_found}' ({multiplier}) angewendet, Ergebnis: {num}")
|
||||
|
||||
# Finale Formatierung
|
||||
if is_umsatz:
|
||||
# Umsatz in Millionen Euro (als String ohne Nachkommastellen)
|
||||
umsatz_mio = round(num / 1000000.0)
|
||||
logging.debug(f" -> Finaler Umsatz (Mio): {umsatz_mio}")
|
||||
return str(int(umsatz_mio))
|
||||
else:
|
||||
# Mitarbeiter als ganze Zahl (als String)
|
||||
mitarbeiter_int = round(num)
|
||||
logging.debug(f" -> Finale Mitarbeiterzahl: {mitarbeiter_int}")
|
||||
return str(int(mitarbeiter_int))
|
||||
|
||||
Reference in New Issue
Block a user