diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 6bfd30d7..62d60737 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -12,7 +12,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "1.1.3" + VERSION = "1.1.4" LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -55,8 +55,20 @@ def normalize_company_name(name): """Entfernt gängige Firmierungsformen und normalisiert den Namen.""" if not name: return "" - # Liste gängiger Firmierungsformen (inklusive "Gruppe") - pattern = r'\b(gmbh|ag|aktiengesellschaft|co\.?\s*kg|mbh|&\s*co\.?\s*kg|e\.v\.|limited|ltd|inc|corp|corporation|gruppe)\b' + # Liste gängiger Firmierungsformen + forms = [ + r'gmbh', r'g\.m\.b\.h\.', r'ug', r'u\.g\.', r'ug \(haftungsbeschränkt\)', + r'u\.g\. \(haftungsbeschränkt\)', r'ag', r'a\.g\.', r'ohg', r'o\.h\.g\.', + r'kg', r'k\.g\.', r'gmbh & co\. kg', r'g\.m\.b\.h\. & co\. k\.g\.', + r'ag & co\. kg', r'a\.g\. & co\. k\.g\.', r'e\.k\.', r'e\.kfm\.', r'e\.kfr\.', + r'ltd\.', r'ltd & co\. kg', r's\.a r\.l\.', r'stiftung', r'genossenschaft', + r'ggmbh', r'gug', r'partg', r'partgmbb', r'kgaa', r'se', r'og', r'o\.g\.', + r'e\.u\.', r'ges\.n\.b\.r\.', r'genmbh', r'verein', r'kollektivgesellschaft', + r'kommanditgesellschaft', r'einzelfirma', r'sàrl', r'sa', r'sagl', + r'gmbh & co\. ohg', r'ag & co\. ohg', r'gmbh & co\. kgaa', r'ag & co\. kgaa', + r's\.a\.', r's\.p\.a\.', r'b\.v\.', r'n\.v\.' + ] + pattern = r'\b(' + '|'.join(forms) + r')\b' normalized = re.sub(pattern, '', name, flags=re.IGNORECASE) normalized = re.sub(r'[\-–]', ' ', normalized) # Ersetze Bindestriche durch Leerzeichen normalized = re.sub(r'\s+', ' ', normalized).strip() @@ -79,13 +91,11 @@ class GoogleSheetHandler: self.sheet_values = self.sheet.get_all_values() def get_start_index(self): - """Ermittelt die erste leere Zeile in Spalte N""" + """Ermittelt die erste leere Zeile in Spalte N (Index 14)""" filled_n = [row[13] if len(row) > 13 else '' for row in self.sheet_values[1:]] return next((i + 1 for i, v in enumerate(filled_n, start=1) if not str(v).strip()), len(filled_n) + 1) - def update_row(self, row_num, values): - """Aktualisiert eine Zeile im Sheet (Spalten G bis K, also 5 Spalten)""" - self.sheet.update(range_name=f"G{row_num}:K{row_num}", values=[values]) + # Für die neuen Updates nutzen wir separate Update-Aufrufe # ==================== WIKIPEDIA SCRAPER ==================== class WikipediaScraper: @@ -208,7 +218,6 @@ class WikipediaScraper: match = re.search(r'(\d{1,3}(?:[.,]\d{3})*|\d+)', raw_value.replace('.', '').replace(',', '.')) if match: num = float(match.group(1)) - # Umsatz in Mio € als Zahl (aufgerundet) return str(int(round(num))) return raw_value.strip() if target == 'mitarbeiter': @@ -310,16 +319,22 @@ class DataProcessor: else: company_data = {'url': 'k.A.', 'first_paragraph': 'k.A.', 'branche': 'k.A.', 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.'} - current_values = self.sheet_handler.sheet.row_values(row_num) - new_values = [ - company_data.get('url', 'k.A.'), # Spalte G: Wikipedia URL - company_data.get('first_paragraph', 'k.A.'), # Spalte H: Erster Absatz - company_data.get('branche', 'k.A.'), # Spalte I: Branche - company_data.get('umsatz', 'k.A.'), # Spalte J: Umsatz (als Zahl in Mio €) - company_data.get('mitarbeiter', 'k.A.') # Spalte K: Anzahl Mitarbeiter - ] - self.sheet_handler.update_row(row_num, new_values) - print(f"✅ Aktualisiert: URL: {new_values[0]}, Erster Absatz: {new_values[1][:30]}..., Branche: {new_values[2]}, Umsatz: {new_values[3]}, Mitarbeiter: {new_values[4]}") + # Update der Spalten: + # G: URL, H: erster Absatz, I: Branche, J: Umsatz (als Zahl), K: Mitarbeiter + self.sheet_handler.sheet.update(f"G{row_num}:K{row_num}", [[ + company_data.get('url', 'k.A.'), + company_data.get('first_paragraph', 'k.A.'), + company_data.get('branche', 'k.A.'), + company_data.get('umsatz', 'k.A.'), + company_data.get('mitarbeiter', 'k.A.') + ]]) + # Spalte N: Datum und aktuelle Zeit + current_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + self.sheet_handler.sheet.update(f"N{row_num}", [[current_dt]]) + # Spalte Q: Version + self.sheet_handler.sheet.update(f"Q{row_num}", [[Config.VERSION]]) + + 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.')}") time.sleep(Config.RETRY_DELAY) # ==================== MAIN ====================