Cours 3 : Techniques de recherche avancées
<lgrobol@parisnanterre.fr>
Université Paris Nanterre
2024-03-11
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
Définition de critères de recherche pour des chaînes de caractères
Outils :
clg.txt
.*
)madeleine
reconnaît madeleine
mais pas Madeleine
France 2
reconnaît France 2
mais pas France2
ni France 3
Ils 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 » |
jolie?
matche joli
et jolie
coup?s
matche cous
et coups
, mais pas coupa
jolie*
matche joli
, jolie
, joliee
, jolieee
…jolie+
matche jolie
, joliee
, jolieee
…Exercice : que reconnaissent les expressions suivantes ?
pommes?
a?typique
lo*l
loo*l
lo+l
(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) |
\b |
frontière de mot (début ou fin de mot) | \bjour : journée mais pas ajouré |
\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énom
\bcap\b
\bcap
premier paragraphe\ndeuxième paragraphe
On a vu un certain nombre de métacaractères (les caractères avec une signification spéciale).
Pour les reconnaître littéralement (les déspécialiser), il faut les faire précéder d’un anti-slash \
:
\^machin
: reconnaît ^machin
3\.0
reconnaît 3.0
mais pas 310
$
, [
, ]
, (
, )
, *
, +
, ?
, {
, }
Et pour représenter un anti-slash ? Pareil
machin\\bidule
reconnaît machin\bidule
Le pipe indique une alternative :
machin|truc
reconnaît machin
et truc
.je|tu|nous
reconnaît je
, tu
et nous
.je|tu|[nv]ous
reconnaît je
, tu
, nous
et vous
.On les utilise le plus souvent avec des parenthèses
(m|r)aison
reconnaît maison
et raison
.(il|elle|iel)s?
reconnaît il
, elle
, iel
et leurs versions plurielles.Les crochets indiquent un ensemble de caractères à reconnaître :
[ab]
reconnaît une lettre : a
ou b
[a-c]
reconnaît les lettres de a
à c
[a-z]
reconnaît les lettres de l’alphabet en minuscules[a-zA-Z]
reconnaît aussi les majuscules*Exercice :
Que reconnaît :
[ab][ab]
[MmRr]aison
Écrire une expression régulière qui reconnaît 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
On peut les combiner avec les quantificateurs :
[aeiouy]+
reconnaît une suite de voyelles : a
, aa
, ae
, iey
…[^<]*
reconnaît une suite de caractères différents de <
Les parenthèses permettent de construire des groupes
(ab)+
reconnaît une suite de ab
: ab
, abab
, ababab
…([ab]c)+
reconnaît ac
, bc
, acac
, acbc
, bcac
…([aeiouy][^aeiouy])+
reconnait une suite de couples voyelle-consonne.Exercice : que reconnaissent les expressions suivantes ?
Dans le fichier clg.txt
:
^.évolution
.r?évolution
r
?r
?a
et finissant par er
?er
en fin de ligne ?Les accolades indiquent un intervalle de répétitions :
lo{1,3}ng
reconnaît long, loong et looonglo{3,}
reconnaît looong, loooong, etc.lo{3}ng
ne reconnaît 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 | … |
Notes :
\X
reconnaît le contraire de \x
\w
et \s
peut varier suivant les moteurs de regexFaire les quatre premiers niveaux sur : https://alf.nu/RegexGolf
?
après un quantificateur, on le rend lazy : il reconnait le minimum de caractères.Par exemple, si l’entrée est AHHHHHHHHH
:
AH+
reconnaît la plus longue suite de caractères : AHHHHHHHHH
AH+?
reconnaît la plus petite suite de caractères : AH
On peut utiliser des références numérotées pour rappeller le contenu d’un groupe :
(spam|egg), sausage and \1
reconnaît :
spam, sausage and spam
egg, sausage and egg
egg, sausage and spam