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 ====================
|
# ==================== KONFIGURATION ====================
|
||||||
class Config:
|
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"
|
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"
|
||||||
@@ -45,7 +45,7 @@ def clean_text(text):
|
|||||||
"""Normalisiert Unicode, entfernt Referenzen und extra Whitespace."""
|
"""Normalisiert Unicode, entfernt Referenzen und extra Whitespace."""
|
||||||
if not text:
|
if not text:
|
||||||
return "k.A."
|
return "k.A."
|
||||||
# Unicode-Normalisierung: Vereinheitlicht ambigue Zeichen (NFKC)
|
# Unicode-Normalisierung (NFKC vereinheitlicht ambigue Zeichen)
|
||||||
text = unicodedata.normalize("NFKC", str(text))
|
text = unicodedata.normalize("NFKC", str(text))
|
||||||
text = re.sub(r'\[\d+\]', '', text)
|
text = re.sub(r'\[\d+\]', '', text)
|
||||||
text = re.sub(r'\s+', ' ', text).strip()
|
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):
|
def extract_numeric_value(raw_value, is_umsatz=False):
|
||||||
"""
|
"""
|
||||||
Extrahiert den numerischen Wert aus raw_value.
|
Extrahiert den numerischen Wert aus raw_value.
|
||||||
- Nutzt Komma als Dezimaltrenner, entfernt Punkte als Tausendertrennzeichen.
|
- Nutzt Komma als Dezimaltrenner und entfernt Punkte als Tausendertrennzeichen.
|
||||||
- Für Umsatz: Falls "mrd" vorkommt, wird mit 1000 multipliziert; fehlt eine Einheit, wird durch 1e6 geteilt.
|
- 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.
|
- 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()
|
raw_value = raw_value.strip()
|
||||||
if not raw_value:
|
if not raw_value:
|
||||||
return "k.A."
|
return "k.A."
|
||||||
raw = raw_value.lower()
|
# Ersetze nichtbrechende Leerzeichen durch normale Leerzeichen
|
||||||
match = re.search(r'([\d.,]+)', raw)
|
raw = raw_value.lower().replace("\xa0", " ")
|
||||||
if not match or not match.group(1):
|
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."
|
return "k.A."
|
||||||
num_str = match.group(1)
|
num_str = match.group(1)
|
||||||
if ',' in num_str:
|
if ',' in num_str:
|
||||||
# Entferne Punkte als Tausendertrennzeichen und ersetze Komma durch Punkt
|
|
||||||
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}' (Rohtext: '{raw_value}'): {e}")
|
||||||
return "k.A."
|
return raw_value # Rückgabe des Rohtexts als Fallback
|
||||||
else:
|
else:
|
||||||
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}' (Rohtext: '{raw_value}'): {e}")
|
||||||
return "k.A."
|
return raw_value # Rückgabe des Rohtexts als Fallback
|
||||||
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