Egrep, les expressions régulières

Egrep est le nom d'une commande permettant de rechercher une occurence dans un texte grâce aux expressions régulières. Sous windows, nous utilisons Cygwin pour utiliser cette commande.
Les expressions régulières sont un moyen simple de rechercher automatiquement des occurences précises. Contrairement à un simple ctrl+f les expressions régulières disposent de caractères spéciaux permettant de rechercher des items particuliers comme "n'importe quel caractère", "n'importe quel caractère jusqu'à une espace" etc.
L'exercice consistait à rechercher une série d'occurences à l'aide d'egrep.

» Exercice sur le père Duschene

En premier lieu, il fallait trouver des mots commençant par une chaine de caractères précise.

Ici, on recherchait tout mot commençant par "citoy". On utilise egrep "\bcitoy[a-z]*\b" duchn.txt. Egrep est le nom de la commande. Entre guillemets, le motif rechercher. Enfin, duchn.txt le fichier sur lequel porte la recherche. Le plus intéressant est bien sûr le motif. \b désigne une frontière de mot : on recherche quelque chose qui "commence" par citoy. [a-z] signifie n'importe quelle lettre, c'est à dire surtout pas une espace. L'étoile signifie que ce qui précède doit être trouvé autant de fois que possible. Enfin \b représente une frontière de mot. On utlise [a-z] plutôt qu'un point, qui signifie n'importe quel caractère, pour exclure une éventuelle espace.

La même méthode est utilisée pour trouver les mots commençant par "aristo" et "bougre".

Ensuite l'exercice demande de trouver les occurences qui "parlent des sans-culottes". Etant donné que seuls "sans-culotte", "sans-culottes" et 'sans-culotterie" sont à trouver, l'expression régulière egrep "\bsans-culotte[a-z]*\b" duchn.txt fonctionne très bien.

Point suivant : trouver tous les mots commençant par une majuscule. Dans ce texte, les majuscules ont été codées de manière particulière : par une étoile devant la lettre en question. La seule difficulté étant donc d'échapper cette étoile recherchée, puisque l'étoile signifie "le caractère précédent autant de fois que possible" pour egrep. egrep "\*[a-z]*\b" duchn.txt" est la réponse.

Ensuite, il nous fallait trouver tous les mots finissant par "er". Rien de plus compliqué que les mots commençant par X du début de l'exercice : egrep "\b[a-z]*er\b" duchn.txt

Un mnimimum de réflexion morphologique est nécessaire à partir d'ici. On demande tous les mots qui "parlent de danger". Il faut donc trouver les différentes flexions du radical qui produit le champ lexical du danger. Dans le cas de "danger" il n'y en a qu'une seule : danger, dangers, dangereux... egrep "danger[a-z]*\b" duchn.txt

Pour trouver les mots qui parlent de "patrie" ce n'est pas aussi évident. Il faut prendre en compte deux flexions "patri" et "patrio" (le mot patrie d'un côté, et les dérivés de l'autre : patriotique...). "Patri-" seul ne fonctionne pas car il faut écarter "patriarche" par exemple de la recherche. egrep "patri(e\b|o[a-z]*\b) duchn.txt D'une part on recherche "patrie" exactement, d'autre part "patrio"+n'importe quelle lettre n'importe quel nombre de fois, jusqu'à la frontière de mot.

Même type d'exercice avec "liberté". Deux radicaux sont possibles : "libr" et "liber". egrep "lib(r|er)[a-z]*\b" duchn.txt

Ce point-ci est un peu différent. On nous demande les occurences parlant de "temps". Or, ce mot n'est utilisé que dans un seul sens dans le texte : celui d'époque. Les temps anciens, le bon temps, le temps est venu de prendre les armes... En ce sens, "temps" ne peut avoir qu'une seule forme : egrep "\btemps\b" duchn.txt

Maintenant il faut chercher ce qui parle de "république", ce qui pose un problème puisque l'encodage du "é" fait défaut. Problème facilement résolvable en remplaçant ce "é" par un point, pour n'importe quel caractère. Deux radicaux sont possibles : "républic" et "républiq". egrep "r.publi(q|c)[a-z]*\b" duchn.txt

Avant dernier-exercice : les mots parlant de trahisons. Traitre, trahison, traitrise... Deux radicaux sont possibles : "traitr" et "trahi". egrep "(\btraitr[a-z]*\b|\btrahi[a-z]*\b)" duchn.txt

Et voilà le dernier exercice ! =D Il faut cette fois-ci trouver toutes les formes négatives. On cherchera donc : "ne" ou "n'" + n'importe quel mot n'importe quel nombre de fois + "pas". egrep "((\bne\b)|(n'))?(\w+)*(\bpas\b) duchn.txt




» Exercice sous Antconc

Le même exercice était à effectuer sous le logiciel Antconc. La procédure étant sensiblement la même, les explications n'ont pas besoin d'être répétées. Voilà seulement quelques captures d'écran.













» Exercice sur le dictionnaire

Il s'agit ici d'exercices de morphologie sur un fichier de type dictionnaire, contenant une liste de mots.

Le fichier comporte 136250 mots. 492 mots se terminent par -able et 363 mots se terminent par -eux. On utilise les commandes suivantes : $ egrep ".*able\b" dico.txt -c et $ egrep ".*able\b" dico.txt -c Le motif se décompose comme suit : le point indique n'importe quel caractère, l'étoile autant de fois que possible, "able" ou "eux" le suffixe recherché et enfin \b pour frontière de mot. Le motif c permet de compter le nombre de fois qu'apparait le motif.
La plupart des mots trouvés sont des ajectifs, cependant il y a des exceptions dans les deux cas : table, jeux, adieux, yeux...

Ensuite il faut trouver les mots se terminant par -able ou -ible. Voici la commande : $ egrep ".*(i|a)ble\b" dico.txt Pas de différence avec précédemment, mis à part l'utilisation de (i|a) qui permet de trouver l'une OU l'autre des occurences.