Inhalt
Aktueller Ordner:
/vkgInductorGermanComment.scm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Paul Koop M.A. GRAMMATIKINDUKTION empirisch ;;
;; gesicherter Verkaufsgespraeche ;;
;; ;;
;; Die Simulation wurde ursprunglich entwickelt, ;;
;; um die Verwendbarkeit von kontextfreien Grammatiken ;;
;; fuer die Algorithmisch Rekursive Sequenzanalyse ;;
;; zu ueberpruefen. ;;
;; Modellcharakter hat allein der Quelltext. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Korpus: Folge von Terminalsymbolen
(define korpus (list 'KBG 'VBG 'KBBd 'VBBd 'KBA 'VBA 'KAE 'VAE 'KAA 'VAA 'KAV 'VAV))
;; Lexikon: Terminalsymbole, die in der Grammatik verwendet werden
(define lexikon (vector 'KBG 'VBG 'KBBd 'VBBd 'KBA 'VBA 'KAE 'VAE 'KAA 'VAA 'KAV 'VAV))
;; transformationsmatrix wird hier initialisiert
(define matrix (make-vector 12 (make-vector 12 0)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Hilfsfunktion zur Indizierung eines Zeichens im Lexikon
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (find-index symbol)
(let loop ((i 0))
(cond ((= i (vector-length lexikon)) #f) ;; Symbol nicht gefunden
((equal? (vector-ref lexikon i) symbol) i)
(else (loop (+ i 1))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Funktion zur Transformation und ZΓ€hlung von ΓbergΓ€ngen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (transformationen-zaehlen korpus)
(define (process-pair a b)
(let ((i (find-index a))
(j (find-index b)))
(when (and i j) ;; Falls beide Symbole gefunden werden
(let ((current-value (vector-ref (vector-ref matrix i) j)))
(vector-set! (vector-ref matrix i) j (+ current-value 1))))))
(let loop ((rest korpus))
(if (< (length rest) 2)
'done
(begin
(process-pair (car rest) (cadr rest))
(loop (cdr rest))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Ausgabe der Matrix zur Kontrolle der Transformationen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (matrix-ausgeben matrix)
(for-each
(lambda (row)
(for-each (lambda (val) (display val) (display " ")) row)
(newline))
(vector->list matrix)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Grammatik erstellen auf Basis der Transformationen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (grammatik-erstellen matrix)
(for-each
(lambda (i)
(for-each
(lambda (j)
(let ((count (vector-ref (vector-ref matrix i) j)))
(when (> count 0)
(display (list (vector-ref lexikon i) '-> (vector-ref lexikon j)))
(display " : HΓ€ufigkeit ") (display count) (newline))))
(iota (vector-length lexikon))))
(iota (vector-length lexikon))))
;; Simulation starten: Transformationen zΓ€hlen, Matrix ausgeben, Grammatik erzeugen
(transformationen-zaehlen korpus)
(display "Transformationsmatrix:\n")
(matrix-ausgeben matrix)
(display "\nErzeugte Grammatik:\n")
(grammatik-erstellen matrix)