Cours 3 : Techniques de recherche avancées
<lgrobol@parisnanterre.fr>
Université Paris Nanterre
Permet de faire des requêtes dans Google Books :
Exemple : « vélocipède » vs « vélo » vs « bicyclette »
→ L’évolution des fréquences relatives des n-grammes dans le corpus
« the United States are » ou « the United States is »
*Le token * : remplace n’import quel mot.
Exemple : une colère * donne les fréquences de trigrammes dont les deux premiers mots sont « une » et « colère »
Expressions régulières = ER = RegEx
Outils :
Possible, mais moins pratique pour ce cours :
clg.txt.*) et « respecter la casse » (ou Aa)France 2 match France 2, mais pas France2 ni France 3Aa) madeleine match madeleine, mais pas MadeleineIls portent sur l’élément qui précède et indiquent une répétition
| Quantificateur | ? |
* |
+ |
|---|---|---|---|
| Signification | « 0 ou 1 fois » | « 0 ou plusieurs fois » | « 1 ou plusieurs fois » |
pl?eur matche peur et pleurecoup?s matche cous et coups, mais pas coupajolie* matche joli, jolie, joliee, jolieee…jolie+ matche jolie, joliee, jolieee…Exercice : que matchent les expressions suivantes ?
a?typiquepomm?eslo*lloo*llol+(Tester vos réponses dans un éditeur)
| Caractère | Sens | Exemple |
|---|---|---|
. |
n’importe quel caractère | p.re : pare, pire, père… |
^ |
début de ligne | ^Je (début de ligne) |
$ |
fin de ligne | informatique$ (fin de ligne) |
\n |
saut de ligne | a\n : a puis saut de ligne |
\t |
tabulation | a\t : a puis tabulation |
Exercices : à quoi correspondent ces expressions ?
Nom\tPrénomcap$br.n^cappremier paragraphe\ndeuxième paragrapheOn a vu un certain nombre de métacaractères (les caractères avec une signification spéciale).
Pour les matcher littéralement (les « déspécialiser »), il faut les faire précéder d’un anti-slash \ :
3\.0 matche 3.0, mais pas 310price: \$5 : matche price: $5^, [, ], (, ), *, +, ?, {, }Et pour représenter un anti-slash ? Pareil
machin\\truc matche machin\trucLa barre droite | indique une alternative :
machin|truc matche machin et truc.je|tu|nous matche je, tu et nous.je|tu|[nv]ous matche je, tu, nous et vous.On les utilise le plus souvent avec des parenthèses pour contrôler sa portée
(m|r)aison matche maison et raison.(il|elle|iel)s? matche il, elle, iel et leurs versions plurielles.Les crochets indiquent un ensemble de caractères à matcher :
[abc] matche un caractère qui est soit a, soit b, soit c[a-r] matche les lettres de a à r[a-z] matche les lettres de l’alphabet en minuscules[a-zA-Z] matche aussi les majuscules*Exercice :
Que matchent :
[ab][ab][MmRr]aisonÉcrire une expression régulière qui matche exclusivement :
moi, toi et soi.ci, si, ce et se.(Tester vos réponses dans un éditeur)
Avec un circonflexe au début : négation de l’ensemble
[^abc] matche tout sauf a, b et c[^0-9] matche tout sauf des chiffres[^A-Z] matche tout sauf des majuscules sans diacritiquesOn peut les combiner avec les quantificateurs :
[aeiouy]+ matche une suite de voyelles : a, aa, ae, iey…[^abc]* matche une suite de caractères différents de a, b et c.Les parenthèses permettent de construire des groupes
(ab)+ matche une suite de ab : ab, abab, ababab…([ab]c)+ matche ac, bc, acac, acbc, bcac…([aeiouy][^aeiouy])+ matche une suite de couples voyelle—(non-voyelle).Exercice : que matchent les expressions suivantes ?
vert(es)?(anti|pro)nucléaireWiki[a-z]+Wiki[a-z]*Dans le fichier clg.txt, combien trouvez-vous de matchs pour chacun des expressions régulières suivantes ? Que signifient-elles ?
.évolution.[a-zA-Z]évolution[^rR]évolutionLes accolades indiquent un intervalle de répétitions :
lo{1,3}ng matche long, loong et looonglo{3,} matche looong, loooong, etc.lo{3}ng ne matche que looongExercice : écrire une expression régulière qui reconnaît exclusivement lool, loool et looool.
| Classe | Signification | Équivalent ASCII |
|---|---|---|
\d |
un chiffre | [0-9] |
\D |
tout sauf un chiffre | [^0-9] |
\w |
les caractères alphanumériques et _ | [a-zA-Z0-9âàéèêëôûüù_] |
\W |
tout sauf les caractères alphanumériques et _ | [^a-zA-Z0-9âàéèêëôûüù_] |
\s |
une espace | espace, \t, \n… |
\S |
tout sauf une espace | … |
\b |
frontière de mot (début ou fin de mot) | \bjour : journée mais pas ajouré |
Notes :
\X reconnaît le contraire de \x\w, \s et \b peut varier suivant les moteurs de regex, suivant leur support d’Unicode. En particulier ils marchent mal dans VSCode.| Classe | Signification |
|---|---|
\p{L} |
une lettre |
\P{L} |
tout sauf une lettre |
\p{P} |
Une ponctuation |
\P{P} |
tout sauf une ponctuation |
\p{Lu} |
une lettre majuscule |
\p{Ll} |
une lettre minuscule |
Voir les détails sur MDN et la liste des propriétés du type « catégories générales » (≈ classes de caractères) du consortium Unicode.
Dans `clg.txt, combien y-a-t-il de mots :
r ?r ?a et finissant par er ?er en fin de ligne ?Faire les niveaux suivants sur https://alf.nu/RegexGolf
Faire le tutoriel et les 5 premiers puzzles de https://regexcrossword.com
Au tableau ! Voir aussi https://cyberzhg.github.io/toolbox/nfa2dfa
? après un quantificateur, on le rend lazy : il matche le minimum de caractères.Par exemple, si l’entrée est AHHHHHHHHH :
AH+ matche la plus longue suite de caractères : AHHHHHHHHHAH+? matche la plus petite suite de caractères : AHOn peut utiliser des références numérotées pour rappeler le contenu d’un groupe :
(spam|egg), sausage and \1 reconnaît :
spam, sausage and spamegg, sausage and eggegg, sausage and spam