R.temis dans RStudio

Cette page présente le paquet R.temis, qui fournit des fonctions pour une utilisation directe dans des scripts à utiliser par exemple dans RStudio. R.temis a été écrit par Milan Bouchet-Valet (Ined), Antoine Chollet (ENSAI et Ined) et Bénédicte Garnier (Ined) à l’été 2018 à partir du code du paquet RcmdrPlugin.temis. Il s’adresse aux utilisateurs déjà un peu familiers avec la programmation : ceux qui préfèrent travailler avec une interface graphique peuvent continuer à utiliser le paquet RcmdrPlugin.temis.

Installer R.TeMiS

  1. Installer de RStudio

Télécharger à partir de https://www.rstudio.com/products/rstudio/download/ et lancer l’installation.

  1. Installer la version 3.5 de R

Télécharger à partir de https://cran.r-project.org/ et lancer l’installation.

  1. Installer R.temis (à partir du CRAN)

Lancer la commande install.packages("R.temis")

Description générale de R.temis

Le paquet R.temis nécessite les paquets :

stats, utils, graphics, testthat, wordcloud, igraph, stringi, crayon, SnowballC, tm.plugin.factiva, tm.plugin.lexisnexis, tm.plugin.europresse, tm.plugin.alceste.

Il dépend des paquets : tm (>= 0.6), NLP, slam, FactoMineR, explor

Il a été développé avec la version R 3.5.0.

Figure 1 : Liste des fonctions de R.temis

Fonction

Pour

import_corpus

Importer les données

split_documents

Découper les textes longs

combine_terms

Regrouper des termes

build_dtm

Créer un tableau lexical

lexical_summary

Faire un bilan lexical

dictionary

Afficher le dictionnaire

frequent_terms

Afficher les fréquences des mots

term_freq

Afficher la fréquences d’un ou plusieurs mots

word_cloud

Générer un nuage de mots

concordances

Afficher des concordances

terms_graph

Afficher un graphe de mots

cooc_terms

Afficher des termes cooccurrents

corpus_ca

Exécuter une analyse des correspondances

contributive_docs

Afficher les documents les plus contributifs aux axes

extreme_docs

Afficher les documents aux extrémités des axes factoriels

corpus_clustering

Exécuter une classification

add_clusters

Ajouter le numéro de la classe au document

set_corpus_variables

Ajouter des métadonnées au corpus

specific_terms

Afficher les termes spécifiques

characteristic_docs

Afficher les documents caractéristiques

subset_corpus

Créer un sous corpus incluant ou excluant un terme ou par métadonnée

Liste obtenue par la commande R : help(package="R.temis")

Chaque fonction est documentée : description, syntaxe, options, exemple de script. Pour y accéder, positionner le curseur sur le nom de la fonction et appuyer touche F1 du clavier.

Figure 2 : Exemple de fonction documentée dans la fenêtre Help de RStudio

La démarche d’analyse

Avant d’utiliser les fonctions de R.temis, il est important de se situer dans la démarche d’analyse d’un corpus au moyen des méthodes de la statistique textuelle.

Après avoir importé ses données en spécifiant ses choix sur le type de corpus (texte, tableur…), la langue, la lemmatisation, le traitement des mots-outils… Il faut aussi « explorer » ses données avec des calculs de fréquences de « mots » (Afficher le dictionnaire), des tris à plat et tris croisés sur les variables qualitatives (métadonnées).

Selon la problématique à traiter, il conviendra d’utiliser les méthodes adaptées pour rechercher les cooccurrences (graphe de mots, analyses factorielles ou classifications), calculer des distances entre mots (dissimilarités), lister les mots spécifiques (spécificités), ou traiter ensemble les mots et les métadonnées (analyses factorielles).

L’analyse des concordances est également une aide à l’interprétation très précieuse.

Figure 3 : Démarche d’analyse

