v1.2.1: Updated column mapping; Timestamp now in Spalte Y, Version in Spalte Z
Neues Spaltenschema: Das Schema wurde gemäß deiner Vorgaben aktualisiert: 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: 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 (verschoben von U) Spalte Z: Version Alignment-Demo-Modus (Option 3): Der Alignment-Demo-Modus (Modus 3) schreibt die neuen Spaltenüberschriften in den Range A11200:Z11200, sodass du die korrekte Anordnung vor der inhaltlichen Befüllung überprüfen kannst. Update-Ranges angepasst: Sowohl im normalen als auch im Re‑Evaluierungsmodus werden die extrahierten Wikipedia-Felder nun in Spalte J bis N geschrieben, der Timestamp in Spalte Y und die Versionsnummer in Spalte Z. Diese Version (v1.2.1) spiegelt nun die von dir gewünschte Spaltenanordnung wider. Bitte teste diese Version und gib mir Feedback zur weiteren Optimierung.
This commit is contained in:
@@ -13,7 +13,7 @@ import csv
|
||||
|
||||
# ==================== KONFIGURATION ====================
|
||||
class Config:
|
||||
VERSION = "v1.2.0" # v1.2.0: Neue Spaltenzuordnung gemäß dem neuen Schema
|
||||
VERSION = "v1.2.1" # v1.2.1: Neue Spaltenzuordnung; Timestamp in Spalte Y, Version in Spalte Z
|
||||
LANG = "de"
|
||||
CREDENTIALS_FILE = "service_account.json"
|
||||
SHEET_URL = "https://docs.google.com/spreadsheets/d/1u_gHr9JUfmV1-iviRzbSe3575QEp7KLhK5jFV_gJcgo"
|
||||
@@ -76,7 +76,7 @@ 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, wird durch 1e6 geteilt.
|
||||
enthält der Text keine Einheit, so wird durch 1e6 geteilt.
|
||||
- Für Mitarbeiter: Gibt den ganzzahligen Wert zurück.
|
||||
- Bei Fehlern wird der Original-Rohtext im Debug-Log ausgegeben.
|
||||
"""
|
||||
@@ -155,21 +155,18 @@ def alignment_demo(sheet):
|
||||
"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 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)"
|
||||
]
|
||||
# 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)
|
||||
|
||||
# ==================== WIKIPEDIA SCRAPER ====================
|
||||
class WikipediaScraper:
|
||||
def __init__(self):
|
||||
wikipedia.set_lang(Config.LANG)
|
||||
@@ -327,20 +324,7 @@ class WikipediaScraper:
|
||||
continue
|
||||
return None
|
||||
|
||||
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()
|
||||
@@ -363,18 +347,15 @@ class DataProcessor:
|
||||
if i >= self.sheet_handler.get_start_index():
|
||||
self._process_single_row(i, row)
|
||||
def _process_single_row(self, row_num, row_data):
|
||||
if MODE == "2":
|
||||
company_name = row_data[1] if len(row_data) > 1 else ""
|
||||
website = row_data[2] if len(row_data) > 2 else ""
|
||||
update_range = f"H{row_num}:L{row_num}"
|
||||
dt_range = f"O{row_num}"
|
||||
ver_range = f"R{row_num}"
|
||||
else:
|
||||
company_name = row_data[0] if len(row_data) > 0 else ""
|
||||
website = row_data[1] if len(row_data) > 1 else ""
|
||||
update_range = f"G{row_num}:K{row_num}"
|
||||
dt_range = f"N{row_num}"
|
||||
ver_range = f"Q{row_num}"
|
||||
# In beiden Modi (normal und Re-Evaluierung) verwenden wir nun das neue Schema:
|
||||
# Firmenname: Spalte B (Index 1), Website: Spalte C (Index 2)
|
||||
# Extrahierte Wikipedia-Daten werden in Spalten J bis N geschrieben.
|
||||
# Timestamp (jetzt) in Spalte Y, Version in Spalte Z.
|
||||
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}:N{row_num}" # Wikipedia URL, Absatz, Branche, Umsatz, Mitarbeiter
|
||||
dt_range = f"Y{row_num}" # Timestamp letzte Prüfung
|
||||
ver_range = f"Z{row_num}" # Version
|
||||
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:
|
||||
@@ -399,6 +380,7 @@ 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":
|
||||
|
||||
Reference in New Issue
Block a user