from pathlib import Path import re import json BASE = Path("/opt/3cx-middleware/3cx-telefonie-middleware") SRC = BASE / "data/transcripts" OUT = BASE / "data/transcript_screening.jsonl" AUTO = re.compile( r"(herzlich willkommen|willkommen bei|" r"sie sind verbunden mit|" r"ihr gewünschter gesprächspartner ist|" r"ist zurzeit nicht erreichbar|" r"ist im moment nicht erreichbar|" r"leider.*nicht.*erreichbar|" r"bitte hinterlassen sie.*nachricht|" r"hinterlassen sie.*nach.*signal|" r"nach dem signalton|" r"außerhalb.*geschäftszeiten|" r"Vielen Dank und auf Wiederhören)", re.I, ) BUSINESS = re.compile( r"(bestellung|bestellt|rechnung|zahlung|lieferung|lieferstatus|" r"versand|paket|dhl|gls|retoure|widerruf|storn|reklamation|" r"rose|rosen|clematis|pflanze|pflanzen|wurzel|container|" r"lieferzeit|preis|angebot|gutschein|dünger|schädling|" r"krank|rückruf|kunden|auftrag)", re.I, ) OUT.parent.mkdir(exist_ok=True) stats = { "RELEVANT": 0, "IRRELEVANT": 0, "UNCERTAIN": 0, } with OUT.open("w", encoding="utf-8") as out: for path in sorted(SRC.glob("*.txt")): text = path.read_text(encoding="utf-8", errors="replace").strip() words = text.split() if not text: relevance = "IRRELEVANT" reason = "leer" elif len(words) < 8: relevance = "IRRELEVANT" reason = "extrem kurz" else: auto_hits = len(AUTO.findall(text)) business_hits = len(BUSINESS.findall(text)) # reine automatische Ansage if auto_hits >= 1 and business_hits == 0 and len(words) < 80: relevance = "IRRELEVANT" reason = "automatische Ansage/Mailbox" # echter Geschäftskontext vorhanden elif business_hits >= 1: relevance = "RELEVANT" reason = f"Geschäftskontext ({business_hits} Treffer)" # längerer Text ohne klare Geschäftssignale elif len(words) >= 80: relevance = "UNCERTAIN" reason = "langer Text ohne eindeutigen Geschäftskontext" else: relevance = "UNCERTAIN" reason = "nicht eindeutig" stats[relevance] += 1 out.write(json.dumps({ "file": path.name, "relevance": relevance, "reason": reason, "words": len(words), }, ensure_ascii=False) + "\n") print("=== SCREENING ===") for k, v in stats.items(): print(f"{k:10} {v}") print(f"\nDatei: {OUT}")