Inhalt
Aktueller Ordner:
/./vkgGermanComment.lsp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Paul Koop M.A. - Sequenzanalyse empirisch gesicherter ;;
;; Verkaufsgespräche ;;
;; ;;
;; Dieses Programm simuliert Verkaufsgespräche durch die ;;
;; Modellierung einer kontextfreien Grammatik (CFG) in Lisp. ;;
;; Ziel ist die Analyse und Generierung dialogischer Sequenzen ;;
;; anhand einer rekursiv strukturierten, gewichteten Grammatik. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Grammatikstruktur für Verkaufsgespräche (VKG)
;; -------------------------------------------
;; Hauptknoten: VKG
;; Übergänge und Gewichtungen spiegeln die Wahrscheinlichkeiten
;; von Verkaufsgesprächsabläufen wider (z.B., Begrüßung → Bedarf).
;;
;; VKG -> Begrüßung (BG) -> Verkaufstaetigkeit (VT) -> Verabschiedung (AV)
;; Die möglichen Ablaufmuster werden anhand empirischer Daten
;; gewichtet und modelliert.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Symbol-Definitionen für die Bestandteile des Gesprächs ;;
;; ;;
;; Verkaufsgespräch := VKG ;;
;; Verkaufstaetigkeit := VT ;;
;; Begrüßung := BG ;;
;; Bedarf := B ;;
;; Bedarfsteilanalyse := BA ;;
;; Abschlusseinwände := AE ;;
;; Abschluss := AA ;;
;; Verabschiedung := AV ;;
;; Kunde := K (präfix für Kundenaussagen) ;;
;; Verkäufer := V (präfix für Verkäueraussagen) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Hauptstruktur des Verkaufsgesprächs als CFG-Regeln ;;
;; VKG leitet Begrüßung ein und endet mit Verabschiedung ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq vkg
'(((bg) 100 (vt)) ;; Begrüßung → Verkaufstaetigkeit
((vt) 50 (vt)) ;; Wiederholte Verkaufstaetigkeit
((vt) 100 (av)))) ;; Verkaufstaetigkeit → Verabschiedung
;; Begrüßungsregel - Kunde und Verkäufer wechseln Begrüßung aus
(setq bg
'((kbg 100 vbg)))
;; Bedarfsteil des Gesprächs - Kunde äußert Bedarf, Verkäufer bestätigt
(setq bbd
'((kbbd 100 vbbd)))
;; Bedarfsteilanalyse - Beide Seiten diskutieren über Bedarf
(setq ba
'((kba 100 vba)))
;; Einwandsbehandlung im Abschluss - Kunde und Verkäufer klären Einwände
(setq ae
'((kae 100 vae)))
;; Abschluss des Gesprächs - Kunde und Verkäufer schließen ab
(setq aa
'((kaa 100 vaa)))
;; Abschließende Verabschiedung - Kunde und Verkäufer verabschieden sich
(setq av
'((kav 100 vav)))
;; Verkaufsaktivität, bestehend aus Bedarf und Abschlussphasen
(setq vt
'(((b) 50 (b)) ;; Bedarfsteil
((b) 100 (a)))) ;; Abschluss
;; Struktur des Bedarfsteils im Verkaufsgespräch
(setq b
'(((bbd) 100 (ba)))) ;; Bedarfsaustausch → Bedarfsanalyse
;; Abschlussstruktur - bestehend aus Einwänden und Abschluss
(setq a
'(((ae) 50 (ae)) ;; Einwände wiederholt
((ae) 100 (aa)))) ;; Einwände → Abschluss
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Generierung von Sequenzen basierend auf Regeln ;;
;; ;;
;; Die folgende Funktion generiert dialogische Sequenzen gemäß ;;
;; der definierten Regeln und Gewichtungen. Sie simuliert den ;;
;; Dialogverlauf gemäß der CFG. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Hauptfunktion zur Generierung der Sequenz
(defun generate-sequence (state rules)
"Generiert eine Sequenz basierend auf dem aktuellen Zustand und den Regeln."
(cond
;; Sequenzende erreicht, gib nil zurück
((equal state nil) nil)
;; Wenn der Zustand terminal ist, gib ihn direkt zurück und gehe zur nächsten
((atom state) (cons state (generate-sequence (next-state state rules (random 101)) rules)))
;; Andernfalls erweitere den nicht-terminalen Zustand und fahre rekursiv fort
(t (cons (eval state) (generate-sequence (next-state state rules (random 101)) rules)))))
;; Funktion zur Auswahl des nächsten Zustands
(defun next-state (state rules probability)
"Wählt den nächsten Zustand basierend auf Regeln und einer Zufallswahrscheinlichkeit."
(cond
;; Falls keine Regeln mehr vorhanden, gib nil zurück
((equal rules nil) nil)
;; Prüft, ob die Regel für die Wahrscheinlichkeit zutrifft und gibt den Nachfolger zurück
((and (<= probability (car (cdr (car rules))))
(equal state (car (car rules))))
(car (reverse (car rules))))
;; Andernfalls durchsuche die restlichen Regeln weiter
(t (next-state state (cdr rules) probability))))
;; Hilfsfunktion zur Auswahl der ersten Sequenzregel
(defun initial-rule (rules)
"Wählt die erste Regel der Regelmenge."
(car (car rules)))
;; Startet die Simulation für die Fallstruktur
(defun simulate (rules)
"Startet die Sequenzgenerierung basierend auf den initialen Regeln."
(generate-sequence (initial-rule rules) rules))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Simulation starten und Sequenzen generieren ;;
;; ;;
;; (simulate vkg) ruft die Simulation für das Verkaufsgespräch ;;
;; auf und gibt die erzeugte Sequenz zurück. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Die Simulation wird für Welt 3 (Verkaufsgesprächsstruktur) gestartet
(simulate vkg)