Chapitre 11 : Recherche textuelle⚓︎
Le but de ce chapitre est d'écrire des algorithmes qui permettent de savoir si un mot ou un groupe de mots est présent dans un texte ou, de façon plus générale, si un motif est présent dans une chaîne de caractères.
Dans tout le chapitre, on note \(m\) la longueur du motif recherché et \(c\) la longueur de la chaîne dans laquelle on recherche.
Si \(m \gt c\), il est évident que le motif ne peut pas apparaître dans la chaîne.
En général, \(m\) est très inférieur à \(c\). En effet, le motif recherché est généralement composé de quelques caractères, ou de quelques dizaines de caractères au maximum. La chaîne dans laquelle on recherche, en revanche, peut être composée de milliers de caractères.
Exercice : Correspondance entre motif et chaîne
Carnet Jupyter à télécharger ici
Corrigé disponible ici
Premier algorithme, dit naïf⚓︎
Algorithme naïf de recherche de la présence d'un motif
dans une chaine
Détermine si un motif
est présent dans une chaine
Entrées
motif
: chaîne de caractères
chaine
: chaîne de caractères
Sortie
booléen (Vrai si le motif
est présent dans la chaine
, Faux sinon)
Début
c
← longueur de la chaine
m
← longueur du motif
k
← 0
Tant que k
<= (c
- m
) faire
Si le motif
correspond aux caractères de la chaine
entre l'indice k
et l'indice (k
+ m
- 1) alors
Renvoyer Vrai
Fin Si
k
← k
+ 1
Fin Pour
Renvoyer Faux
Fin
Algorithme de Boyer-Moore-Horspool⚓︎
Algorithme de Boyer-Moore-Horspool
Détermine si un motif
est présent dans une chaine
Entrées
motif
: chaîne de caractères
chaine
: chaîne de caractères
Sortie
booléen (Vrai si le motif
est présent dans la chaine
, Faux sinon)
Début
decalage
← dictionnaire de décalages obtenu par prétraitement du motif
c
← longueur de la chaine
m
← longueur du motif
k
← 0
Tant que k
<= (c
- m
) faire
Si le motif
correspond aux caractères de la chaine
entre l'indice (k
+ m
- 1) et l'indice k
alors
Renvoyer Vrai
Fin Si
Si chaine[k + m - 1]
est une clé du dictionnaire decalage
alors
k
← k
+ decalage[chaine[k + m - 1]]
Sinon
k
← k
+ m
Fin Si
Fin Pour
Renvoyer Faux
Fin
Exercice : Algorithme de Boyer-Moore-Horspool
Carnet Jupyter à télécharger ici
Corrigé disponible ici