Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
restricted:tp1 [2018/04/03 09:34] – edauce | restricted:tp1 [2019/04/24 00:27] (Version actuelle) – edauce | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ===== TP1 ===== | ||
+ | |||
+ | Le TP sera réalisé en python 3. | ||
+ | |||
+ | La librairie '' | ||
+ | [[https:// | ||
+ | |||
+ | <code python> | ||
+ | import re | ||
+ | </ | ||
+ | ==== 1. Expressions régulières ==== | ||
+ | |||
+ | === Exercice 1.1 : recherche de motifs === | ||
+ | |||
+ | La recherche dans un texte nécessite de définir un motif. Ce motif est défini dans une chaîne brute (qui n’interprète pas les caractères spéciaux). Une chaîne brute est préfixée par un '' | ||
+ | exemple : '' | ||
+ | |||
+ | Pour rechercher un motif '' | ||
+ | |||
+ | Nous cherchons dans le texte ''" | ||
+ | |||
+ | Testez l’exemple suivant : | ||
+ | |||
+ | <code python> | ||
+ | texte = "Un éléphant, ça trompe énormément!" | ||
+ | liste_mots = re.findall(r' | ||
+ | for i in range(len(liste_mots)) : | ||
+ | print liste_mots[i] | ||
+ | </ | ||
+ | |||
+ | Puis testez l' | ||
+ | Des portions de mots '' | ||
+ | |||
+ | Les " | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Modifiez l’expression régulière afin de reconnaître uniquement (sur cet exemple) le mot ''" | ||
+ | |||
+ | === Exercice 1.2 === | ||
+ | Voici un petit texte qu'on pourra améliorer à son goût : | ||
+ | < | ||
+ | "Il y a 2 mois, ce n'est pas toi qui a découvert cette vieille armoire, cachée sous la toiture.\n | ||
+ | Moi, je te dis que c'est bien moi, il y a 2 ou 3 mois." | ||
+ | </ | ||
+ | |||
+ | On demande d' | ||
+ | - L'un des mots ''" | ||
+ | - tous les mots contenant ''" | ||
+ | |||
+ | === Exercice 1.3 : Extraction === | ||
+ | |||
+ | Les parenthèses servent à mémoriser un élément. | ||
+ | Testez l’exemple suivant qui extrait l' | ||
+ | <code python> | ||
+ | import re | ||
+ | une_date = " | ||
+ | ma_date = re.findall(r' | ||
+ | print(' | ||
+ | print(' | ||
+ | print(' | ||
+ | </ | ||
+ | |||
+ | Nous souhaitons modifier le format de date retournée par la commande système date. (il faut pour cela faire appel à la librairie os : '' | ||
+ | s = os.popen(" | ||
+ | par exemple '' | ||
+ | |||
+ | En extraire les différents éléments pour afficher : | ||
+ | |||
+ | '' | ||
+ | Voici maintenant l' | ||
+ | |||
+ | === Exercice 1.4 : Reconnaître un nombre décimal === | ||
+ | Il s'agit d' | ||
+ | |||
+ | < | ||
+ | Depuis vendredi, les températures sur le nord du pays ont atteint des valeurs remarquables pour la saison (+8 à +11 °C par rapport aux normales), le seuil de chaleur (25 °C) étant souvent atteint. À Paris-Montsouris, | ||
+ | D' | ||
+ | Au cours du week-end prolongé, il a ainsi fait plus chaud sur une moitié nord qu'au sud. Plus précisément, | ||
+ | </ | ||
+ | (source : Météo France) | ||
+ | |||
+ | Pour chaque nombre extrait, on demande d' | ||
+ | |||
+ | === Exercice 1.5 : Chercher des mots dans un texte === | ||
+ | |||
+ | Soit un texte stocké dans le fichier texte (par exemple : {{https:// | ||
+ | Pour ouvrir le fichier dont le nom est fourni en argument, on utilisera la commande : | ||
+ | f = open(' | ||
+ | On demande à l' | ||
+ | Le script doit parcourir chaque ligne du fichier et afficher chaque ligne où le mot est présent en le mettant en valeur en l' | ||
+ | Conclure l' | ||
+ | le mot .... est présent ... fois dans .. lignes du fichier ... | ||
+ | le mot .... n'a pas été trouvé dans le fichier ... | ||
+ | |||
+ | === Exercice 1.6 : Traitement d'une archive de messages === | ||
+ | |||
+ | Il s'agit d' | ||
+ | (liste de messages à trouver dans '' | ||
+ | |||
+ | <note tip> | ||
+ | Voir : {{http:// | ||
+ | </ | ||
+ | |||
+ | - ouvrir un de vos fichier mails et parcourir ses lignes | ||
+ | - écrire les motifs nécessaires pour extraire | ||
+ | <note tip> | ||
+ | Attention ! le sujet peut comporter '' | ||
+ | </ | ||
+ | |||
+ | Voici un exemple : un extrait d'un message et l' | ||
+ | < | ||
+ | |||
+ | Received: by mail.egim-mrs.fr (Postfix, from userid 331) id 4143F220C4; Mon, 2 Nov 2004 10:30:39 +0100 (CET) | ||
+ | Date: Mon, 2 Nov 2004 10:30:39 +0100 | ||
+ | From: XXX YYY < | ||
+ | To: linux@nnx.com | ||
+ | Subject: Re: PHP et les directory | ||
+ | Message-Id: < | ||
+ | References: < | ||
+ | MIME-Version: | ||
+ | Content-Type: | ||
+ | charset=iso-8859-1 | ||
+ | Content-Disposition: | ||
+ | Content-Transfer-Encoding: | ||
+ | In-Reply-To: | ||
+ | User-Agent: Mutt/1.4i | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | 30 Expéditeur : XXX YYY < | ||
+ | 31 Destinataire : linux@nnx.com | ||
+ | 32 Sujet : PHP et les directory | ||
+ | </ | ||
+ | |||
+ | === Exercice 1.7 : Reconnaissance des hyperliens d'une page WEB === | ||
+ | |||
+ | Il s'agit d' | ||
+ | |||
+ | * récupérer le nom du fichier, | ||
+ | * l' | ||
+ | * appliquer le motif sur chaque ligne | ||
+ | * construire un dictionnaire contenant le couple (url, libellé) | ||
+ | * afficher le résultat de l' | ||
+ | |||
+ | < | ||
+ | |||
+ | L' | ||
+ | système de fichiers ---> systemes-fichiers.html | ||
+ | Démarrer (sous) Linux ---> demarrage-linux.html | ||
+ | Exemple d' | ||
+ | Installation d' | ||
+ | Le service d' | ||
+ | TP Extension du système ---> tp-extension-systeme.html | ||
+ | commandes utilisateurs ---> commandes-generales.html | ||
+ | installation par NFS ---> install-reseau.html | ||
+ | serveur X ---> x11r6-linux.html | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== 2 - Arbre de complétion ==== | ||
+ | |||
+ | Un algorithme de complétion est un mécanisme logique permettant d' | ||
+ | |||
+ | On utilise pour cela une structure de données arborescente, | ||
+ | |||
+ | Le but de cet exercice est de construire un arbre de complétion à partir de mots de vocabulaire, | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | === 2.1 tests === | ||
+ | Un arbre de complétion sera défini de manière récursive. Un nœud de l' | ||
+ | |||
+ | * fils : un dictionnaire de nœuds indexés par des caractères | ||
+ | * compteur : un entier valant : | ||
+ | * 0 si le mot n'est pas dans la base | ||
+ | * une valeur >0 indiquant le nombre d' | ||
+ | |||
+ | Vous devez : | ||
+ | |||
+ | * Créer une classe ArbreComplétion contenant les attributs mentionnés. | ||
+ | * Définir un constructeur qui crée un nœud vide. | ||
+ | * Définir la méthode '' | ||
+ | * Définir une méthode '' | ||
+ | |||
+ | Créez un arbre de complétion. Insérez les mots ''' | ||
+ | |||
+ | Écrivez ensuite une fonction '' | ||
+ | |||
+ | Améliorez votre fonction pour que les mots les plus courants apparaissent en premier dans la liste. | ||
+ | |||
+ | === 2.2 Vocabulaire complet === | ||
+ | Une fois que tout fonctionne, vous devez créer un arbre contenant l' | ||
+ | |||
+ | * ouvrez le fichier | ||
+ | * créez une liste de vocabulaire vide | ||
+ | * pour chaque ligne du fichier, ajouter à la liste de vocabulaire le premier mot de la ligne | ||
+ | * ajouter chaque mot de la liste de vocabulaire dans l' | ||
+ | * vérifiez que l' | ||
+ | |||
+ | |||
+ | |||
+ | |||