v1.1.16: Added fallback debug for Umsatz extraction; improved Mitarbeiter parsing
Unicode Normalisierung:
clean_text nutzt nun unicodedata.normalize("NFKC", ...) zur Vereinheitlichung ambigue Unicode-Zeichen.
Umsatz-Extraktion:
In extract_numeric_value wird nun vor der Regex-Suche nichtbrechende Leerzeichen (\xa0) durch normale Leerzeichen ersetzt.
Bei fehlender Umwandlung (z. B. wenn kein numerischer String gefunden wird) wird ein Debug-Log ausgegeben, der den Original-Rohtext zeigt.
Mitarbeiterextraktion:
Gleiche Methode wie bei Umsatz, wobei die Mitarbeiterzahl als ganze Zahl zurückgegeben wird.
Flexible Regex (unter Nutzung von in im Vergleich) fängt Varianten ab, sodass z. B. "4.175 (2021/22)" zu "4175" wird.
This commit is contained in:
@@ -13,7 +13,7 @@ import csv
|
||||
|
||||
# ==================== KONFIGURATION ====================
|
||||
class Config:
|
||||
VERSION = "v1.1.15" # v1.1.15: Umsatz in Mio € und Mitarbeiterzahl extrahiert; Unicode normalisiert
|
||||
VERSION = "v1.1.16" # v1.1.16: Umsatz in Mio € & Mitarbeiterzahl extrahiert; Fallback-Debug bei fehlender Umwandlung
|
||||
LANG = "de"
|
||||
CREDENTIALS_FILE = "service_account.json"
|
||||
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
|
||||
@@ -45,7 +45,7 @@ def clean_text(text):
|
||||
"""Normalisiert Unicode, entfernt Referenzen und extra Whitespace."""
|
||||
if not text:
|
||||
return "k.A."
|
||||
# Unicode-Normalisierung: Vereinheitlicht ambigue Zeichen (NFKC)
|
||||
# Unicode-Normalisierung (NFKC vereinheitlicht ambigue Zeichen)
|
||||
text = unicodedata.normalize("NFKC", str(text))
|
||||
text = re.sub(r'\[\d+\]', '', text)
|
||||
text = re.sub(r'\s+', ' ', text).strip()
|
||||
@@ -75,33 +75,35 @@ def normalize_company_name(name):
|
||||
def extract_numeric_value(raw_value, is_umsatz=False):
|
||||
"""
|
||||
Extrahiert den numerischen Wert aus raw_value.
|
||||
- Nutzt Komma als Dezimaltrenner, entfernt Punkte als Tausendertrennzeichen.
|
||||
- Für Umsatz: Falls "mrd" vorkommt, wird mit 1000 multipliziert; fehlt eine Einheit, wird durch 1e6 geteilt.
|
||||
- Nutzt Komma als Dezimaltrenner und entfernt Punkte als Tausendertrennzeichen.
|
||||
- Für Umsatz: Falls "mrd" vorkommt, wird mit 1000 multipliziert; enthält der Text keine Einheit, so wird durch 1e6 geteilt.
|
||||
- Für Mitarbeiter: Gibt den ganzzahligen Wert zurück.
|
||||
- Falls die Umwandlung fehlschlägt, wird der Original-Rohtext im Debug-Log ausgegeben.
|
||||
"""
|
||||
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 or not match.group(1):
|
||||
# Ersetze nichtbrechende Leerzeichen durch normale Leerzeichen
|
||||
raw = raw_value.lower().replace("\xa0", " ")
|
||||
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:
|
||||
# Entferne Punkte als Tausendertrennzeichen und ersetze Komma durch Punkt
|
||||
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 "k.A."
|
||||
debug_print(f"Fehler bei der Umwandlung von '{num_str}' (Rohtext: '{raw_value}'): {e}")
|
||||
return raw_value # Rückgabe des Rohtexts als Fallback
|
||||
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}: {e}")
|
||||
return "k.A."
|
||||
debug_print(f"Fehler bei der Umwandlung von '{num_str}' (Rohtext: '{raw_value}'): {e}")
|
||||
return raw_value # Rückgabe des Rohtexts als Fallback
|
||||
if is_umsatz:
|
||||
if "mrd" in raw or "milliarden" in raw:
|
||||
num *= 1000
|
||||
|
||||
Reference in New Issue
Block a user