Optimierung der Mitarbeiter- und Umsatzextraktion: Mitarbeiterzahl als vollständige Zahl und Umsatz

Umsatz-Extraktion:

Der Zahlenstring wird robust normalisiert, indem Tausendertrennzeichen (Punkte, Leerzeichen) entfernt und das Komma als Dezimaltrenner berücksichtigt wird.

Falls keine Einheit ("mio" oder "mrd") angegeben ist, wird der Wert als Euro angenommen und durch 1.000.000 geteilt.

Mitarbeiter-Extraktion:

Die Regex wurde erweitert, um gezielt nach dem Begriff "mitarbeiterzahl" (oder "mitarbeiter") zu suchen und alle Ziffern (einschließlich Tausendertrennzeichen) zu extrahieren, sodass z. B. aus "4.175" der Wert "4175" wird.

Re-Evaluierungsmodus:

Im Modus "2" werden alle Zeilen mit "x" in Spalte A verarbeitet, und der komplette Infobox-Inhalt wird in der Konsole ausgegeben.

Spaltenanpassungen:

Normalmodus: Firmenname in Spalte A, Website in Spalte B; Ausgabe in G:K, Datum in N, Version in Q.

Re‑Evaluierungsmodus: Firmenname in Spalte B, Website in Spalte C; Ausgabe in H:L, Datum in O, Version in R.
This commit is contained in:
2025-04-01 03:46:24 +00:00
parent bbe14c8a9d
commit 99fba5787d

View File

@@ -12,7 +12,7 @@ import csv
# ==================== KONFIGURATION ====================
class Config:
VERSION = "1.1.9" # Neue Version mit Re-Evaluierungsmodus, Umsatz- und Mitarbeiteroptimierung
VERSION = "1.1.10" # Neue Version mit verbesserter Umsatz- und Mitarbeiterextraktion
LANG = "de"
CREDENTIALS_FILE = "service_account.json"
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
@@ -199,16 +199,20 @@ class WikipediaScraper:
return raw_value.strip()
if target == 'mitarbeiter':
raw = raw_value.lower()
# Spezifische Suche: Wenn "mitarbeiterzahl" vorkommt, direkt danach extrahieren.
if "mitarbeiterzahl" in raw:
match = re.search(r'mitarbeiterzahl\D*(\d+)', raw)
if match:
debug_print(f"Mitarbeiterzahl gefunden: {match.group(1)} in Text: {raw_value}")
return match.group(1)
# Fallback: Erste gefundene Zahl
# Suche nach "mitarbeiterzahl" oder "mitarbeiter" gefolgt von Zahlen (inkl. Tausendertrennzeichen)
match = re.search(r'(?:mitarbeiterzahl|mitarbeiter)[^\d]*([\d.,\s]+)', raw)
if match:
num_str = match.group(1)
num_str = num_str.replace(" ", "")
# Entferne alle Zeichen, die keine Ziffern sind
num_str = re.sub(r'[^\d]', '', num_str)
if num_str:
debug_print(f"Mitarbeiterzahl gefunden: {num_str} in Text: {raw_value}")
return num_str
# Fallback: Kombiniere alle gefundenen Zahlen
numbers = re.findall(r'\d+', raw)
if numbers:
return numbers[0]
return "".join(numbers)
return raw_value.strip()
return "k.A."
def extract_full_infobox(self, soup):
@@ -307,7 +311,6 @@ class DataProcessor:
company_data = self.wiki_scraper.extract_company_data(article.url)
else:
company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'}
# Update der Spalten
self.sheet_handler.sheet.update(values=[[
company_data.get('url', 'k.A.'),
company_data.get('first_paragraph', 'k.A.'),
@@ -319,7 +322,6 @@ class DataProcessor:
self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range)
self.sheet_handler.sheet.update(values=[[Config.VERSION]], range_name=ver_range)
print(f"✅ Aktualisiert: URL: {company_data.get('url', 'k.A.')}, Erster Absatz: {company_data.get('first_paragraph', 'k.A.')[:30]}..., Branche: {company_data.get('branche', 'k.A.')}, Umsatz: {company_data.get('umsatz', 'k.A.')}, Mitarbeiter: {company_data.get('mitarbeiter', 'k.A.')}")
# Im Re-Evaluierungsmodus: Ausgabe des kompletten Infobox-Inhalts in der Konsole
if MODE == "2":
print("----- Vollständiger Infobox-Inhalt -----")
print(company_data.get("full_infobox", "k.A."))