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:
@@ -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."))
|
||||
|
||||
Reference in New Issue
Block a user