+ (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:")
+ (let* ((interventionsl2 '())
+ (interventionsl1 '())
+ (xml (xml-parse-region (point-min) (point-max)))
+ (results (car xml))
+ (episodes (xml-get-children results 'episode))
+ (asunitsl2 0.0000)
+ (asunitsl1 0.0000)
+ (shifts nil)
+ (clausesl1 0.0000)
+ (errorsl1 0.0000)
+ (clausesl2 0.0000)
+ (errorsl2 0.0000)
+ (duration nil)
+ (number nil))
+
+ (dolist (episode episodes)
+ (let*((numbernode (xml-get-children episode 'number)))
+
+ (setq number (nth 2 (car numbernode)))
+ (when (equal episodenumber number)
+ (let* ((durationnode (xml-get-children episode 'duration))
+ (transcription (xml-get-children episode 'transcription)))
+
+ (setq duration (nth 2 (car durationnode)))
+ (dolist (turn transcription)
+ (let* ((interventionnode (xml-get-children turn
+ (intern personid))))
+
+ (dolist (intervention interventionnode)
+ (let* ((l2node (xml-get-children intervention 'l2))
+ (l1node (xml-get-children intervention 'l1)))
+
+ (dolist (l2turn l2node)
+ (let* ((l2 (nth 2 l2turn))
+ (clausesl2node (nth 1 l2turn))
+ (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)))))
+ (dolist (l1turn l1node)
+ (let*((l1 (nth 2 l1turn))
+ (clausesl1node (nth 1 l1turn))
+ (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
+ (let((asunitspersecondl2 (/ asunitsl2 (string-to-number duration)))
+ (clausesperasunitl2 (/ clausesl2 asunitsl2))
+ (asunitspersecondl1 (/ asunitsl1 (string-to-number duration)))
+ (clausesperasunitl1 (/ clausesl1 asunitsl1)))
+
+ (princ (format "episode: %s, duration: %s, person: %s\n" episodenumber duration personid))
+ (princ (format "L2(Asunits/second): %s, L2(clauses/Asunit): %s, L1(Asunits/second): %s"
+ asunitspersecondl2 clausesperasunitl2 asunitspersecondl1)))))
+
+(defun transcribe-xml-tag-person (xmltag)
+ "This function allows the automatic insetion of a speaker xml tag and places the cursor."
+ (interactive "stag:")
+ (insert (format "<%s move=\"\"></%s>" xmltag xmltag))
+ (backward-char 3)
+ (backward-char (string-width xmltag)))