From 422fad4952db23b60cbbc66942be0076d7398ab2 Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 1 Apr 2025 16:30:03 +0000 Subject: [PATCH] v1.2.3: Updated alignment demo and extraction ranges per new schema (K:Q for Wiki data, AH for Times MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zusammenfassung der Änderungen (v1.2.2 → v1.2.3) Neues Spaltenschema: Die neue Spaltenzuordnung wurde gemäß der CSV-Vorlage umgesetzt. Die relevanten Felder aus Wikipedia werden jetzt in: Spalte K: Vorschlag Wiki URL (Platzhalter "k.A.") Spalte L: Wikipedia URL Spalte M: Wikipedia Absatz Spalte N: Wikipedia Branche Spalte O: Wikipedia Umsatz Spalte P: Wikipedia Mitarbeiter Spalte Q: Wikipedia Kategorien geschrieben. Timestamp & Version: Der Timestamp wird in Spalte AH und die Version in Spalte AI aktualisiert. Alignment-Demo: Der Alignment-Demo-Modus (Option 3) schreibt nun die neuen Spaltenüberschriften in den Range A11200:AI11200 (34 Spalten entsprechend dem neuen Schema). --- brancheneinstufung.py | 82 +++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index d8b9b4ca..6ba3d94c 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -13,7 +13,7 @@ import csv # ==================== KONFIGURATION ==================== class Config: - VERSION = "v1.2.2" # v1.2.2: Neue Spaltenzuordnung & Wikipedia-Kategorien extrahieren + VERSION = "v1.2.3" # v1.2.3: Neue Spaltenzuordnung gemäß dem neuen Schema, Wikipedia-Kategorien extrahieren LANG = "de" CREDENTIALS_FILE = "service_account.json" SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo" @@ -143,26 +143,35 @@ def alignment_demo(sheet): "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 (Schätzung Anzahl Mitarbeiter)", - "Spalte V (Begründung bei Abweichung)", - "Spalte W (Einschätzung Anzahl Servicetechniker)", - "Spalte X (Begründung bei Abweichung Anzahl Servicetechniker)", - "Spalte Y (Timestamp letzte Prüfung)", - "Spalte Z (Version)" + "Spalte I (Umsatz CRM)", + "Spalte J (Anzahl Mitarbeiter CRM)", + "Spalte K (Vorschlag Wiki URL)", + "Spalte L (Wikipedia URL)", + "Spalte M (Wikipedia Absatz)", + "Spalte N (Wikipedia Branche)", + "Spalte O (Wikipedia Umsatz)", + "Spalte P (Wikipedia Mitarbeiter)", + "Spalte Q (Wikipedia Kategorien)", + "Spalte R (Konsistenzprüfung)", + "Spalte S (Begründung bei Inkonsistenz)", + "Spalte T (Vorschlag Wiki Artikel ChatGPT)", + "Spalte U (Begründung bei Abweichung)", + "Spalte V (Vorschlag neue Branche)", + "Spalte W (Konsistenzprüfung Branche)", + "Spalte X (Begründung Abweichung Branche)", + "Spalte Y (FSM Relevanz Ja / Nein)", + "Spalte Z (Begründung für FSM Relevanz)", + "Spalte AA (Schätzung Anzahl Mitarbeiter)", + "Spalte AB (Konsistenzprüfung Mitarbeiterzahl)", + "Spalte AC (Begründung für Abweichung Mitarbeiterzahl)", + "Spalte AD (Einschätzung Anzahl Servicetechniker)", + "Spalte AE (Begründung bei Abweichung Anzahl Servicetechniker)", + "Spalte AF (Schätzung Umsatz ChatGPT)", + "Spalte AG (Begründung für Abweichung Umsatz)", + "Spalte AH (Timestamp letzte Prüfung)", + "Spalte AI (Version)" ] - header_range = "A11200:Z11200" + header_range = "A11200:AI11200" # 35 Spalten: A bis AI sheet.update(values=[new_headers], range_name=header_range) print("Alignment-Demo abgeschlossen: Neue Spaltenüberschriften in Zeile 11200 geschrieben.") @@ -236,7 +245,7 @@ class WikipediaScraper: debug_print(f"Fehler beim Extrahieren des ersten Absatzes: {e}") return "k.A." def extract_categories(self, soup): - """Extrahiert Wikipedia-Kategorien als kommagetrennte Liste.""" + """Extrahiert Wikipedia-Kategorien als kommagetrennten String.""" cat_div = soup.find('div', id="mw-normal-catlinks") if cat_div: ul = cat_div.find('ul') @@ -359,29 +368,40 @@ class DataProcessor: self._process_single_row(i, row) def _process_single_row(self, row_num, row_data): # Im neuen Schema: Firmenname in Spalte B (Index 1), Website in Spalte C (Index 2). - # Wikipedia-Daten werden in Spalten J bis O geschrieben: - # J: Wikipedia URL, K: Wikipedia Absatz, L: Wikipedia Branche, M: Wikipedia Umsatz, N: Wikipedia Mitarbeiter, O: Wikipedia Kategorien. - # Timestamp (jetzt) in Spalte Y und Version in Spalte Z. + # Wikipedia-Daten werden in Spalten K bis Q geschrieben: + # K: Vorschlag Wiki URL, L: Wikipedia URL, M: Wikipedia Absatz, N: Wikipedia Branche, + # O: Wikipedia Umsatz, P: Wikipedia Mitarbeiter, Q: Wikipedia Kategorien. + # Timestamp (jetzt) in Spalte AH, Version in Spalte AI. company_name = row_data[1] if len(row_data) > 1 else "" website = row_data[2] if len(row_data) > 2 else "" - update_range = f"J{row_num}:O{row_num}" - dt_range = f"Y{row_num}" - ver_range = f"Z{row_num}" + update_range = f"K{row_num}:Q{row_num}" + dt_range = f"AH{row_num}" + ver_range = f"AI{row_num}" print(f"\n[{datetime.now().strftime('%H:%M:%S')}] Verarbeite Zeile {row_num}: {company_name}") article = self.wiki_scraper.search_company_article(company_name, website) 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.', - 'umsatz': 'k.A.', 'mitarbeiter': 'k.A.', 'categories': 'k.A.', 'full_infobox': 'k.A.'} - self.sheet_handler.sheet.update(values=[[ + company_data = { + 'url': 'k.A.', + 'first_paragraph': 'k.A.', + 'branche': 'k.A.', + 'umsatz': 'k.A.', + 'mitarbeiter': 'k.A.', + 'categories': 'k.A.', + 'full_infobox': 'k.A.' + } + # Für Vorschlag Wiki URL setzen wir zunächst "k.A." als Platzhalter. + values = [ + "k.A.", # Vorschlag Wiki URL 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.'), company_data.get('categories', 'k.A.') - ]], range_name=update_range) + ] + self.sheet_handler.sheet.update(values=[values], range_name=update_range) current_dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.sheet_handler.sheet.update(values=[[current_dt]], range_name=dt_range) self.sheet_handler.sheet.update(values=[[Config.VERSION]], range_name=ver_range)