14 Piloter la plateforme par macros ou par scripts Groovy ou R

14.3 Utiliser des scripts R

TXM permet de faire exécuter un script R au moteur statistique R (R Core Team, 2014) intégré.

14.3.1 Exécuter un script

Un script R peut être exécuté par cinq moyens différents :

Session exemple

Exécution du script de démonstration « HelloWorld.R » :

14.3.2 Utilisation des résultats et objets TXM depuis R

Tous les résultats de calculs TXM dont l'icone est affichée dans la vue Corpus peuvent être transférés dans R sous la forme d'une structure de données : pour cela utiliser la commande « Envoyer vers R » du menu contextuel du corpus ou de l'icone de résultat depuis la vue Corpus.

La console affiche alors le nom de l'objet R créé pour vous permettre de l'utiliser dans des scripts R. Un petit « R » rouge en exposant à gauche est ajouté à l'icone de l'objet TXM pour confirmer le transfert dans R. Certains transferts sont réalisés automatiquement par TXM pour certains calculs (tables lexicales, graphique de progression, spécificités...).

La vue « Variables R » affiche la liste des données déjà transférées dans R. Pour ouvrir la vue « Variables R », ouvrir le menu « Affichage / Vues / Variables R ». Vous pouvez copier dans le presse-papier le nom de la donnée transférée avec l'entrée « Copier » du menu contextuel de son icone ou en pressant Contrôle-C au clavier quand l'icone est sélectionnée. Vous pouvez alors coller le nom du symbole dans un script R.

14.3.3 Utiliser la perspective R pour organiser son accès à R

La perspective R vous permet de configurer rapidement l'interface de TXM avec les vues utiles au travail avec R :

Le basculement dans la perspective « Corpus », pour reprendre votre session d'analyse de corpus, fermera la vue « Variables R » et la console R.

Vous pouvez basculer d'une perspective à l'autre à n'importe quel moment.

Par défaut, l'interface de TXM est configurée selon la perspective « Corpus ». Pour changer de perspective, vous pouvez utiliser la barre d'outils des perspectives située en haut à gauche de l'interface, sous la barre d'outils principale, contenant les boutons « R » et « Corpus ». Vous pouvez également utiliser le menu principal (en haut à gauche) « Affichage / Perspectives / R ou Corpus ».

14.3.4 L'environnement R de TXM

Au démarrage, TXM effectue quelques réglages du moteur statistiques R (Rserve) :

 

La configuration des options de lancement de R (et Rserve) est accessible depuis la page de préférences avancées de R (TXM > Avancé > Moteur statistique). Pour plus d'informations sur R, voir les pages suivantes :

14.3.5 Exemple de session de travail utilisant R

14.3.5.1  Affichage de l'histogramme des fréquences d'un index de lemmes calculé avec R

L'objectif de cette session exemple est d'afficher l'histogramme des fréquences des 10 lemmes de noms les plus fréquents du corpus Discours :

svg("/tmp/test.svg")

barplot(t(IndexN$data), space=c(1,35), horiz=F, las=2, beside=T)

dev.off()

14.3.5.2 Affichage de l'histogramme directement dans TXM avec un script Groovy

