Add functions to simply sentiment analyze interviews

This commit is contained in:
Marcus Kammer 2024-07-22 21:44:38 +02:00
parent 2b154d6c22
commit 990c748f8b
Signed by: marcuskammer
GPG key ID: C374817BE285268F

View file

@ -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)