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 ====================
|
||||
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"
|
||||
CREDENTIALS_FILE = "service_account.json"
|
||||
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):
|
||||
"""
|
||||
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 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.
|
||||
"""
|
||||
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:
|
||||
return raw_value.strip()
|
||||
return "k.A."
|
||||
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:
|
||||
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 raw_value.strip()
|
||||
return "k.A."
|
||||
else:
|
||||
num_str = num_str.replace('.', '')
|
||||
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 raw_value.strip()
|
||||
return "k.A."
|
||||
if is_umsatz:
|
||||
if "mrd" in raw or "milliarden" in raw:
|
||||
num *= 1000
|
||||
@@ -235,7 +242,7 @@ class WikipediaScraper:
|
||||
return result
|
||||
def extract_company_data(self, page_url):
|
||||
if not page_url:
|
||||
return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.',
|
||||
return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.',
|
||||
'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'}
|
||||
try:
|
||||
response = requests.get(page_url)
|
||||
@@ -258,7 +265,7 @@ class WikipediaScraper:
|
||||
}
|
||||
except Exception as e:
|
||||
debug_print(f"Extraktionsfehler: {str(e)}")
|
||||
return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.',
|
||||
return {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.',
|
||||
'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'}
|
||||
|
||||
@retry_on_failure
|
||||
@@ -317,7 +324,7 @@ class DataProcessor:
|
||||
if article:
|
||||
company_data = self.wiki_scraper.extract_company_data(article.url)
|
||||
else:
|
||||
company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.',
|
||||
company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.',
|
||||
'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'full_infobox': 'k.A.'}
|
||||
self.sheet_handler.sheet.update(values=[[
|
||||
company_data.get('url', 'k.A.'),
|
||||
|
||||
Reference in New Issue
Block a user