bugfix
This commit is contained in:
@@ -574,11 +574,13 @@ def normalize_company_name(name):
|
|||||||
return normalized.lower()
|
return normalized.lower()
|
||||||
|
|
||||||
# NEUE Funktion für Wiki-Updates basierend auf ChatGPT Vorschlägen
|
# NEUE Funktion für Wiki-Updates basierend auf ChatGPT Vorschlägen
|
||||||
|
# NEUE Funktion für Wiki-Updates basierend auf ChatGPT Vorschlägen (mit Status-Update in S)
|
||||||
def process_wiki_updates_from_chatgpt(sheet_handler, data_processor):
|
def process_wiki_updates_from_chatgpt(sheet_handler, data_processor):
|
||||||
"""
|
"""
|
||||||
Identifiziert Zeilen, bei denen ChatGPT einen alternativen Wiki-Artikel vorgeschlagen hat (S='X', T=URL),
|
Identifiziert Zeilen, bei denen ChatGPT einen alternativen Wiki-Artikel vorgeschlagen hat (S='X', T=URL),
|
||||||
kopiert die neue URL nach M, führt ein Reparse der Wiki-Daten (N-R) durch,
|
kopiert die neue URL nach M, führt ein Reparse der Wiki-Daten (N-R) durch,
|
||||||
berechnet die Branche neu (W-Y) und löscht relevante Timestamps (AN, AX, AO, AP).
|
berechnet die Branche neu (W-Y), löscht relevante Timestamps (AN, AX, AO, AP)
|
||||||
|
und markiert die Zeile in Spalte S als "X (Updated)".
|
||||||
"""
|
"""
|
||||||
debug_print("Starte Modus: Wiki-Updates basierend auf ChatGPT-Vorschlägen...")
|
debug_print("Starte Modus: Wiki-Updates basierend auf ChatGPT-Vorschlägen...")
|
||||||
|
|
||||||
@@ -586,138 +588,132 @@ def process_wiki_updates_from_chatgpt(sheet_handler, data_processor):
|
|||||||
all_data = sheet_handler.get_all_data_with_headers()
|
all_data = sheet_handler.get_all_data_with_headers()
|
||||||
if not all_data or len(all_data) <= 5: return
|
if not all_data or len(all_data) <= 5: return
|
||||||
header_rows = 5
|
header_rows = 5
|
||||||
data_rows = all_data[header_rows:] # Arbeite mit Daten ohne Header
|
data_rows = all_data[header_rows:]
|
||||||
|
|
||||||
# Indizes holen (Beispielhaft, passe Schlüssel an deine COLUMN_MAP an)
|
# --- Indizes holen ---
|
||||||
wiki_konsistenz_idx = COLUMN_MAP.get("Chat Wiki Konsistenzprüfung") # S
|
# Stelle sicher, dass ALLE benötigten Schlüssel in COLUMN_MAP existieren
|
||||||
vorschlag_t_idx = COLUMN_MAP.get("Chat Vorschlag Wiki Artikel") # T
|
required_keys = [
|
||||||
wiki_url_m_idx = COLUMN_MAP.get("Wiki URL") # M
|
"Chat Wiki Konsistenzprüfung", "Chat Vorschlag Wiki Artikel", "Wiki URL",
|
||||||
# Indizes für Wiki-Daten N-R
|
"Wiki Absatz", "Wiki Branche", "Wiki Umsatz", "Wiki Mitarbeiter", "Wiki Kategorien",
|
||||||
absatz_n_idx = COLUMN_MAP.get("Wiki Absatz")
|
"Chat Vorschlag Branche", "Chat Konsistenz Branche", "Chat Begründung Abweichung Branche",
|
||||||
branche_o_idx = COLUMN_MAP.get("Wiki Branche")
|
"Wikipedia Timestamp", "Wiki Verif. Timestamp", "Timestamp letzte Prüfung", "Version",
|
||||||
umsatz_p_idx = COLUMN_MAP.get("Wiki Umsatz")
|
"Website Zusammenfassung", "CRM Branche", "CRM Beschreibung"
|
||||||
ma_q_idx = COLUMN_MAP.get("Wiki Mitarbeiter")
|
|
||||||
kat_r_idx = COLUMN_MAP.get("Wiki Kategorien")
|
|
||||||
# Indizes für Branch W-Y
|
|
||||||
branch_w_idx = COLUMN_MAP.get("Chat Vorschlag Branche")
|
|
||||||
branch_x_idx = COLUMN_MAP.get("Chat Konsistenz Branche")
|
|
||||||
branch_y_idx = COLUMN_MAP.get("Chat Begründung Abweichung Branche")
|
|
||||||
# Indizes für Timestamps und Version
|
|
||||||
ts_an_idx = COLUMN_MAP.get("Wikipedia Timestamp")
|
|
||||||
ts_ax_idx = COLUMN_MAP.get("Wiki Verif. Timestamp")
|
|
||||||
ts_ao_idx = COLUMN_MAP.get("Timestamp letzte Prüfung")
|
|
||||||
version_ap_idx = COLUMN_MAP.get("Version")
|
|
||||||
# Index für Website Summary AS (wird für Branch-Neuberechnung gebraucht)
|
|
||||||
summary_as_idx = COLUMN_MAP.get("Website Zusammenfassung")
|
|
||||||
# Index für CRM Branche/Beschreibung (für Branch-Neuberechnung)
|
|
||||||
crm_branch_idx = COLUMN_MAP.get("CRM Branche")
|
|
||||||
crm_desc_idx = COLUMN_MAP.get("CRM Beschreibung")
|
|
||||||
|
|
||||||
|
|
||||||
# Prüfe, ob alle Indizes gefunden wurden
|
|
||||||
required_indices = [
|
|
||||||
wiki_konsistenz_idx, vorschlag_t_idx, wiki_url_m_idx, absatz_n_idx, branche_o_idx,
|
|
||||||
umsatz_p_idx, ma_q_idx, kat_r_idx, branch_w_idx, branch_x_idx, branch_y_idx,
|
|
||||||
ts_an_idx, ts_ax_idx, ts_ao_idx, version_ap_idx, summary_as_idx,
|
|
||||||
crm_branch_idx, crm_desc_idx
|
|
||||||
]
|
]
|
||||||
if None in required_indices:
|
col_indices = {}
|
||||||
missing = [k for k, v in COLUMN_MAP.items() if v in required_indices and v is None] # Finde fehlende Keys
|
all_keys_found = True
|
||||||
debug_print(f"FEHLER: Mindestens ein benötigter Spaltenindex für Wiki-Updates fehlt in COLUMN_MAP. Fehlende Keys (Beispiel): {missing}")
|
for key in required_keys:
|
||||||
|
idx = COLUMN_MAP.get(key)
|
||||||
|
if idx is None:
|
||||||
|
debug_print(f"FEHLER: Schlüssel '{key}' fehlt in COLUMN_MAP!")
|
||||||
|
all_keys_found = False
|
||||||
|
col_indices[key] = idx
|
||||||
|
|
||||||
|
if not all_keys_found:
|
||||||
|
debug_print("Breche Wiki-Updates ab, da Spaltenindizes fehlen.")
|
||||||
return
|
return
|
||||||
|
|
||||||
all_sheet_updates = []
|
all_sheet_updates = []
|
||||||
processed_rows = 0
|
processed_rows = 0
|
||||||
wiki_scraper = data_processor.wiki_scraper # Nutze den Scraper aus dem DataProcessor
|
wiki_scraper = data_processor.wiki_scraper
|
||||||
|
|
||||||
# Gehe durch alle *Daten*-Zeilen
|
# Gehe durch alle *Daten*-Zeilen
|
||||||
for idx, row in enumerate(data_rows):
|
for idx, row in enumerate(data_rows):
|
||||||
row_num_in_sheet = idx + header_rows + 1 # 1-basierte Zeilennummer
|
row_num_in_sheet = idx + header_rows + 1
|
||||||
|
|
||||||
# Lese Werte sicher aus
|
# Lese Werte sicher aus
|
||||||
konsistenz_s = row[wiki_konsistenz_idx] if len(row) > wiki_konsistenz_idx else ""
|
konsistenz_s = row[col_indices["Chat Wiki Konsistenzprüfung"]] if len(row) > col_indices["Chat Wiki Konsistenzprüfung"] else ""
|
||||||
vorschlag_t = row[vorschlag_t_idx] if len(row) > vorschlag_t_idx else ""
|
vorschlag_t = row[col_indices["Chat Vorschlag Wiki Artikel"]] if len(row) > col_indices["Chat Vorschlag Wiki Artikel"] else ""
|
||||||
url_m = row[wiki_url_m_idx] if len(row) > wiki_url_m_idx else ""
|
url_m = row[col_indices["Wiki URL"]] if len(row) > col_indices["Wiki URL"] else ""
|
||||||
|
|
||||||
# Bedingung prüfen: S='X' und T ist eine URL und T != M
|
# Bedingung prüfen: S='X' und T ist eine URL und T != M
|
||||||
is_update_candidate = False
|
is_update_candidate = False
|
||||||
new_url = ""
|
new_url = ""
|
||||||
if konsistenz_s.strip().upper() == "X":
|
if konsistenz_s.strip().upper() == "X":
|
||||||
# Prüfe, ob T eine valide URL ist (einfache Prüfung)
|
vorschlag_t_cleaned = vorschlag_t.strip()
|
||||||
if vorschlag_t.strip().lower().startswith(("http://", "https://")):
|
if vorschlag_t_cleaned.lower().startswith(("http://", "https://")):
|
||||||
new_url = vorschlag_t.strip()
|
new_url = vorschlag_t_cleaned
|
||||||
# Prüfe, ob die neue URL anders ist als die alte
|
|
||||||
if new_url != url_m.strip():
|
if new_url != url_m.strip():
|
||||||
is_update_candidate = True
|
is_update_candidate = True
|
||||||
|
# Optional: Prüfen ob T vielleicht "Kein passender Artikel" etc. enthält und nicht updaten?
|
||||||
|
# elif "kein" in vorschlag_t_cleaned.lower() and "artikel" in vorschlag_t_cleaned.lower():
|
||||||
|
# pass # Explizit nicht als Kandidat werten
|
||||||
|
|
||||||
if is_update_candidate:
|
if is_update_candidate:
|
||||||
debug_print(f"Zeile {row_num_in_sheet}: Update-Kandidat gefunden. Neue URL: {new_url}")
|
debug_print(f"Zeile {row_num_in_sheet}: Update-Kandidat gefunden. Neue URL: {new_url}")
|
||||||
processed_rows += 1
|
|
||||||
|
|
||||||
# --- Schritt 3a: Wiki Reparse ---
|
try: # Füge Try-Block um die Verarbeitung einer Zeile hinzu
|
||||||
debug_print(f" -> Reparsing Wiki-Daten für {new_url}...")
|
processed_rows += 1
|
||||||
new_wiki_data = wiki_scraper.extract_company_data(new_url)
|
|
||||||
|
|
||||||
# --- Schritt 3b: Branch Neuberechnung ---
|
# --- Schritt 3a: Wiki Reparse ---
|
||||||
# Hole benötigte Daten für Branch-Eval
|
debug_print(f" -> Reparsing Wiki-Daten für {new_url}...")
|
||||||
crm_branche = row[crm_branch_idx] if len(row) > crm_branch_idx else ""
|
new_wiki_data = wiki_scraper.extract_company_data(new_url)
|
||||||
crm_beschreibung = row[crm_desc_idx] if len(row) > crm_desc_idx else ""
|
# Kleine Pause nach Wiki-Scrape
|
||||||
website_summary = row[summary_as_idx] if len(row) > summary_as_idx else ""
|
time.sleep(0.5)
|
||||||
debug_print(f" -> Neuberechnung der Branche...")
|
|
||||||
new_branch_result = evaluate_branche_chatgpt(
|
|
||||||
crm_branche,
|
|
||||||
crm_beschreibung,
|
|
||||||
new_wiki_data.get('branche', 'k.A.'), # Neue Wiki-Branche
|
|
||||||
new_wiki_data.get('categories', 'k.A.'), # Neue Wiki-Kategorien
|
|
||||||
website_summary # Vorhandene Website-Zusammenfassung
|
|
||||||
)
|
|
||||||
|
|
||||||
# --- Schritt 4: Updates sammeln ---
|
# --- Schritt 3b: Branch Neuberechnung ---
|
||||||
# Spaltenbuchstaben ermitteln
|
crm_branche = row[col_indices["CRM Branche"]] if len(row) > col_indices["CRM Branche"] else ""
|
||||||
url_m_letter = sheet_handler._get_col_letter(wiki_url_m_idx + 1)
|
crm_beschreibung = row[col_indices["CRM Beschreibung"]] if len(row) > col_indices["CRM Beschreibung"] else ""
|
||||||
absatz_n_letter = sheet_handler._get_col_letter(absatz_n_idx + 1)
|
website_summary = row[col_indices["Website Zusammenfassung"]] if len(row) > col_indices["Website Zusammenfassung"] else ""
|
||||||
branche_o_letter = sheet_handler._get_col_letter(branche_o_idx + 1)
|
debug_print(f" -> Neuberechnung der Branche...")
|
||||||
umsatz_p_letter = sheet_handler._get_col_letter(umsatz_p_idx + 1)
|
new_branch_result = evaluate_branche_chatgpt(
|
||||||
ma_q_letter = sheet_handler._get_col_letter(ma_q_idx + 1)
|
crm_branche, crm_beschreibung,
|
||||||
kat_r_letter = sheet_handler._get_col_letter(kat_r_idx + 1)
|
new_wiki_data.get('branche', 'k.A.'),
|
||||||
branch_w_letter = sheet_handler._get_col_letter(branch_w_idx + 1)
|
new_wiki_data.get('categories', 'k.A.'),
|
||||||
branch_x_letter = sheet_handler._get_col_letter(branch_x_idx + 1)
|
website_summary
|
||||||
branch_y_letter = sheet_handler._get_col_letter(branch_y_idx + 1)
|
)
|
||||||
ts_an_letter = sheet_handler._get_col_letter(ts_an_idx + 1)
|
|
||||||
ts_ax_letter = sheet_handler._get_col_letter(ts_ax_idx + 1)
|
|
||||||
ts_ao_letter = sheet_handler._get_col_letter(ts_ao_idx + 1)
|
|
||||||
version_ap_letter = sheet_handler._get_col_letter(version_ap_idx + 1)
|
|
||||||
# Optional: Spalte T leeren/markieren
|
|
||||||
vorschlag_t_letter = sheet_handler._get_col_letter(vorschlag_t_idx + 1)
|
|
||||||
|
|
||||||
|
# --- Schritt 4: Updates sammeln ---
|
||||||
|
# Spaltenbuchstaben ermitteln
|
||||||
|
url_m_letter = sheet_handler._get_col_letter(col_indices["Wiki URL"] + 1)
|
||||||
|
absatz_n_letter = sheet_handler._get_col_letter(col_indices["Wiki Absatz"] + 1)
|
||||||
|
branche_o_letter = sheet_handler._get_col_letter(col_indices["Wiki Branche"] + 1)
|
||||||
|
umsatz_p_letter = sheet_handler._get_col_letter(col_indices["Wiki Umsatz"] + 1)
|
||||||
|
ma_q_letter = sheet_handler._get_col_letter(col_indices["Wiki Mitarbeiter"] + 1)
|
||||||
|
kat_r_letter = sheet_handler._get_col_letter(col_indices["Wiki Kategorien"] + 1)
|
||||||
|
branch_w_letter = sheet_handler._get_col_letter(col_indices["Chat Vorschlag Branche"] + 1)
|
||||||
|
branch_x_letter = sheet_handler._get_col_letter(col_indices["Chat Konsistenz Branche"] + 1)
|
||||||
|
branch_y_letter = sheet_handler._get_col_letter(col_indices["Chat Begründung Abweichung Branche"] + 1)
|
||||||
|
ts_an_letter = sheet_handler._get_col_letter(col_indices["Wikipedia Timestamp"] + 1)
|
||||||
|
ts_ax_letter = sheet_handler._get_col_letter(col_indices["Wiki Verif. Timestamp"] + 1)
|
||||||
|
ts_ao_letter = sheet_handler._get_col_letter(col_indices["Timestamp letzte Prüfung"] + 1)
|
||||||
|
version_ap_letter = sheet_handler._get_col_letter(col_indices["Version"] + 1)
|
||||||
|
vorschlag_t_letter = sheet_handler._get_col_letter(col_indices["Chat Vorschlag Wiki Artikel"] + 1)
|
||||||
|
konsistenz_s_letter = sheet_handler._get_col_letter(col_indices["Chat Wiki Konsistenzprüfung"] + 1) # NEU
|
||||||
|
|
||||||
row_updates = [
|
row_updates = [
|
||||||
# Wiki-Daten aktualisieren
|
{'range': f'{url_m_letter}{row_num_in_sheet}', 'values': [[new_url]]},
|
||||||
{'range': f'{url_m_letter}{row_num_in_sheet}', 'values': [[new_url]]}, # Neue URL nach M
|
{'range': f'{absatz_n_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('first_paragraph', 'k.A.')]]},
|
||||||
{'range': f'{absatz_n_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('first_paragraph', 'k.A.')]]},
|
{'range': f'{branche_o_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('branche', 'k.A.')]]},
|
||||||
{'range': f'{branche_o_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('branche', 'k.A.')]]},
|
{'range': f'{umsatz_p_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('umsatz', 'k.A.')]]},
|
||||||
{'range': f'{umsatz_p_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('umsatz', 'k.A.')]]},
|
{'range': f'{ma_q_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('mitarbeiter', 'k.A.')]]},
|
||||||
{'range': f'{ma_q_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('mitarbeiter', 'k.A.')]]},
|
{'range': f'{kat_r_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('categories', 'k.A.')]]},
|
||||||
{'range': f'{kat_r_letter}{row_num_in_sheet}', 'values': [[new_wiki_data.get('categories', 'k.A.')]]},
|
{'range': f'{branch_w_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("branch", "Fehler")]]},
|
||||||
# Branch-Daten aktualisieren
|
{'range': f'{branch_x_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("consistency", "Fehler")]]},
|
||||||
{'range': f'{branch_w_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("branch", "Fehler")]]},
|
{'range': f'{branch_y_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("justification", "Fehler")]]},
|
||||||
{'range': f'{branch_x_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("consistency", "Fehler")]]},
|
{'range': f'{ts_an_letter}{row_num_in_sheet}', 'values': [[""]]},
|
||||||
{'range': f'{branch_y_letter}{row_num_in_sheet}', 'values': [[new_branch_result.get("justification", "Fehler")]]},
|
{'range': f'{ts_ax_letter}{row_num_in_sheet}', 'values': [[""]]},
|
||||||
# Timestamps und Version leeren, um erneute Prüfung zu triggern
|
{'range': f'{ts_ao_letter}{row_num_in_sheet}', 'values': [[""]]},
|
||||||
{'range': f'{ts_an_letter}{row_num_in_sheet}', 'values': [[""]]}, # Wiki Extraktion TS
|
{'range': f'{version_ap_letter}{row_num_in_sheet}', 'values': [[""]]},
|
||||||
{'range': f'{ts_ax_letter}{row_num_in_sheet}', 'values': [[""]]}, # Wiki Verif. TS
|
{'range': f'{vorschlag_t_letter}{row_num_in_sheet}', 'values': [["Korrektur übernommen"]]},
|
||||||
{'range': f'{ts_ao_letter}{row_num_in_sheet}', 'values': [[""]]}, # Letzte Prüfung TS
|
# --- NEU: Spalte S aktualisieren ---
|
||||||
{'range': f'{version_ap_letter}{row_num_in_sheet}', 'values': [[""]]}, # Version
|
{'range': f'{konsistenz_s_letter}{row_num_in_sheet}', 'values': [["X (Updated)"]]},
|
||||||
# Optional: Spalte T leeren oder markieren
|
]
|
||||||
{'range': f'{vorschlag_t_letter}{row_num_in_sheet}', 'values': [["Korrektur übernommen"]]},
|
all_sheet_updates.extend(row_updates)
|
||||||
]
|
debug_print(f" -> Updates für Zeile {row_num_in_sheet} vorbereitet.")
|
||||||
all_sheet_updates.extend(row_updates)
|
|
||||||
|
# Kurze Pause nach jeder Zeile, um APIs nicht zu überlasten
|
||||||
|
time.sleep(Config.RETRY_DELAY) # Behalte Pause bei, da ChatGPT hier läuft
|
||||||
|
|
||||||
|
except Exception as e_row:
|
||||||
|
# Fehler bei der Verarbeitung einer einzelnen Zeile loggen, aber weitermachen
|
||||||
|
debug_print(f"FEHLER bei Verarbeitung von Update-Kandidat Zeile {row_num_in_sheet}: {e_row}")
|
||||||
|
import traceback
|
||||||
|
debug_print(traceback.format_exc())
|
||||||
|
|
||||||
# Kurze Pause nach jeder Zeile, um APIs nicht zu überlasten
|
|
||||||
time.sleep(Config.RETRY_DELAY) # Pause nach Wiki Reparse + Branch Neuberechnung
|
|
||||||
|
|
||||||
# --- Schritt 5: Batch Update ---
|
# --- Schritt 5: Batch Update ---
|
||||||
if all_sheet_updates:
|
if all_sheet_updates:
|
||||||
|
# Sende alle Updates auf einmal am Ende
|
||||||
debug_print(f"Sende Batch-Update für {processed_rows} korrigierte Wiki-Einträge ({len(all_sheet_updates)} Zellen)...")
|
debug_print(f"Sende Batch-Update für {processed_rows} korrigierte Wiki-Einträge ({len(all_sheet_updates)} Zellen)...")
|
||||||
success = sheet_handler.batch_update_cells(all_sheet_updates)
|
success = sheet_handler.batch_update_cells(all_sheet_updates)
|
||||||
if success:
|
if success:
|
||||||
|
|||||||
Reference in New Issue
Block a user