Recherche textuelle

Rechercher et remplacer dans un traitement de texte

Télécharger le fichier csv Cas.csv sur Pronote puis l'ouvrir avec LibreOffice

Il y a un problème d'encodage avec ce fichier

Certains caractères accentués, comme ô dans Côte D'Azur, ne sont pas reconnus

Entrez la commande CTRL+F ou Cmd+F (pour Find) et faire rechercher et remplacer Côte D'Azur (non reconnu) par Côte D'Azur, pour tous

Combien y-a-t-il d'occurrences ?

Corriger les erreurs

Recherche naïve

Télécharger sur Pronote le fichier texte golden_bug.txt

Ouvrir un environnement Python, télécharger le fichier Python sur Pronote ou ici recherche_motif.py

L'ouvrir et compléter la fonction positions(texte,motif) qui retourne sous la forme d'une liste, toutes les occurences du motif dans le texte

Exécuter la fonction sur le fichier golden_bug.txt et le motif "maintenant"

Combien d'occurrences ?

Chronométrer le temps mis par l'exécution de la fonction

Recommencer avec le même motif et le fichier texte don_quichotte_T1.txt

Algorithme de Boyer-Moore (règle du mauvais caractère)

Avec l'aide de votre cours implémenter la fonction creer_dico_motif(motif) qui crée le dictionnaire qui associe à chaque caractère non final du motif sa dernière occurence non finale

Avec l'aide de votre cours implémenter la fonction BM_MC(texte,motif,dico) qui retourne la liste des occurences du motif dans le texte avec la règle du mauvais caractère

Vérifier que vos fonctions passent les tests

Puis à l'aide de BM_MC(texte,motif,dico) rechercher le motif "maintenant" dans le texte golden_bug.txt, puis don_quichotte_T1.txt

Ensuite chrométrer l'exécution de BM_MC(texte,motif,dico) et comparer avec la recherche naïve

Recherche avec les outils de Linux

La commande find

Il s'agit de découvrir quelques outils du bash permettant de faire des recherches sur les fichiers d'une machine ayant un système d'exploitation de type Unix

D'une certaine manière l'ensemble des fichiers de l'utilisateur peut être considéré comme un texte et un critère de recherche comme un motif

On va commencer par s'intéresser à la commande find

  1. La commande find permet de chercher des fichiers (sans tenir compte de leur contenu ) répondant à certains critères

    Par exemple on cherche tous les fichiers texte contenu dans son espace de travail ~, dans ce cas on entre la commande

                    
                        find ~ -name '*.txt'
    
    

  2. Si on veut chercher tous les fichiers dont le nom contient le mot info

                    
                        find ~ -name '*info*' 
    
    

  3. Si on veut chercher toutes les images .png ou .jpg on va utiliser l'opérateur -or ainsi

                    
                        find ~ -name '*.png' or -name '*.jpg'
    
    

  4. On peut associer à une recherche l'exécution d'une commande

    Par exemple si on veut pour chaque fichier texte trouvé compter le nombre de lignes du fichier texte et afficher le résultat

                    
                        find ~ -name '*.txt' -exec wc -l {} ';'
    
    
  5. Pour avoir plus d'informations sur la commande find faire
                    
                        man find
    
    

Recherche avec les outils de Linux

La commande grep

On aimerait faire une recherche à l'intérieur des fichiers

On va utiliser pour cela à la commande grep qui nous permettra de sélectionner des lignes contenant un motif

  1. Créer un fichier texte fichier1.txt avec l'éditeur nano en entrant la commande

                    
                        nano fichier1.txt
    
    

    Ecrire les lignes puis faire CTRL X puis confirmer pour sauvegarder

                    
                        Un homme 
                        Des bonhommes
                        Des gentilhommes
                        Un livre
    
    
  2. Pour extraire du fichier fichier1.txt les lignes contenant le motif homme entrer la commande

                    
                        grep 'homme' fichier1.txt
    
    
  3. Si on veut que le motif soit considéré comme un mot entier alors on utilise grep avec l'option -w

                    
                        grep -w 'homme' fichier1.txt
    
    

    On observe alors que seule la première ligne sera sélectionnée

Recherche avec les outils de Linux

La commande cut

On va cette fois ci sélectionner des colonnes

On va utiliser pour cela à la commande cut

  1. On va télécharger un fichier .csv du site mathly.fr avec la commande wget,mais comme au Lycée on a accès au réseau Internet via un proxy, on utilise l'option -e avec paramètres use_proxy=on et http_proxy=10.0.0.1:3128

    
    wget -e use_proxy=on -e http_proxy=10.0.0.1:3128 http://www.mathly.fr/terminale_20_21.csv 
    
    
    

    Le fichier terminale_20_21.csv est enregistré dans le répertoire courant

    Pour afficher la première ligne du fichier terminale_20_21.csv (métadonnées)

    On entre la commande

                    
    head -n1 terminale_20_21.csv
    
    
  2. On veut sélectionner les lignes du fichier terminale_20_21.csv contenant le motif 'Numérique et sciences informatiques'

                    
        grep 'Numérique et sciences informatiques' terminale_20_21.csv
    
    
  3. On veut sélectionner les colonnes du fichier terminale_20_21.csv contenant la spécialité Numérique et sciences informatiques

    Il faut tenir compte des métadonnées

    Il faut sélectionner le champ numéro 2 (field) avec le délimiteur (;)

                    
    cut -d';' -f2 terminale_20_21.csv
    
    

    Le résultat de cette commande est affichée dans le terminal

    On aimerait conserver le résultat dans un fichier spe_terminale.txt

    On va rediriger la sortie non pas vers le terminal mais vers le fichier spe_terminale.txt

        
    cut -d';' -f2 terminale_20_21.csv>spe_terminale.txt 
    
    
  4. Quelle commande entrer pour sélectionner dans le fichier spe_terminale.txt uniquement les lignes contenant Numérique et sciences informatiques?
  5. Quelle commande entrer pour compter le nombre d'élèves qui font la spécialité Numérique et sciences informatiques en Terminale?