emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 78ed9a1: packages/transcribe.el: Add native discourse anal


From: David Gonzalez Gandara
Subject: [elpa] master 78ed9a1: packages/transcribe.el: Add native discourse analysis in elisp
Date: Tue, 08 Dec 2015 16:25:19 +0000

branch: master
commit 78ed9a1eaa41f759ba025306172210d784e1d721
Author: David Gonzalez Gandara <address@hidden>
Commit: David Gonzalez Gandara <address@hidden>

    packages/transcribe.el: Add native discourse analysis in elisp
---
 packages/transcribe/transcribe.el |  131 +++++++++++++++++++++++++++++++------
 1 files changed, 110 insertions(+), 21 deletions(-)

diff --git a/packages/transcribe/transcribe.el 
b/packages/transcribe/transcribe.el
index de9736e..c751bc0 100644
--- a/packages/transcribe/transcribe.el
+++ b/packages/transcribe/transcribe.el
@@ -1,9 +1,9 @@
-;;; transcribe.el --- package for audio transcriptions
+;;; transcribe.el --- Package for audio transcriptions
 
 ;; Copyright 2014-2015  Free Software Foundation, Inc.
 
 ;; Author: David Gonzalez Gandara <address@hidden>
-;; Version: 0.5.0
+;; Version: 1.0.0
 
 ;; This program is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -22,34 +22,55 @@
 
 ;; REQUIRES:
 ;; -----------------------------
-;; In order to use the most important functions of transcribe, you need to 
install emms and mpg321.
+;; In order to use the audio functions of transcribe, you need to install 
+;; emms and mpg321.
 ;;
 ;; USAGE:
 ;; -------------------------
-;; Transcribe is a tool to make audio transcriptions easy. It allows the 
transcriber to control the audio easily while typing, as well as automate the 
insertion of xml tags, in case the transcription protocol include them.
+;; Transcribe is a tool to make audio transcriptions. It allows the 
+;; transcriber to control the audio easily while typing, as well as 
+;; automate the insertion of xml tags, in case the transcription protocol 
+;; include them.
+;; The analyse function will search for a specific structure 
+;; of episodes that can be automatically added with the macro NewEpisode. 
+;; The function expects the utterances to be transcribed inside a xml tag 
+;; with the identifier of the speaker, with the tags <l1> or <l2>, depending 
+;; on the language used by the person. The attributes expected are the 
+;; number of clauses that form the utterance and the number of errors the 
+;; transcriber observes.
 ;; 
-;;  AUDIO COMMANDS
+;; 
+;; AUDIO COMMANDS
 ;; ------------------------------
-;;     C-x C-p --------> Play audio file. You will be prompted for the name of 
the file. The recommended format is mp2.
-;;     <f5> -----------> Pause or play audio.
-;;     C-x <right> ----> seek audio 10 seconds forward.
-;;     C-x <left> ----->seek audio 10 seconds backward.
-;;     <f8> -----------> seek interactively: positive seconds go forward and 
negative seconds go backward
+;;     C-x C-p ------> Play audio file. You will be prompted for the name 
+;;                     of the file. The recommended format is mp2.
+;;     <f5> ---------> Pause or play audio.
+;;     C-x <right> --> seek audio 10 seconds forward.
+;;     C-x <left> --->seek audio 10 seconds backward.
+;;     <f8> ---------> seek interactively: positive seconds go forward and 
+;;                       negative seconds go backward
 ;;
-;;  XML TAGGING COMMANDS
+;; XML TAGGING COMMANDS
 ;; --------------------------------------------------
-;;     C-x C-n --> Create new episode structure. This is useful in case your 
xml file structure requires it. You can customize the text inserted 
manipulating the realted function.
-;;     <f6> -----> Interactively insert new tag. You will be prompted for the 
content of the tag. The starting tag and the end tag will be inserted 
automatically and the cursor placed in the proper place to type.
+;;     C-x C-n --> Create new episode structure. This is useful in case your 
+;;                 xml file structure requires it. You can customize the text 
+;;                 inserted manipulating the realted function.
+;;     <f6> -----> Interactively insert new tag. You will be prompted for the 
+;;                 content of the tag. The starting tag and the end tag will 
be 
+;;                 inserted automatically and the cursor placed in the proper 
+;;                 place to type.
 ;;
 ;;
 ;;
 ;; SPECIFIC COMMANDS I USE, THAT YOU MAY FIND USEFUL
 ;; ------------------------------------------------
