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 :
-
depuis un éditeur de texte66:
-
menu contextuel « R / Exécuter le Script » exécute le script se trouvant dans l'éditeur ;
-
menu contextuel « R / Exécuter la sélection comme script R » exécute le texte sélectionné dans l'éditeur ;
-
raccourcis clavier « F11 » exécute le texte sélectionné dans l'éditeur ;
-
raccourcis clavier « Ctrl-F11 » exécute le script se trouvant dans l'éditeur ;
-
depuis la vue Fichier :
-
menu contextuel sur l'icone d'un fichier « R / Exécuter le Script » exécute le script contenu dans le fichier.
Session exemple
Exécution du script de démonstration « HelloWorld.R » :
-
accéder au dossier des scripts R d'exemple livrés avec TXM à partir de la vue Fichier : ouvrir le dossier « $HOME/TXM/scripts/samples/R »
-
ouvrir le script « HelloWorld.R » dans un éditeur en double-cliquant sur son icone
-
ouvrir la “Console R” pour pouvoir lire les sorties du script : ouvrir “Affichage / Vues / 'Console R' ” à partir du menu principal
-
dans le menu contextuel de l'éditeur contenant le script “HelloWorld.R”, lancer “R / Exécuter le Script”
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 :
-
un bouton « Nouvelle session » de création de script de session R est ajouté à la barre d'outils : pour ouvrir un éditeur de texte sur un fichier de script nommé « sessionX.R » créé automatiquement dans le dossier « $USER_HOME/TXM/scripts/R ».
-
un onglet « Variables R » est ajouté dans le panneau de gauche, donnant un accès rapide à la vue « Variables R »;
-
la partie droite de l'interface empile trois fenêtres :
-
la zone d'édition des scripts R ;
-
la console R ;
-
la console TXM.
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) :
-
L'encodage des caractères par défaut est initialisé à Unicode UTF-8
-
Le chemin du workspace R est initialisé à :
-
Sous Windows :
« C:\Utilisateurs\<identifiant de l'utilisateur>\TXM\R »
ou bien
« C:\Documents and Settings\<identifiant de l'utilisateur>\TXM\R » -
Sous Mac OS X :
« /Users/<identifiant de l'utilisateur>/TXM/R » -
Sous Linux :
« /home/<identifiant de l'utilisateur>/TXM/R ». -
Le dossier d'installation des packages R est initialisé à :
-
Sous Windows :
« C:\Utilisateurs\<identifiant de l'utilisateur>\TXM\R\libraries »
ou bien
« C:\Documents and Settings\<identifiant de l'utilisateur>\TXM\R\libraries » -
Sous Mac OS X :
« /Users/<identifiant de l'utilisateur>/TXM/R\libraries » -
Sous Linux :
« /home/<identifiant de l'utilisateur>/TXM/R\libraries ».
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 :
-
Options de R : http://www.r-project.org
-
Options de Rserve : http://rforge.net/Rserve/doc.html#start
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 :
-
construire l'Index des lemmes de noms :
-
commande Index avec les paramètres :
-
corpus : DISCOURS
-
requête : [pos="N.*"]
-
propriété : lemma
-
Vmax: 10
-
envoyer l'Index dans R :
-
dans le menu contextuel de l'icone de résultat d'Index, descendante de l'icone du corpus DISCOURS dans la vue Corpus et nommée « [pos=”N.*”]:lemma », lancer la commande « Envoyer vers R »
-
l'icone de résultat d'Index doit recevoir une lettre R rouge pour confirmer le transfert
-
repérer et copier le nom de l'objet R créé dans la console : par exemple « Index1 »
-
ouvrir la perspective R en cliquant sur le bouton « R » de la barre d'outils des perspectives
-
démarrer une nouvelle session en cliquant sur le bouton « Nouvelle session » de la barre d'outils
-
copier le script R suivant dans l'éditeur de texte nommé « sessionX.R » (où « X » est le numéro de la session):
svg("/tmp/test.svg")
barplot(t(IndexN$data), space=c(1,35), horiz=F, las=2, beside=T)
dev.off()
-
éditer la chaine « IndexN » en collant le nom de l'objet R créé lors du transfert vers R (par exemple « Index1 »)
-
exécuter le script en cliquant sur le bouton « Exécuter » de la barre d'outils (flèche verte)
-
vérifier le résultat en ouvrant le fichier « /tmp/test.svg » dans votre navigateur à partir du gestionnaire de fichiers.
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") }
});
-
d'abord copier le script dans un éditeur de texte (menu « Fichier / Nouveau fichier »);
-
ensuite sélectionner le texte du script ;
-
enfin, lancer « Groovy / Exécuter la sélection de texte » depuis le menu contextuel de l'éditeur.
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 :
-
dans un éditeur de texte ouvert sur un fichier du dossier « $HOME/scripts/user » ayant une extension « .groovy », copier le script Groovy suivant :
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") }
});
-
remplacer le nom du symbole « IndexN » par celui de l'Index transféré à R (par exemple « Index1 ») ;
-
enfin, lancer “Groovy / Exécuter le Script” dans le menu contextuel de l'éditeur.
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 :
-
dans un éditeur de texte ouvert sur le fichier « testMacro.groovy » du dossier « $HOME/scripts/macro », copier le script Groovy suivant :
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") }
});
-
ouvrir la vue « Macro » (menu principal « Affichage / Vues / Macro »)
-
double-cliquer sur l'icone du fichier « test » dans la vue Macro pour l'exécuter :
-
dans la boite de dialogue, saisir le nom de symbole voulu dans le champ « symbol_name » et presser « Run ».
14.3.5.5 Récupération du nom de l'index directement depuis la macro
-
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 :
-
dans un éditeur de texte ouvert sur le fichier « testMacro.groovy » du dossier « $HOME/scripts/macro », copier le script Groovy suivant :
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") }
});
-
sélectionner l'icone d'Index résultat dans la vue Corpus pour lequel vous souhaitez afficher l'histogramme (ne pas oublier de transférer l'Index vers R au préalable) ;
-
ouvrir la vue « Macro » (menu principal « Affichage / Vues / Macro ») ;
-
double-cliquer sur le fichier macro pour l'exécuter.
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...”.