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:
@@ -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)")
|
||||
|
||||
Reference in New Issue
Block a user