Vous pouvez afficher le fichier SVG généré directement dans TXM en double-cliquant sur son icone depuis la vue « Fichier » (dont l'onglet est par défaut situé à côté de celui de la vue « Corpus »).

Vous pouvez également afficher directement le fichier SVG en exécutant le script Groovy suivant :

import org.txm.rcpapplication.commands.*

monitor.syncExec(new Runnable() { @Override

public void run() { OpenSVGGraph.OpenSVGFile("/tmp/test.svg", "histogram plot") }

});

 

Si l'éditeur de texte est ouvert sur un fichier du dossier « $HOME/scripts/user » ayant une extension « .groovy », alors vous pouvez exécuter le script directement par le menu contextuel de l'éditeur « Groovy / Exécuter le Script ».

14.3.5.3 Exécution du script R et de l'affichage de l'histogramme depuis un seul script Groovy

Il est possible d'assembler le script R et le script d'affichage du SVG dans un seul script Groovy :

 

import org.txm.rcpapplication.commands.*

import org.txm.stat.engine.r.RWorkspace

 

def r = RWorkspace.getRWorkspaceInstance()

 

r.eval("""

##### début du script R #####

 

svg("/tmp/test.svg")

barplot(t(IndexN\$data), space=c(1,35), horiz=F, las=2, beside=T)

dev.off()

 

##### fin du script R #####

""")

 

import org.txm.rcpapplication.commands.*

monitor.syncExec(new Runnable() { @Override public void run() { OpenSVGGraph.OpenSVGFile("/tmp/test.svg", "histogram plot") }

});

14.3.5.4 Saisie du nom de l'index depuis une boite de dialogue à l'aide d'une macro TXM

Pour faciliter la mise à jour du nom du symbole dans le script, on peut le faire saisir dans une boite de dialogue en transformant le script en macro TXM :

import org.kohsuke.args4j.*

import groovy.transform.Field

import org.txm.rcpapplication.swt.widget.parameters.ParametersDialog

 

import org.txm.rcpapplication.commands.*

import org.txm.stat.engine.r.RWorkspace

 

@Field @Option(name="symbol_name",usage="symbol name of the Index to use", widget="String", required=true, def="Index1")

def symbol_name

if (!ParametersDialog.open(this)) return;

 

def r = RWorkspace.getRWorkspaceInstance()

 

r.eval("""

##### début du script R #####

 

svg("/tmp/test.svg")

barplot(t(${symbol_name}\$data), space=c(1,35), horiz=F, las=2, beside=T)

dev.off()

 

##### fin du script R #####

""")

 

monitor.syncExec(new Runnable() {

@Override

public void run() { OpenSVGGraph.OpenSVGFile("/tmp/test.svg", "histogram plot") }

});

14.3.5.5 Récupération du nom de l'index directement depuis la macro

  1. Pour aller plus loin encore dans la simplification de la désignation de l'index concerné, il est possible d'obtenir le nom de l'index transféré depuis la macro en désignant l'index dans la vue Corpus :

import org.txm.rcpapplication.commands.*

import org.txm.stat.engine.r.RWorkspace

 

import org.txm.functions.vocabulary.*

 

if (!corpusViewSelection || !(corpusViewSelection instanceof Vocabulary)) {

println "Error: this macro should be run with an Index selected"

return

}

def symbol_name = corpusViewSelection.getSymbol()

 

def r = RWorkspace.getRWorkspaceInstance()

 

r.eval("""

##### début du script R #####

 

svg("/tmp/test.svg")

barplot(t(${symbol_name}\$data), space=c(1,35), horiz=F, las=2, beside=T)

dev.off()

 

##### fin du script R #####

""")

 

monitor.syncExec(new Runnable() {

@Override

public void run() { OpenSVGGraph.OpenSVGFile("/tmp/test.svg", "histogram plot") }

});

Pour lancer successivement la même macro sur plusieurs résultats d'Index, une configuration pratique consiste à afficher la vue Macros dans le panneau de gauche avec la vue Corpus. Par exemple, le moitié supérieure pour la vue Corpus et le moitié inférieure pour la vue Macros (pour déplacer la vue Macros, faire glisser son onglet dans le panneau de gauche).

14.3.6 Description des principaux objets TXM transférés à R

a) un objet Lexique est transféré sous forme d'une matrice (matrix) d'un seul vecteur colonne (vector) de fréquences (numeric) dont chaque ligne est nommée par la valeur de la propriété décomptée.

b)  un objet Index issu d'un corpus ou d'un sous-corpus est transféré sous forme d'une liste (data.frame) contenant un objet nommé data . L'objet data est une matrice d'un seul vecteur colonne de fréquences dont chaque ligne est nommée par la valeur de la propriété décomptée ou par la concaténation des valeurs des propriétés décomptées quand il y en a plusieurs (dans ce cas les valeurs sont séparées par le caractère souligné : « _ »).

c)  un objet Index issu d'une partition est transféré sous forme d'une liste contenant un objet nommé data . L'objet data est une matrice d'autant de vecteurs colonnes de fréquences que de parties. Chaque ligne est nommée par la valeur de la propriété décomptée ou par la concaténation des valeurs des propriétés décomptées quand il y en a plusieurs (dans ce cas les valeurs sont séparées par le caractère souligné : « _ »). La première colonne contient les marges de lignes, elle est nommée F.

d) un objet Tablelexicale, issu d'une partition ou d'un index de partition est transféré sous forme d'une matrice d'autant de vecteurs colonnes de fréquences que de parties. Chaque ligne est nommée par la valeur de la propriété décomptée ou par la concaténation des valeurs des propriétés décomptées quand il y en a plusieurs (dans ce cas les valeurs sont séparées par le caractère souligné : « _ »).

e) un objet Concordance est transféré sous forme d'une liste contenant des objets nommés data, leftcontext et rightcontext. L'objet data est une matrice de 4 vecteurs colonnes de chaînes nommés refs, leftcontext, keywords et rightcontext. Ils contiennent respectivement, les références, les contextes gauches, les pivots et les contextes droits. Les objets leftcontext et rightcontext contiennent la taille en mots des contextes gauche et droit.

f) un objet Corpus est transféré sous forme d'une liste contenant des objets de base stockant les codes des valeurs de propriétés de mots pour chaque occurrence dans l'ordre des textes du corpus (data), ainsi que les dictionnaires de ces valeurs (wordlex pour le dictionnaire des formes et idlex pour le dictionnaire des identifiants de mots).

Si les mots du corpus ont été annotés, les valeurs de ces annotations sont stockées dans autant de dictionnaires supplémentaires que nécessaire nommés frposlex, frlemmalex (c'est-à-dire « code de langue|nom de propriété|lex » pour des annotations TreeTagger) ou bien de n'importe quel nom d'annotation supplémentaire. L'objet data est une matrice de vecteurs colonnes pour chaque propriété de mot. Les colonnes sont nommées par les noms de propriétés. Les positions de début et de fin de textes sont stockées dans les vecteurs $struct$text$start et $struct$text$end de l'objet R créé.


66 On ouvre un éditeur de texte en ouvrant un fichier de la vue Fichier ou par le menu principal “Fichier / Nouveau fichier” ou “Fichier / Ouvrir...”.