-;;     C-x C-a ------> This runs an external discourse analysis tool. It 
defaults to my own script analyze_episodes2.py, but you can customise the 
command to launch any other.
+;;     C-x C-a ------> Analyses the text for measurments of performance.
 ;;     <f11> --------> Customised tag 1. Edit the function to adapt to your 
needs.
 ;;     <f12> --------> Customised tag 2. Edit the function to adapt to your 
needs.
-;;     <f7> ---------> Break tag. This command "breaks" a tag in two, that is 
it inserts an ending tag and then a starting tag. Edit the function to suit 
your needs. It is useful if you are segmenting discourse into tags and then you 
decide the segmentation was not correct.
-;;     <f4> ---------> Insert atributes. This function insert custom xml 
attributes. Edit the function to suit you needs.
+;;     <f7> ---------> Break tag. This command "breaks" a tag in two, that is 
+;;                     it inserts an ending tag and then a starting tag.
+;;     <f4> ---------> Insert atributes. This function insert custom xml 
attributes. 
+;;                     Edit the function to suit you needs.
 
 ;;; Code:
 
@@ -69,31 +90,98 @@
 (if t (require 'emms-playing-time))
 (emms-playing-time 1)
 
-
 (defun transcribe-analyze-episode (episode person)
+  "This calls the external python package analyze_episodes2.py. The new 
+   function transcribe-analyze implements its role now."
   (interactive "sepisode: \nsperson:")
-  (shell-command (concat (expand-file-name  "analyze_episodes2.py") " -e " 
episode " -p " person " -i " buffer-file-name )))
+  (shell-command (concat (expand-file-name  "analyze_episodes2.py") 
+                  " -e " episode " -p " person " -i " buffer-file-name )))
+
+(defun transcribe-analyze (episodenumber personid)
+  "Extract from a given episode and person the number of asunits per 
+   second produced, and the number of clauses per asunits, for L2 and L1."
+  (interactive "sepisodenumber: \nspersonid:")
+  (setq interventionsl2 '())
+  (setq interventionsl1 '())
+  (setq xml (xml-parse-region (point-min) (point-max)))
+  (setq results (car xml))
+  (setq episodes (xml-get-children results 'episode))
+  (setq asunitsl2 0.0000)
+  (setq asunitsl1 0.0000)
+  (setq shifts)
+  (setq clausesl1 0.0000)
+  (setq errorsl1 0.0000)
+  (setq clausesl2 0.0000)
+  (setq errorsl2 0.0000)
+  (dolist (episode episodes)
+     (setq numbernode (xml-get-children episode 'number))
+     (setq number (nth 2 (car numbernode)))
+     (when (equal episodenumber number)
+           (setq durationnode (xml-get-children episode 'duration))
+           (setq duration (nth 2 (car durationnode)))
+           (setq transcription (xml-get-children episode 'transcription))
+           (dolist (turn transcription)
+                   (setq interventionnode (xml-get-children turn (intern 
personid)))
+                   (dolist (intervention interventionnode)
+                           (setq l2node (xml-get-children intervention 'l2))
+                           (dolist (l2turn l2node)
+                                   (setq l2 (nth 2 l2turn))
+                                   (setq clausesl2node (nth 1 l2turn))
+                                   (setq clausesl2nodeinc (cdr (car 
clausesl2node)))
+                                   (when (not (equal clausesl2node nil))
+                                         (setq clausesl2 (+ clausesl2 
+                                              (string-to-number 
clausesl2nodeinc))))
+                                   (when (not (equal l2 nil)) 
+                                         (add-to-list 'interventionsl2 l2) 
+                                         (setq asunitsl2 (1+ asunitsl2))))
+                           (setq l1node (xml-get-children intervention 'l1))
+                           (dolist (l1turn l1node)
+                                   (setq l1 (nth 2 l1turn))
+                                   (setq clausesl1node (nth 1 l1turn))
+                                   (setq clausesl1nodeinc (cdr (car 
clausesl1node)))
+                                   (when (not (equal clausesl1node nil))
+                                         (setq clausesl1 (+ clausesl1 
+                                               (string-to-number 
clausesl1nodeinc))))
+                                   (when (not (equal l1 nil)) 
+                                         (add-to-list 'interventionsl1 l1) 
+                                         (setq asunitsl1 (1+ asunitsl1))))))))
+  (reverse interventionsl2)
+  (reverse interventionsl1)
+  ;(print interventions) ;uncomment to display all the interventions on screen
+  (setq asunitspersecondl2 (/ asunitsl2 (string-to-number duration)))
+  (setq clausesperasunitl2 (/ clausesl2 asunitsl2))
+  (setq asunitspersecondl1 (/ asunitsl1 (string-to-number duration)))
+  (setq clausesperasunitl1 (/ clausesl1 asunitsl1))
+  (princ (format "episode: %s, duration: %s, person: %s\n" number duration 
personid))
+  (princ (format "L2(Asunits/second): %s, L2(clauses/Asunit): %s, 
L1(Asunits/second): %s" 
+          asunitspersecondl2 clausesperasunitl2 asunitspersecondl1))
+)
 
 (defun transcribe-define-xml-tag (xmltag)
+  "This function allows the automatic insetion of a xml tag and places the 
cursor."
   (interactive "stag:")
   (insert (format "<%s></%s>" xmltag xmltag))
   (backward-char 3)
   (backward-char (string-width xmltag)))
 
 (defun transcribe-xml-tag-l1 ()
+  "Inserts a l1 tag and places the cursor"
   (interactive)
   (insert "<l1></l1>")
   (backward-char 3)
   (backward-char 2))
 
 (defun transcribe-xml-tag-l2 ()
+  "Inserts a l2 tag and places the cursor"
   (interactive)
   (insert "<l2 clauses=\"1\" errors=\"0\"></l2>")
   (backward-char 3)
   (backward-char 2))
 
 (fset 'transcribe-xml-tag-l2-break "</l2><l2 clauses=\"1\" errors=\"0\">")
+   ;inserts a break inside a l2 tag
 (fset 'transcribe-set-attributes "clauses=\"1\" errors=\"0\"")
+    ;inserts the attributes where they are missing
 
 (defun transcribe-display-audio-info ()
   (interactive)
@@ -102,14 +190,15 @@
 
 
 (fset 'NewEpisode
-      
"<episode>\n<number>DATE-NUMBER</number>\n<duration></duration>\n<comment></comment>\n<subject>Subject
 (level)</subject>\n<task>\n\t<role>low or high</role>\n<context>low or 
high</context>\n<demand>low or 
high</demand>\r</task>\n<auxiliar>Yes/no</auxiliar>\n<transcription>\n</transcription>\n</episode>")
+      
"<episode>\n<number>DATE-NUMBER</number>\n<duration></duration>\n<comment></comment>\n<subject>Subject
 (level)</subject>\n<task>\n\t<role>low or high</role>\n<context>low or 
high</context>\n<demand>low or 
high</demand>\r</task>\n<auxiliar>Yes/no</auxiliar>\n<transcription>\n</transcription>\n</episode>");Inserts
 a new episode structure
 
+;;;###autoload
 (define-minor-mode transcribe-mode
  "Toggle transcribe-mode"
   nil
-  " Transcribe"
+  " Trans"
   '(([?\C-x ?\C-p] . emms-play-file)
-    ([?\C-x ?\C-a] . transcribe-analyze-episode)
+    ([?\C-x ?\C-a] . transcribe-analyze)
     ([?\C-x ?\C-n] . NewEpisode)
     ([?\C-x down] . emms-stop)
     ([?\C-x right] . emms-seek-forward)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]