RStudio

  • Environnement de développement intégré (IDE en anglais) fonctionnel, libre, gratuit et multiplateforme

  • Facilite la saisie, l’exécution de code, la visualisation des résultats, etc.

  • Fenêtre unique découpée en quatre zones

    1. Edition de fichiers source R (avec coloration syntaxique et auto complétion des noms de fonction et d’objet avec la touche tabulation),

    2. Console avec la session R en cours d’exécution. L’utilisation du raccourci Ctrl+Entrée permet d’exécuter directement une ligne ou une sélection depuis le fichier source.

    3. Permet de basculer entre l’affichage des objets de l’espace de travail actuel (Workspace) et l’historique des commandes exécutées. On peut même inspecter visuellement le contenu de certains objets

    4. Permet de basculer entre

      • un navigateur de fichiers

      • fenêtre d’affichage et d’export des graphiques

      • une liste des extensions installées, qui permet de les charger en mémoire ou d’en installer de nouvelles

      • un navigateur d’aide qui permet à la fois la navigation dans l’aide en ligne intégrée à R et l’affichage des pages d’aide des différentes fonction

(cf Julien Barnier · 7 mars 2011 – https://quanti.hypotheses.org/488)

Lancer R.temis

Comme pour tout paquet R, il faut exécuter la commande library(R.temis).

Cas 1 : le corpus contient des textes/documents très courts qui sont stockés dans un tableau

Les données utilisées dans cette partie sont extraites du projet EuroBroadMap (http://www.eurobroadmap.eu/). Nous traitons les réponses des étudiants interrogés en Chine à la question posée comme suit : « Quels sont les mots que vous associez le plus à l’« Europe » ? Choisissez 5 mots au maximum ». Ce type de questionnement s’apparente à une question « ouverte » dans le cadre d’un questionnaire où on dispose également à des caractéristiques des répondants (Sexe, Niveau de revenu du père, de la mère) et le contexte de passation du questionnaire (pays d’enquête, ville d’enquête, domaine d’étude (art, commerce, ingénieur, santé, SHS, politique) et des réponses à des questions « fermées ».

Importer un corpus de type tableau constitué de textes « courts »

Dans notre exemple, les réponses sont constituées de quelques mots, on peut donc parler de textes courts. On considère que des réponses à des questions ouvertes ou de titres d’articles sont aussi des textes courts.

Figure 4 : Extrait du tableau contenant les textes courts et les variables qualitatives associées

(Source EuroBroadMap, 2009)

Importer un corpus de type tableur

On utilise la fonction import_corpus pour importer un tableau (type csv) 3 car ces textes sont très courts.

Préciser la langue du corpus à traiter (ici en anglais)

Exemples de langues possibles

French (fr), English (en), Brazilian or Portuguese (ptb), both Simplified and Traditional Chinese (ch, chs or cht), Czech (csy), Danish (dan), Dutch (dutch or nld), Finnish(fin), German (de), Hungarian(hun), Italian (ita), Japanese (jpn), Polish(plk), Russian(rus), Slovenian and Spanish (Spanish),Turkish (trk)

Création du tableau lexical

La function built_dtm crée un tableau lexical appelé Document Term Matrix croisant les textes et les “mots” du corpus.

L’objet R dtm est chargé en mémoire. Il contient 1139 lignes (ici les unités statistiques initiales c’est à dire les réponses) et 1133 colonnes (termes distincts). Il contient 5011 cases des valeurs non nulles (occurrences) et 1285476 cases vides ; c’est tableau « hyper creux ». Le terme le plus long est composé de 17 lettres.

Visualiser le corpus

Sélectionner les documents/réponses que l’on veut voir

Afficher l’ensemble des réponses dans une autre fenêtre de RStudio

Figure 5 : Afficher les documents/textes

(Source EuroBroadMap, 2009)

Afficher les métadonnées

Ici aussi RStudio ouvre une autre fenêtre ; on peut trier les colonnes.

Figure 6 : Afficher les métadonnées du corpus

(Source EuroBroadMap, 2009)

Afficher le lexique

La fonction dictionary créé le lexique/dictionnaire associé au corpus.Ici on précise que l’on veut supprimer les mots-outils (remove_stopwords=TRUE)

On stocke ce dictionnaire (ici dicso) que l’on pourra visualiser par ordre alphabétique (ou nombre d’occurrences).


Figure 7 : Dictionnaire/lexique des termes associés au corpus

On visualise le résultat du traitement du corpus par le paquet tm (extraction des radicaux et suppression des mots vides) dans la colonne Term même si comme ici on a choisi de ne pas lemmatiser (pour visualiser la liste des mots vides en anglais, lancer la commande stopwords("en") dans la fenêtre de script).

On peut exporter le dictionnaire généré dans un  fichier CSV qui sera lu avec n’importe quel tableur.

Afficher un nuage de mots

La fonction word_cloud génère le nuage de mots correspondant au lexique. On peut choisir le nombre de mots à afficher et fixer un seuil minimal d’occurrences.


Figure 8 : Nuage de mots associé au corpus

Il faudra ajouter une légende !

Ici les mots outils ne sont pas affichés par défaut alors qu’ils sont encore dans le tableau lexical.

Pour la suite des traitements, on crée un nouveau tableau lexical sans les mots-outils.

On fait un nouveau tableau lexical sans mots-outils 

Le tableau lexical/Document Term Matrix (dtm) contient toujours 1139 textes/réponses mais 1101 mots distincts (vs 1133 avec les mot-outils).

Afficher des contextes /concordances

Lire les contextes d’utilisation de certains mots (concordances) est une aide à l’interprétation indispensable à l’analyse des résultats et complémentaire à la liste des mots les plus fréquents, les mots spécifiques, les plans factoriels ou classifications. On utilise la fonction concordances de R.temis.

Cette étape consiste à restituer les réponses ou parties de textes dans lesquelles un terme donné est utilisé. Dans l’exemple ci-dessous, on a retenu les réponses contenant le terme climate.

Figure 9 : Concordances au mot climate


Analyse descriptive

Distribution des mots

On affiche les termes les plus fréquents (par défaut les 25 premiers) avec la fonction frequent_terms.


Figure 10 : Distribution des “mots” du corpus

Le mot developed est le plus cité par les étudiants interrogés en Chine. Il correspond à plus de 7% des occurrences.

Distribution des variables

On utilise ici le paquet questionr pour vérifier la répartition des modalités des variables que l’on utilisera dans les analyses, en particulier pour l’analyse des correspondances sur tableau lexical agrégée avec des variables qualitatives. Si nécessaire, le paquet peut être installé avec la commande install.packages("questionr").

Ici on vérifie la répartition des variables G_Study (domaine d’étude) et A1_Gender (sexe).

Figure 11 : Tri à plat des métadonnées /variables qualitatives


 


Dans ce corpus, la répartition des réponses (documents) sont assez équilibrées pour ces deux variables

Bilan lexical

La fonction lexical_summary affiche, le nombre de termes, le nombre de termes distincts, le pourcentage de termes distincts par documents (ici les réponses) ou pour l’ensemble du corpus.


Figure 12 : Bilan lexical sur le corpus

 (Source EuroBroadMap, 2009)

On dénombre dans ce corpus (sans mots-outils) 4788 « mots » dont 1101 mots différents5. Les étudiantes citent moins de mots différents que les étudiants (671 contre 754).

Table de dissimilarité (à venir)

Calcule la distance du Khi2 entre documents (ici les réponses des étudiants à l’enquête) (si le nombre n’est pas trop grand) ou entre modalités d’une variable ou de deux variables qualitatives.

Termes spécifiques par modalité ou calcul des spécificités

La fonction specific_terms fait un test statistique en comparant l’emploi des « mots » par sous partie du corpus par rapport à l’ensemble du corpus ; ces sous parties sont ici les modalités d’une métadonnée mais pourront être la variable « classe » d’une classification. Ce test permet de repérer le vocabulaire spécifique « sur employé » ou « sous employé » pour chaque sous corpus.


Par défaut, ne garde que les « mots » de fréquence supérieure à 2.

Figure 13 : “Mots” spécifiques par modalités d’une variable qualitative  (Source EuroBroadMap, 2009)

Le mot prosperity représente 1,49% de l’ensemble des occurrences des mots cités par les étudiants en SHS. 92% des occurrences du mot prosperity sont citées par des étudiants en SHS

Le mot prosperity est très spécifique aux étudiants en SHS ; le mot «civilized, est lui beaucoup moins employés par les étudiants en SHS que par les autres étudiants

Documents caractéristiques par modalité

La fonction characteristic_docs affiche les documents représentatifs d’une catégorie donnée (de répondants, d’une classe…).

Le calcul de la distance est fondé sur la métrique du Khi2 et mesure l’écart entre le profil d’un document et le profil moyen du document de la catégorie. Ce critère a tendance à favoriser les documents longs car plus les documents contiennent de « mots », plus ils ont de chance de contenir de « mots » communs, et donc de se rapprocher du profil moyen.

Figure 14 : Réponses modales

(Source EuroBroadMap, 2009)

La réponse contenant les mots rich et developed est la plus représentative des étudiants en SHS interrogés en Chine (distance du Khi2 à la distance moyenne du groupe la plus petite = 8.591)

Recherche de co-occurrences

Cherche les termes co-occurrents à un ou plusieurs termes (mais pas entre ces termes) pour l’ensemble du corpus ou par sous partie avec la fonction cooc_terms.

Figure 15 : Cooccurrences à romantic dans l’ensemble du corpus

  (Source EuroBroadMap, 2009)

Parmi les réponses contenant le romantic, le mot mysterious représente 1,36% de l’ensemble des occurrences. 38% des occurrences du mot mysterious sont citées quand le mot romantic est aussi donné dans les réponses

Le mot advanced, est lui beaucoup moins employé dans les réponses quand romantic a été cité.

De la même façon, on peut rechercher les cooccurrences d’un terme par sous partie de corpus (selon les modalités d’une variable qualitative par exemple).

Figure 16 : Cooccurrences au mot romantic par domaine d’étude

(Source EuroBroadMap, 2009)

Fréquence de termes

On choisit un ou plusieurs termes pour lesquels on veut connaître leur fréquence et leur spécificité (ici leisure) par document ou sous-corpus (si on utilisé la fonction combine_terms, il faudra indiquer la forme racine ou lemme).


Figure 17 : Fréquences du mot leisure par domaine d’étude

Le mot leisure a été cité 36 fois ; il représente 1.71% des mots cités par les étudiants en Art. 33,3% des occurrences du mot leisure sont issues de réponses d’étudiants en Art.

Analyse des correspondances (AFC) sur un tableau lexical agrégé (TLA)

La fonction corpus_ca permet d’effectuer une AFC sur un TLA pour structurer l’ensemble des « mots » en fonction des caractéristiques des étudiants et de répondre à la question Qui dit quoi ? Les aides à l’interprétation « classiques » (valeurs propres, contributions, coordonnées, …) sont stockées dans un objet (ici resTLA) que l’on va pouvoir exploiter avec l’interface explor (basée sur Shiny).


On choisit les variables (ici ville, domaine d’étude, sexe, nombre de langue parlées et niveau d’éducation du père) pour créer le tableau de contingence (TLA) croisant les mots du corpus et les modalités des variables qualitatives.

On pourra interpréter plus finement les proximités graphiques entre les mots et les caractéristiques individuelles en recourant au calcul des termes spécifiques (vu plus haut) et afficher les réponses les plus contributives aux axes dans la partie suivante.

Figure 18 : Ouverture de l’interface explor dans RStudio

Les valeurs propres sont affichées dans le premier onglet. Ouvrir l’onglet Graphique pour afficher les plans factoriels et l’onglet Données pour les aides à l’interprétation axe par axe. 

Figure 19 : Paramétrage de l’affichage des plans factoriels dans Shiny

 

Ici les variables (catégories) sont des éléments actifs, il faut décocher l’option Modalités supplémentaires. On peut choisir d’afficher les termes les plus contributifs (attention utiliser le point comme décimale).

On peut exporter les éléments du graphique 



Figure 20 : Plan 1-2 issu de l’AFC sur le TLA (explor)

 (Source EuroBroadMap, 2009)

Le plan factoriel issu de l’analyse permet d’observer la position réciproque des mots et des caractéristiques des répondants variables et d’interpréter les proximités.

On se sert du Zoom et on peut déplacer les mots et optimiser la lecture

On s’attache également à regarder les contributions (Contrib) et qualités de représentation (Cos2) axe par axe (Onglet Données)

Figure 21 : Aides à l’interprétation des axes factoriels (explor)

Il faut fermer la fenêtre Shiny pour pouvoir lancer de nouvelles commandes dans RStudio.

Afficher les documents les plus illustratifs des axes

Il suffit d’indiquer le numéro de l’axe souhaité dans la fonction extreme_docs ; R.temis affichera les documents aux extrémités de l’axe ce qui simplifie sa lecture.


Figure 22 : Documents aux extrémités de l’axe

(Source EuroBroadMap, 2009)

Cas 2 : Textes « longs » regroupés dans un répertoire et fichier .csv associé

Quand le corpus correspond à un ensemble de documents plus « longs » comme des chapitres d’ouvrages, des entretiens, des articles … et que l’on possède aussi des caractéristiques sur ces corpus, il faut organiser les fichiers comme suit :

Les différents documents constituant le corpus sont des fichiers texte (.txt) et doivent être placés dans un seul répertoire ne contenant que ces fichiers.

Les caractéristiques (métadonnées) sur ces documents sont stockées dans un fichier de type « tableur » mais il faudra respecter l’ordre des lignes du tableau qui doit correspondre à l’ordre des différents documents dans le répertoire.

Dans le deuxième exemple que nous allons utiliser ici, on veut analyser un corpus de 96 présentations de masters de sociologie en France (variable textuelle). Ce corpus a été préparé par Gizem Inan, Natalia Safonova, Rosita Sandou, et Diane Sicre, dans le cadre du Master Sociologie d’enquête (Faculté des Sciences Humaines et Sociales de la Sorbonne) grâce à des données trouvées sur le web ; nous tenons à les remercier ici. Pour chaque formation, on dispose de 4 métadonnées : statut (université, association ou école), région géographique où se situe le master (reg), type de formation (master professionnel ou master recherche : form), et spécialisation du master selon 8 grands thèmes (politique, général, travail, urbain, technologie, culture, genre, santé : them) et auxquels on a ajouté un identifiant num.

Figure 23 : Extrait du corpus MasterS (ici premier fichier) affiché dans un éditeur de texte



Figure 24 : Contenu du répertoire contenant les textes

Ici il y a 96 fichiers

Figure 25 : Tableau contenant les caractéristiques sur les textes

Le tableau contient 96 lignes

 

Importer un corpus constitué de textes « longs »

Avec la fonction import_corpus, spécifier le nom répertoire contenant les fichiers bruts et la langue du corpus.


Si on dispose de métadonnées, on importe le fichier .csv avec la fonction read.csv2 et on crée un objet R (ici don) puis on l’associe au corpus avec la fonction set_corpus_variables.


Découper les textes

On choisit un nombre de paragraphes qui correspondra au critère de découpage des textes en unités plus petites qui correspondront aux lignes du tableau lexical :


Figure 26 : Extrait du corpus MasterS

Les textes ont été découpés en documents de 3 paragraphes.

Visualiser les cooccurrences : le graphe de mots

La fonction terms_graph de R.temis génère un réseau de mots qui d’affiche dans une fenêtre igraph interactive. Les sommets/nœuds du graphe sont les termes/mots, leur placement dans l’espace graphique est déterminé grâce à un algorithme d’énergie ; les liens représentent les cooccurrences.


Figure 27 : Graphe de mots associé au corpus MasterS (igraph)

On peut déplacer les mots pour améliorer la visibilité et exporter le graphique.

 

Analyse des correspondances (AFC) sur un tableau lexical entier (TLE)

L’analyse factorielle des correspondances sur le tableau lexical entier (TLE) met en évidence des mots cooccurrents sur des plans factoriels. La lecture des mots les plus contributifs aux axes et les concordances permet d’identifier des champs lexicaux ou thématiques et/ou de justifier (ou non) la lemmatisation de certains mots.

Dans la pratique, on fait l’analyse des correspondances sur le tableau lexical entier en lançant la fonction corpus_ca sans spécifier de variables qualitatives.


 

Figure 28 : Plan 1-2 issu de l’AFC sur le TLE (explor) 

On peut sauvegarder le plan factoriel en objet vectoriel

Ici aussi il faut regarder les contributions dans l’onglet Données.

Nous allons voir dans la partie suivante qu’on peut exécuter une classification sur les premiers axes de l’AFC réalisée sur le TLE. La lecture des mots spécifiques des classes est plus simple à interpréter que les axes.

Classification ascendante hiérarchique sur les facteurs d’une AFC sur TLE

On indique le nom de l’objet r résultant de l’AFC sur TLE dans la fonction corpus_clustering.


Figure 29 : Choisir le nombre de classes à partir du dendrogramme

On doit sélectionner un nombre de classes avec la souris dans la fenêtre Plots de RStudio


Pour identifier une thématique par classe, on d’aide de la lecture des « mots » et des textes/réponses spécifiques par classe.

Figure 30 : “Mots” spécifiques par classe


Figure 31 : Documents spécifiques par classe

On peut aussi projeter cette variable de classe (métadonnée) sur le plan factoriel d’une AFC.

Classification ascendante hiérarchique sur un tableau lexical

En classant ensemble les unités de textes (si les textes ont été découpés) ou les textes contenant des mots co-occurrents, on peut repérer les thématiques du corpus.

Idem que la partie précédente mais spécifier dans la fonction corpus_ca le nom du corpus et le tableau lexical (ici le tableau lexical sans mots outils).


Pour aller plus loin…

Au vu des premiers résultats, il est souvent nécessaire de refaire des analyses complémentaires comme la création d’un sous-corpus pour affiner l’analyse, la suppression de mots) ou d’intervenir dans la lemmatisation.

Supprimer des mots du corpus


Créer un sous-corpus

On va créer un nouveau tableau lexical associé à ce nouveau corpus

Soit en ne gardant du corpus initial que les textes en fonction d’une modalité d’une variable qualitative (métadonnée) :


(Il faut ensuite si besoin redécouper le corpus en faire un nouveau tableau lexical.)

Soit en ne gardant ou en supprimant du corpus initial que les textes en fonction d’un terme/mot :



Intervenir dans la lemmatisation

Avec R .temis, il est possible de modifier le lexique issu de la lemmatisation automatique.

La fonction combine_terms remplace le terme tel qu’il est stocké dans le tableau lexical (ici dtmsmo) par un affichage spécifié dans un dictionnaire (ici dic) ; cette opération correspond à une lemmatisation.

On peut modifier le regroupement des mots et/ou de changer le terme racine (Term) dans le fichier.csv.


Figure 32 : Dictionnaire (dic) généré par la fonction dictionary

Il s’agit donc d’exporter le dictionnaire créé avec la fonction R.temis dictionary dans un fichier CSV, modifier ce dictionnaire avec un tableur type Excel puis l’importer dans R.temis


Exemple de modification de la lemmatisation sur le fichier dicl.csv (avec Excel)

On importe ensuite de fichier CSV dans R.


On pourra utiliser ce dictionnaire modifié (mots « tronqués » remplacés) dans les analyses et en particulier les sorties graphiques.