bugfix
This commit is contained in:
@@ -534,27 +534,46 @@ class DataProcessor:
|
|||||||
def process_verification_only():
|
def process_verification_only():
|
||||||
"""
|
"""
|
||||||
Überarbeiteter Batch‑Prozess (Modus 51):
|
Überarbeiteter Batch‑Prozess (Modus 51):
|
||||||
- Alle zu verifizierenden Zeilen werden in Paketen der Größe Config.BATCH_SIZE (z. B. 10 Zeilen) gebündelt.
|
- Fragt zunächst in der Konsole ab, wie viele Zeilen insgesamt verarbeitet werden sollen.
|
||||||
- Für jedes Batch wird ein aggregierter Prompt erstellt und an ChatGPT gesendet.
|
- Teilt die zu verarbeitenden Zeilen in Pakete der Größe Config.BATCH_SIZE (z. B. 10 Zeilen).
|
||||||
- Die aggregierte Antwort wird zeilenweise geparst und auf die jeweiligen Zeilen (Google Sheet) aktualisiert.
|
- Für jedes Batch wird ein aggregierter Prompt erstellt, an ChatGPT gesendet und die Antwort
|
||||||
- Umfassende Log‑Ausgaben informieren über den aktuellen Batch, Zeilennummern und Token-Zahlen.
|
zeilenweise geparst.
|
||||||
|
- Die Ergebnisse werden in den Spalten S bis Y geschrieben:
|
||||||
|
S: Wiki-Validierung (z. B. "OK" oder "X")
|
||||||
|
T: Alternativer Wiki-Artikel (URL oder "Kein Wikipedia-Eintrag vorhanden.")
|
||||||
|
U: Wiki-Erklärung / Begründung
|
||||||
|
V, W, X, Y: Platzhalter (aktuell leer)
|
||||||
|
- Umfassendes Logging informiert über Batch, Zeilennummern, Token-Zahl etc.
|
||||||
"""
|
"""
|
||||||
debug_print("Starte Verifizierungsmodus (Modus 51) im Batch-Prozess...")
|
debug_print("Starte Verifizierungsmodus (Modus 51) im Batch-Prozess...")
|
||||||
# Ermittelt alle Zeilen, die noch keine ChatGPT-Auswertung (in Spalte AO) haben
|
# Abfrage: Wie viele Zeilen sollen insgesamt verarbeitet werden?
|
||||||
|
try:
|
||||||
|
total_rows = int(input("Wie viele Zeilen sollen insgesamt bearbeitet werden? "))
|
||||||
|
except Exception as e:
|
||||||
|
debug_print(f"Fehler bei der Eingabe der Zeilenanzahl: {e}. Es werden alle verfügbaren Zeilen verarbeitet.")
|
||||||
|
total_rows = None
|
||||||
|
|
||||||
gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name(
|
gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name(
|
||||||
Config.CREDENTIALS_FILE, ["https://www.googleapis.com/auth/spreadsheets"]))
|
Config.CREDENTIALS_FILE, ["https://www.googleapis.com/auth/spreadsheets"]))
|
||||||
sh = gc.open_by_url(Config.SHEET_URL)
|
sh = gc.open_by_url(Config.SHEET_URL)
|
||||||
main_sheet = sh.sheet1
|
main_sheet = sh.sheet1
|
||||||
data = main_sheet.get_all_values()
|
data = main_sheet.get_all_values()
|
||||||
|
|
||||||
|
# Begrenze die Verarbeitung, falls total_rows gesetzt ist
|
||||||
|
available_rows = len(data) - 1 # ohne Header
|
||||||
|
if total_rows is not None and total_rows < available_rows:
|
||||||
|
available_rows = total_rows
|
||||||
|
|
||||||
batch_size = Config.BATCH_SIZE # z. B. 10, anpassbar in der Config
|
batch_size = Config.BATCH_SIZE # z. B. 10, anpassbar in der Config
|
||||||
batches = []
|
batches = []
|
||||||
row_numbers = []
|
row_numbers = []
|
||||||
for i, row in enumerate(data[1:], start=2):
|
for i, row in enumerate(data[1:], start=2):
|
||||||
|
if i > available_rows + 1: # plus Header-Zeile
|
||||||
|
break
|
||||||
# Überspringe Zeilen, in denen in Spalte AO (Index 40) bereits ein Wert steht
|
# Überspringe Zeilen, in denen in Spalte AO (Index 40) bereits ein Wert steht
|
||||||
if len(row) > 40 and row[40].strip() != "":
|
if len(row) > 40 and row[40].strip() != "":
|
||||||
continue
|
continue
|
||||||
# Wir erwarten relevante Daten in mindestens 25 Spalten (anpassbar, je nachdem)
|
# Hier wird angenommen, dass relevante Daten in mindestens 25 Spalten vorhanden sind.
|
||||||
if len(row) <= 25 or row[24].strip() == "":
|
if len(row) <= 25 or row[24].strip() == "":
|
||||||
entry_text = (
|
entry_text = (
|
||||||
f"Eintrag {i}:\n"
|
f"Eintrag {i}:\n"
|
||||||
@@ -567,7 +586,6 @@ def process_verification_only():
|
|||||||
)
|
)
|
||||||
batches.append(entry_text)
|
batches.append(entry_text)
|
||||||
row_numbers.append(i)
|
row_numbers.append(i)
|
||||||
# Wenn wir die Batchgröße erreicht haben, verarbeite diesen Batch
|
|
||||||
if len(batches) == batch_size:
|
if len(batches) == batch_size:
|
||||||
aggregated_prompt = (
|
aggregated_prompt = (
|
||||||
"Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. "
|
"Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. "
|
||||||
@@ -581,7 +599,6 @@ def process_verification_only():
|
|||||||
)
|
)
|
||||||
aggregated_prompt += "\n".join(batches)
|
aggregated_prompt += "\n".join(batches)
|
||||||
debug_print(f"Verarbeite Batch für Zeilen {row_numbers[0]} bis {row_numbers[-1]}.")
|
debug_print(f"Verarbeite Batch für Zeilen {row_numbers[0]} bis {row_numbers[-1]}.")
|
||||||
# Optional: Logge Token-Zahl des Prompts
|
|
||||||
agg_token_count = "n.v."
|
agg_token_count = "n.v."
|
||||||
if tiktoken:
|
if tiktoken:
|
||||||
try:
|
try:
|
||||||
@@ -606,11 +623,12 @@ def process_verification_only():
|
|||||||
result = response.choices[0].message.content.strip()
|
result = response.choices[0].message.content.strip()
|
||||||
debug_print(f"Aggregierte Antwort für Batch {row_numbers[0]}-{row_numbers[-1]}: {result}")
|
debug_print(f"Aggregierte Antwort für Batch {row_numbers[0]}-{row_numbers[-1]}: {result}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler bei der ChatGPT Anfrage für Batch {row_numbers[0]}-{row_numbers[-1]}: {e}")
|
debug_print(f"Fehler bei der ChatGPT-Anfrage für Batch {row_numbers[0]}-{row_numbers[-1]}: {e}")
|
||||||
# Leere Antwort, sodass wir die Batch-Ergebnisse nicht aktualisieren
|
|
||||||
result = ""
|
result = ""
|
||||||
answers = result.split("\n")
|
answers = result.split("\n")
|
||||||
# Update pro Zeile des aktuellen Batches anhand der aggregierten Antwort
|
# Nun werden für jede Zeile des Batches die folgenden Spalten aktualisiert:
|
||||||
|
# S: Wiki-Validierung, T: Alternativer Wiki-Artikel, U: Wiki-Erklärung,
|
||||||
|
# V, W, X, Y: Platzhalter (leer)
|
||||||
for current_row in row_numbers:
|
for current_row in row_numbers:
|
||||||
answer = "k.A."
|
answer = "k.A."
|
||||||
for line in answers:
|
for line in answers:
|
||||||
@@ -634,24 +652,23 @@ def process_verification_only():
|
|||||||
wiki_confirm = ""
|
wiki_confirm = ""
|
||||||
alt_article = answer
|
alt_article = answer
|
||||||
wiki_explanation = answer
|
wiki_explanation = answer
|
||||||
|
|
||||||
try:
|
try:
|
||||||
main_sheet.update(values=[[wiki_confirm]], range_name=f"S{current_row}")
|
main_sheet.update(values=[[wiki_confirm]], range_name=f"S{current_row}")
|
||||||
main_sheet.update(values=[[alt_article]], range_name=f"U{current_row}")
|
main_sheet.update(values=[[alt_article]], range_name=f"T{current_row}")
|
||||||
main_sheet.update(values=[[wiki_explanation]], range_name=f"V{current_row}")
|
main_sheet.update(values=[[wiki_explanation]], range_name=f"U{current_row}")
|
||||||
|
# Die Spalten V, W, X, Y werden als leere Strings gesetzt
|
||||||
|
main_sheet.update(values=[["", "", "", ""]], range_name=f"V{current_row}:Y{current_row}")
|
||||||
debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}")
|
debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}")
|
debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}")
|
||||||
time.sleep(Config.RETRY_DELAY)
|
time.sleep(Config.RETRY_DELAY)
|
||||||
# Nach Bearbeitung eines Batches zurücksetzen
|
|
||||||
batches = []
|
batches = []
|
||||||
row_numbers = []
|
row_numbers = []
|
||||||
# Falls nach Schleifendurchlauf noch ein unvollständiges Batch übrig ist
|
|
||||||
if batches:
|
if batches:
|
||||||
aggregated_prompt = (
|
aggregated_prompt = (
|
||||||
"Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. "
|
"Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. "
|
||||||
"Für jeden der folgenden Einträge prüfe, ob der vorhandene Wikipedia-Artikel plausibel passt. "
|
"Für jeden der folgenden Einträge prüfe, ob der vorhandene Wikipedia-Artikel plausibel passt. "
|
||||||
"Gib das Ergebnis im Format:\n"
|
"Gib das Ergebnis im Format aus:\n"
|
||||||
"Eintrag <Zeilennummer>: <Antwort>\n\n"
|
"Eintrag <Zeilennummer>: <Antwort>\n\n"
|
||||||
)
|
)
|
||||||
aggregated_prompt += "\n".join(batches)
|
aggregated_prompt += "\n".join(batches)
|
||||||
@@ -680,7 +697,7 @@ def process_verification_only():
|
|||||||
result = response.choices[0].message.content.strip()
|
result = response.choices[0].message.content.strip()
|
||||||
debug_print(f"Aggregierte Antwort für letztes Batch: {result}")
|
debug_print(f"Aggregierte Antwort für letztes Batch: {result}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler bei der ChatGPT Anfrage für letztes Batch: {e}")
|
debug_print(f"Fehler bei der ChatGPT-Anfrage für letztes Batch: {e}")
|
||||||
result = ""
|
result = ""
|
||||||
answers = result.split("\n")
|
answers = result.split("\n")
|
||||||
for current_row in row_numbers:
|
for current_row in row_numbers:
|
||||||
@@ -706,18 +723,17 @@ def process_verification_only():
|
|||||||
wiki_confirm = ""
|
wiki_confirm = ""
|
||||||
alt_article = answer
|
alt_article = answer
|
||||||
wiki_explanation = answer
|
wiki_explanation = answer
|
||||||
|
|
||||||
try:
|
try:
|
||||||
main_sheet.update(values=[[wiki_confirm]], range_name=f"S{current_row}")
|
main_sheet.update(values=[[wiki_confirm]], range_name=f"S{current_row}")
|
||||||
main_sheet.update(values=[[alt_article]], range_name=f"U{current_row}")
|
main_sheet.update(values=[[alt_article]], range_name=f"T{current_row}")
|
||||||
main_sheet.update(values=[[wiki_explanation]], range_name=f"V{current_row}")
|
main_sheet.update(values=[[wiki_explanation]], range_name=f"U{current_row}")
|
||||||
|
main_sheet.update(values=[["", "", "", ""]], range_name=f"V{current_row}:Y{current_row}")
|
||||||
debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}")
|
debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}")
|
debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}")
|
||||||
time.sleep(Config.RETRY_DELAY)
|
time.sleep(Config.RETRY_DELAY)
|
||||||
debug_print("Verifizierungs-Batch abgeschlossen.")
|
debug_print("Verifizierungs-Batch abgeschlossen.")
|
||||||
|
|
||||||
|
|
||||||
# ==================== List Metatitel, Description und Überschriften aus Websiten aus ====================
|
# ==================== List Metatitel, Description und Überschriften aus Websiten aus ====================
|
||||||
def scrape_website_details(url):
|
def scrape_website_details(url):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user