Ce document montre comment interroger et manipuler la base Lexique hors-ligne avec le logiciel R

Note: Il fait parti du cours Programmation pour les Sciences Cognitives. Merci de signaler d’éventuelles erreurs à

Installation

  1. S’ils ne sont pas déjà installés sur votre ordinateur, vous devrez installer les deux logiciels (en acceptant les options par défaut):

  2. Démarrer le programme Rstudio puis, dans l’onglet Console situé dans la fenêtre en bas à gauche, copier la ligne suivante puis appuyez sur ‘Entrée’

    install.packages(c('rjson', 'tidyverse'))

    Laissez RStudio se débrouiller (mais vous devrez peut-être sélectionner un serveur).

    Puis créez un nouveau projet (Menu File/New Project/New Directory/New project) que vous nommerez ‘Lexique’.

    Vous êtes prêt ! Vous n’aurez plus jamais à refaire ces étapes.

Chargement de la table lexique

Tout se déroule dans le logiciel RStudio.

Dans le menu File, ouvrez le projet lexique créé dans la section précédente (Après un redémarrage de RStudio, vous pouvez utiliser le menu File/Recent Projects pour retrouver ce projet).

Recherche de mots

Supposons que vous vouliez extraire les lignes de la table lexique correspondant, par exemple, aux mots bateau, avion, maison, arbre.

Créez un bloc de code (Ctrl-Alt-I) et copiez-y le code suivant :

items <- c('bateau', 'avion', 'maison', 'arbre')

selection <- subset(lexique, ortho %in% items)

head(selection)

Exécutez ce code (Ctrl-Shift-Enter). La variable selection doit contenir les lignes pertinente. Vous pouvez inspecter son contenu en cliquant sur son nom dans l’onglet Environment situé dans la fenêtre en haut à droite de RStudio.

Pour sauvegarder les résultats obtenus dans un fichier, exéctuez la commande suivante:

write_tsv(selection, 'selection.tsv')

Cela doit créer un fichier selection.tsv dans le répertoire du projet (lexique).

Notez que les fichiers ayant l’extension tsv (tab-separated-values) peuvent être ouverts avec Excel, ou OpenOffice Calc, ou même avec n’importe quel éditeur de texte. Note: le package readr de R fournit aussi des fonctions write_excel_csv et write_excel_csv2 qui peuvent intéresser certains.

Si vous avez une liste de mots plus longue, il serait fastidieux d’écrire la ligne items <- .... Plus simplement vous pouvez utiliser:

items = scan(what='characters')

Et coller la liste de mots. Pour finir la liste, entrez une ligne vide (en appuyant deux fois successivement sur la touche Entrée), puis, à nouveau:

selection <- subset(lexique, ortho %in% items)

Comme la fonction scan permet aussi de lire la liste dans un fichier externe, si vous avez une liste de mots dans fichier liste.txt, vous pouvez extraire les lignes de lexique qui contiennent spécifiquement ces mots avec le code suivant:

liste <- scan('liste.txt', what='characters')
selection <- subset(lexique, ortho %in% liste)

Sélection par critères

Supposons que vous vouliez sélectionner tous les noms de 5 lettres, singuliers, de fréquence lexicale (films) comprise entre 10 et 100. Voici la ligne magique:

selection = subset(lexique, cgram=='NOM' & nombre != 'p' & nblettres==5 & freqlivres > 10 & freqlivres < 100)
head(selection)

Le symbole & signifie ‘et’. L’expression nombre != p signitif que la valeur dans la colonne nombre ne doit pas être p.

Sélection par “pattern”

Les expressions régulières

Les expressions réulières, ou regex, sont des “patterns” qui permettent de rechercher des mots ayant certaines propriétés. Par exemple n’importe a.b désigne un mot contenant un a et un b séparés par une lettre quelconque. Voici d’autre exemples:

  • ^maison$ : recherche le mot “maison” exactement
  • ^anti : recherche tous les mots commençant par “anti”
  • ^(jour|nuit|matin|soir)$ : “jour” ou “nuit” ou “matin” ou “soir” (permet de rechercher une liste de mots)
  • ion : recherche les mots qui contiennent la chaine “ion” dans n’importe quelle position
  • ion$ : mots se terminant par “ion”
  • ^pr : mots commençant par “pr”
  • ^p..r$ : mots de quatre lettres commençant par “p”, finisant pas “r”
  • ^p.*r$ : mots commencant par ‘”p’ et finissant par “r”
  • [aeiou][aeiou] : mots contenant 2 voyelles successives
  • ^[aeiou] : mots commençant par une voyelle
  • ^[^aeriou] : mots ne commençant pas par une voyelle

Il existe de nombreux tutoriaux sur les regex sur le web, notamment http://regextutorials.com/intro.html

Une expression régulière décrit un automate de transitions à états finis. Le site https://regexper.com/ vous permet de visualiser l’automate associé à une regex. Par exemple [ptk].*[aiou][aiou].?ion$ correspond à l’automate fini:

Recherches dans R avec grepl

R permet d’effectuer des recherches par pattern grâce à la fonction grepl. La syntaxe est grepl(regex, variable) pour rechercher les lignes où la variable “matche” la regex (Voir la doc R de grepl.

Cette fonction permet de localiser les lignes qui ‘matchent’ une expression, ou bien, en la niant avec le signe !, de supprimer des lignes qui matchent un pattern.

Voici quelques exemples:

  • Pour obtenir tous les mots qui finissent par tion :
lexique %>% filter(grepl("tion$", ortho)) -> selection2
head(selection2)

Encore une fois, vous pouvez sauvegarder ces résultats avec:

write_tsv(selection2, 'mots-en-tion.tsv')
  • Pour lister tous les mots contenant un cluster de consonnes plosives, mais pas debut de mot:
lexique %>% filter(grepl('.[ptkbdg][ptkbdg]', phon)) -> selection3
head(selection3)
  • L’opérateur filterpeut être appeler plusieurs fois pour affiner progressivement la recherche.

    Par exemple, pour obtenir tous les mots de 8 lettres qui ne finissent pas ent:

lexique %>% filter(nblettres == 8) %>% filter(!grepl("ent$", ortho)) -> selection4
head(selection4)