diff --git a/bundle/bundle--ux.el b/bundle/bundle--ux.el index 02feec60..46fbf481 100644 --- a/bundle/bundle--ux.el +++ b/bundle/bundle--ux.el @@ -1,6 +1,9 @@ ;; Personal UX database. Goal of this database is to provide funtions and data ;; to generate an org file for ux planning. +(require 'org) +(require 'cl-lib) + (defvar ux:glossary '((context-of-use "The Context of Use is the actual conditions under which a given artifact/software product is used, or will be used in a normal day to day working situation."))) @@ -345,3 +348,50 @@ (defun ux:sus-calc-score-per-row (lst) (* (apply '+ (ux:sus-calc-score lst)) 2.5)) + +;; ======= Analyze Interviews ======= + +(defun ux/extract-interview-data () + "Extrahiert Interviewdaten aus dem aktuellen Org-Buffer." + (org-element-map (org-element-parse-buffer) 'headline + (lambda (headline) + (when (string= (org-element-property :TYPE headline) "INTERVIEW") + (list :title (org-element-property :TITLE headline) + :date (org-element-property :DATE headline) + :content (org-element-property :raw-value headline)))))) + +(defun ux/analyze-sentiment (text) + "Führt eine einfache Stimmungsanalyse durch." + (let ((positive-words '("good" "great" "excellent" "love" "enjoy")) + (negative-words '("bad" "poor" "terrible" "hate" "dislike"))) + (- (cl-count-if (lambda (word) (member word positive-words :test #'string-equal)) + (split-string text)) + (cl-count-if (lambda (word) (member word negative-words :test #'string-equal)) + (split-string text))))) + +(defun ux/analyze-interviews () + "Analysiert Interviews im aktuellen Org-Buffer." + (interactive) + (let ((interviews (ux/extract-interview-data))) + (mapcar (lambda (interview) + (list :title (plist-get interview :title) + :date (plist-get interview :date) + :sentiment (ux/analyze-sentiment (plist-get interview :content)))) + interviews))) + +(defun ux/display-interview-analysis () + "Zeigt die Analyse der Interviews an." + (interactive) + (let ((result (ux/analyze-interviews))) + (with-current-buffer (get-buffer-create "*Interview Analysis*") + (erase-buffer) + (insert "Interview Analysis:\n\n") + (dolist (interview result) + (insert (format "Title: %s\nDate: %s\nSentiment: %d\n\n" + (plist-get interview :title) + (plist-get interview :date) + (plist-get interview :sentiment)))) + (pop-to-buffer (current-buffer))))) + +;; Binden Sie die Funktion an einen Tastaturkürzel, z.B.: +;; (global-set-key (kbd "C-c i") 'display-interview-analysis)