From 5bab7d78f624a82f4c00709e7947e3e6a5e2c17a Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 1 Apr 2025 09:08:36 +0000 Subject: [PATCH] v1.2.0: Updated column mapping per new schema with Alignment-Demo mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neues Spaltenschema: Die Alignment-Demo (Modus 3) wurde angepasst, um die neuen Spaltenüberschriften A–Z gemäß dem neuen Schema zu schreiben: Spalte A (ReEval Flag) Spalte B (Firmenname) Spalte C (Website) Spalte D (Ort) Spalte E (Beschreibung) Spalte F (Aktuelle Branche) Spalte G (Beschreibung Branche extern) Spalte H (Anzahl Techniker CRM) Spalte I (Vorschlag Wiki URL) Spalte J (Wikipedia URL) Spalte K (Wikipedia Absatz) Spalte L (Wikipedia Branche) Spalte M (Wikipedia Umsatz) Spalte N (Wikipedia Mitarbeiter) Spalte O (Wikipedia Kategorien) Spalte P (Konsistenzprüfung) Spalte Q (Begründung bei Inkonsistenz) Spalte R (Vorschlag Wiki Artikel ChatGPT) Spalte S (FSM Relevanz Ja / Nein) Spalte T (Begründung für FSM Relevanz) Spalte U (Timestamp letzte Prüfung) Spalte V (Schätzung Anzahl Mitarbeiter) Spalte W (Begründung bei Abweichung) Spalte X (Einschätzung Anzahl Servicetechniker) Spalte Y (Begründung bei Abweichung Anzahl Servicetechniker) Spalte Z (Version) Alignment-Demo-Modus (Option 3): Beim Starten des Modus 3 wird in Zeile 11200 der Range A11200:Z11200 mit den neuen Überschriften gefüllt, sodass du das Spaltenlayout vor der inhaltlichen Befüllung überprüfen kannst. Restliche Funktionalität: Die bestehenden Funktionen (Wikipedia-Suche, Umsatz- und Mitarbeiterextraktion etc.) bleiben unverändert. --- brancheneinstufung.py | 94 ++++++++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 33 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 5e809403..f17afbcd 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -13,7 +13,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "v1.2.0" # v1.2.0: Neue Spaltenanordnung, Alignment-Demo-Modus (Option 3) + VERSION = "v1.2.0" # v1.2.0: Neue Spaltenzuordnung gemäß dem neuen Schema LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -75,7 +75,8 @@ def extract_numeric_value(raw_value, is_umsatz=False): """ Extrahiert den numerischen Wert aus raw_value. - Nutzt Komma als Dezimaltrenner und entfernt Punkte als Tausendertrennzeichen. - - Für Umsatz: Falls "mrd" vorkommt, wird der Wert mit 1000 multipliziert; enthält der Text keine Einheit, so wird durch 1e6 geteilt. + - Für Umsatz: Falls "mrd" vorkommt, wird der Wert mit 1000 multipliziert; + enthält der Text keine Einheit, wird durch 1e6 geteilt. - Für Mitarbeiter: Gibt den ganzzahligen Wert zurück. - Bei Fehlern wird der Original-Rohtext im Debug-Log ausgegeben. """ @@ -94,14 +95,14 @@ def extract_numeric_value(raw_value, is_umsatz=False): num = float(num_str) except Exception as e: debug_print(f"Fehler bei der Umwandlung von '{num_str}' (Rohtext: '{raw_value}'): {e}") - return raw_value # Fallback: Originaltext + return raw_value else: 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}' (Rohtext: '{raw_value}'): {e}") - return raw_value # Fallback: Originaltext + return raw_value if is_umsatz: if "mrd" in raw or "milliarden" in raw: num *= 1000 @@ -128,7 +129,47 @@ class GoogleSheetHandler: 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) -# ==================== WIKIPEDIA SCRAPER ==================== +# ==================== ALIGNMENT DEMO (Modus 3) ==================== +def alignment_demo(sheet): + """ + Alignment-Demo: Schreibt in Zeile 11200 die neuen Spaltenüberschriften gemäß dem neuen Schema. + """ + new_headers = [ + "Spalte A (ReEval Flag)", + "Spalte B (Firmenname)", + "Spalte C (Website)", + "Spalte D (Ort)", + "Spalte E (Beschreibung)", + "Spalte F (Aktuelle Branche)", + "Spalte G (Beschreibung Branche extern)", + "Spalte H (Anzahl Techniker CRM)", + "Spalte I (Vorschlag Wiki URL)", + "Spalte J (Wikipedia URL)", + "Spalte K (Wikipedia Absatz)", + "Spalte L (Wikipedia Branche)", + "Spalte M (Wikipedia Umsatz)", + "Spalte N (Wikipedia Mitarbeiter)", + "Spalte O (Wikipedia Kategorien)", + "Spalte P (Konsistenzprüfung)", + "Spalte Q (Begründung bei Inkonsistenz)", + "Spalte R (Vorschlag Wiki Artikel ChatGPT)", + "Spalte S (FSM Relevanz Ja / Nein)", + "Spalte T (Begründung für FSM Relevanz)", + "Spalte U (Timestamp letzte Prüfung)", + "Spalte V (Schätzung Anzahl Mitarbeiter)", + "Spalte W (Begründung bei Abweichung)", + "Spalte X (Einschätzung Anzahl Servicetechniker)", + "Spalte Y (Begründung bei Abweichung Anzahl Servicetechniker)", + "Spalte Z (Version)" + ] + # Aktualisiere den Range von A11200 bis Z11200 (26 Spalten) + header_range = "A11200:Z11200" + sheet.update(values=[new_headers], range_name=header_range) + print("Alignment-Demo abgeschlossen: Neue Spaltenüberschriften in Zeile 11200 geschrieben.") + +# ==================== WIKIPEDIA SCRAPER, DATA PROCESSOR, etc. ==================== +# (Hier werden die Klassen WikipediaScraper, DataProcessor etc. übernommen; sie bleiben unverändert) + class WikipediaScraper: def __init__(self): wikipedia.set_lang(Config.LANG) @@ -286,32 +327,20 @@ class WikipediaScraper: continue return None -# ==================== ALIGNMENT DEMO (Modus 3) ==================== -def alignment_demo(sheet): - """ - Dieser Modus schreibt eine Demo-Zeile (z.B. in Zeile 11200) mit den neuen Spaltenüberschriften. - Passe die Liste new_headers an das gewünschte neue Schema an. - """ - # Beispiel für neue Spaltenüberschriften (bitte anpassen, falls das Schema anders lautet): - new_headers = [ - "Re-Eval Flag", # z. B. Spalte A - "Firmenname", # Spalte B - "Website", # Spalte C - "Branche (Datenbank)",# Neue Spalte (grün) - "Branche Wikipedia", # Bestand - "Umsatz Wikipedia (Mio €)", # Bestand - "Mitarbeiter Wikipedia", # Bestand - "Erster Absatz Wikipedia", # Neu verschoben - "Wikipedia URL", # Bestand - "Datum der Extraktion", # Neu - "Version" # Neu - ] - # Schreibe die neuen Header in Zeile 11200 (A11200 bis K11200) - header_range = "A11200:K11200" - sheet.update(values=[new_headers], range_name=header_range) - print("Alignment-Demo abgeschlossen: Neue Spaltenüberschriften in Zeile 11200 geschrieben.") +class GoogleSheetHandler: + def __init__(self): + self.sheet = None + self.sheet_values = [] + self._connect() + def _connect(self): + scope = ["https://www.googleapis.com/auth/spreadsheets"] + creds = ServiceAccountCredentials.from_json_keyfile_name(Config.CREDENTIALS_FILE, scope) + self.sheet = gspread.authorize(creds).open_by_url(Config.SHEET_URL).sheet1 + self.sheet_values = self.sheet.get_all_values() + def get_start_index(self): + 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) -# ==================== DATA PROCESSOR ==================== class DataProcessor: def __init__(self): self.sheet_handler = GoogleSheetHandler() @@ -320,7 +349,7 @@ class DataProcessor: if MODE == "2": print("Re-Evaluierungsmodus: Verarbeitung aller Zeilen mit 'x' in Spalte A.") elif MODE == "3": - print("Alignment-Demo-Modus: Schreibe Spaltenüberschriften in Zeile 11200.") + print("Alignment-Demo-Modus: Schreibe neue Spaltenüberschriften in Zeile 11200.") alignment_demo(self.sheet_handler.sheet) return else: @@ -370,7 +399,6 @@ class DataProcessor: print("----------------------------------------") time.sleep(Config.RETRY_DELAY) -# ==================== MAIN ==================== if __name__ == "__main__": mode_input = input("Wählen Sie den Modus: 1 für normalen Modus, 2 für Re-Evaluierungsmodus, 3 für Alignment-Demo: ").strip() if mode_input == "2": @@ -389,4 +417,4 @@ if __name__ == "__main__": num_rows = None processor = DataProcessor() processor.process_rows(num_rows) - print("\n✅ Wikipedia-Auswertung abgeschlossen") + print("\n✅ Wikipedia-Auswertung abgeschlossen (v1.2.0)")