Finalisierung Umsatz- und Mitarbeiterextraktion – Umsatz in Mio € korrekt, Mitarbeiterzahl als ganze
Umsatz-Extraktion: Die Helper-Funktion extract_numeric_value wurde angepasst, um leere Eingaben explizit als "k.A." zurückzugeben. Bei Werten wie "2,395 Mrd. Euro" wird zuerst "2,395" extrahiert, dann werden Punkte als Tausendertrennzeichen entfernt und das Komma als Dezimaltrenner genutzt. Wird "mrd" gefunden, wird der Wert mit 1000 multipliziert, sodass "2,395 Mrd." zu 2395 Mio. wird. Falls keine Einheit angegeben ist, wird der Wert als Euro angenommen und durch 1e6 geteilt. Mitarbeiterextraktion: Die Funktion extract_numeric_value wird auch für die Mitarbeiterzahl genutzt. Falls der extrahierte String leer ist, wird "k.A." zurückgegeben. Beispiel: "4.175 (2021/22)" wird so verarbeitet, dass der Punkt als Tausendertrennzeichen entfernt wird, sodass der Wert "4175" resultiert. Ambiguitäten bei Tausendertrennzeichen (Punkt als Tausendertrennzeichen) werden nun korrekt behandelt. Allgemeines: Der Re‑Evaluierungsmodus gibt weiterhin den vollständigen Infobox-Inhalt in der Konsole aus. Unicode-Warnungen können ignoriert werden, sofern sie nicht zu funktionalen Problemen führen.
This commit is contained in:
@@ -12,7 +12,7 @@ import csv
|
|||||||
|
|
||||||
# ==================== KONFIGURATION ====================
|
# ==================== KONFIGURATION ====================
|
||||||
class Config:
|
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"
|
LANG = "de"
|
||||||
CREDENTIALS_FILE = "service_account.json"
|
CREDENTIALS_FILE = "service_account.json"
|
||||||
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
|
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):
|
def extract_numeric_value(raw_value, is_umsatz=False):
|
||||||
"""
|
"""
|
||||||
Extrahiert den numerischen Wert aus raw_value.
|
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 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).
|
- 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.
|
- 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()
|
raw = raw_value.lower()
|
||||||
match = re.search(r'([\d.,]+)', raw)
|
match = re.search(r'([\d.,]+)', raw)
|
||||||
if not match:
|
if not match:
|
||||||
return raw_value.strip()
|
return "k.A."
|
||||||
num_str = match.group(1)
|
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:
|
if ',' in num_str:
|
||||||
num_str = num_str.replace('.', '').replace(',', '.')
|
num_str = num_str.replace('.', '').replace(',', '.')
|
||||||
try:
|
try:
|
||||||
num = float(num_str)
|
num = float(num_str)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler bei der Umwandlung von {num_str}: {e}")
|
debug_print(f"Fehler bei der Umwandlung von {num_str}: {e}")
|
||||||
return raw_value.strip()
|
return "k.A."
|
||||||
else:
|
else:
|
||||||
num_str = num_str.replace('.', '')
|
num_str = num_str.replace(' ', '').replace('.', '')
|
||||||
try:
|
try:
|
||||||
num = float(num_str)
|
num = float(num_str)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler bei der Umwandlung von {num_str}: {e}")
|
debug_print(f"Fehler bei der Umwandlung von {num_str}: {e}")
|
||||||
return raw_value.strip()
|
return "k.A."
|
||||||
if is_umsatz:
|
if is_umsatz:
|
||||||
if "mrd" in raw or "milliarden" in raw:
|
if "mrd" in raw or "milliarden" in raw:
|
||||||
num *= 1000
|
num *= 1000
|
||||||
|
|||||||
Reference in New Issue
Block a user