v1.2.0: Updated column mapping per new schema with Alignment-Demo mode

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.
This commit is contained in:
2025-04-01 09:08:36 +00:00
parent 9a0b9beb38
commit 5bab7d78f6

View File

@@ -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)")