le sujet - Pierre Crescenzo
Transcription
le sujet - Pierre Crescenzo
UNIVERSITÉ DE NICE – SOPHIA ANTIPOLIS Licence MASS 2e année UFR FACULTÉ DES SCIENCES Traitements de données textuelles 2007-2008 Pierre Crescenzo, Jean-Pierre Lips et Nicolas Nobelis inspirés par Roger Rousseau Parc Valrose – BP 71 – F 06108 NICE Cedex 2 Séance de TP n◦ 10 de la semaine du 12 novembre 2007 Recherche dans le contenu des fichiers Mise en place Commencez par faire le ménage demandé à la fin du TP précédent si vous ne l’avez fait, sinon vous risquez de ne plus avoir assez de place sur votre disque. Créez votre répertoire de séance s10 sous ~/tp et placez-vous dedans. Téléchargez comme d’habitude l’archive de fourniture de cette séance dans votre répertoire de séance et décompactez-là. 1. Recherches de mots dans un fichier Les recherches à l’intérieur d’un fichier utiliseront l’une des commandes grep : fgrep, grep ou egrep, sachant qu’elles utilisent respectivement comme motif un mot, une Expression Rationelle Basique (ERB) ou une Expression Rationelle Étendue (ERE). Pour certains exercices, un seul type de motif convient, mais pour d’autres il existe plusieurs solutions qu’il ne faut pas hésiter à essayer. Certaines machines n’ont pas de version récente de ces commandes et ne reconnaissent pas les caractères iso-latin1 ; d’autres au contraire sont trop en avance et ne reconnaissent que les caractères codés en utf8 . Les chiffres donnés peuvent donc être différents de ceux constatés. 1.1. Recherches de villes ou de codes postaux dans le fichier VILLES Avec la commande more, examinez le début du fichier VILLES . On remarque que ce fichier contient deux ou trois champs séparés par le signe “:”. Le premier indique le nom des communes de France, le deuxième le code postal, le troisième est facultatif et peut contenir un nombre d’habitants. Avec les commandes grep et wc, trouvez le nombre de communes de France qui : exo01 : ont le mot “st martin” (283 réponses) ; exo02 : ont un code postal se terminant par 000 (379 réponses) ; exo03 : sont dans les Alpes-Maritimes (202 réponses) ; exo04 : ont le mot “st” et qui sont en Seine et Marne (77) (45 réponses) ; exo05 : ont un nom se terminant par ville ou villes ou villar ou villard ou villier ou villiers (1273 réponses) . 1.2. Recherche de mots dans un dictionnaire Avec la commande more, examinez le début du fichier MOTS-ascii . On remarque que ce fichier contient tous les mots de la langue française en lettres minuscules. Ce fichier ne contient que des caractères US-ASCII ; les lettres accentuées du français sont obtenues par les lettres suivies de l’accent circonflexe, grave, aigu, tréma (représenté par le signe “"”) et c-cédille (représentée par “c,”). De même, le fichier MOTS donne la même liste de mots mais avec les lettres accentuées en caractères iso-latin1 , tandis que le fichier MOTS-utf8 est le même fichier mais codé en utf8 . Selon les questions, il sera plus facile d’utiliser l’un ou l’autre de ces trois fichiers. Avec la commande grep trouvez les mots français qui satisfont les critères indiqués ci-après ; vérifiez les résultats avec more, et donnez leur nombre avec wc : réponses que vous devez trouver sont données entre parenthèses. Critères de sélection : exo06 : mots sans voyelle (a, e, i, o, u, y), accentuée ou non (72 réponses) ; exo07 : mots sans voyelle et de plus de 2 caractères (11 réponses) ; exo08 : mots avec un î (966 réponses) ; Séance de TP n◦ 10– Recherche dans le contenu des fichiers 2 Conseils. Vous pouvez utiliser le fichier MOTS-utf8 et dans ce cas, les commandes fgrep, grep ou egrep conviennent. Ou bien, vous utiliserez le fichier MOTS-ascii , mais dans ce cas, le caractère ^ est spécial avec grep ou egrep. Il faut utiliser fgrep ou protéger ce caractère avec \^ avec les autres grep. exo09 : exo10 : exo11 : exo12 : exo13 : exo14 : exo15 : exo16 : mots qui ont exactement une seule fois la lettre ’z’ (2494 réponses) ; mots contenant “ae” et “oe” (1 réponse) ; mots se terminant par “tion” (2317 réponses) ; mots formés par la concaténation de deux chaînes identiques, comme “gnangnan”, “froufrou” (69 réponses) ; mots commençant et se terminant par les trois mêmes caractères (142 réponses) ; mots ayant au moins 25 caractères (6 réponses) ; mots d’au moins 25 lettres, sans signe de ponctuation (tiret, apostrophe...) (1 réponse) ; mots ayant exactement 2 tirets qui ne se suivent pas et qui séparent des caractères (pas de tiret en début ou fin de mot) (455 réponses) . exo17 : À l’aide du fichier VILLES , donnez le nom de la 15e ville (par ordre alphabétique) de la région parisienne (départements 75, 77, 78 et 91 à 95) dont le nom est composé (contient un espace). 2. Pour les plus courageux... 2.1. Révision : transmission d’arguments et quoting Certains parmi vous n’ont pas encore bien compris la protection des métacaractères (quoting) et la transmission des paramètres à un script. Cet exercice va vous permettre de faire le point... • Syntaxe : afficheur ... • Ecrivez un script appelé afficheur qui affiche, sur des lignes différentes, le nombre d’arguments transmis et chacun des arguments entre deux doubles quotes avec son numéro. • Placez ce script dans votre répertoire ˜/bin . • Exécutez ce script avec les tests suivants et expliquez les résultats : > afficheur nombre arguments : 0 > afficheur tata titi toto nombre arguments : 3 arg1: "tata" arg2: "titi" arg3: "toto" > afficheur tata titi toto ;a nombre arguments : 3 arg1: "tata" arg2: "titi" arg3: "toto" bash: a: command not found > afficheur tata titi toto \;a nombre arguments : 4 arg1: "tata" arg2: "titi" arg3: "toto" arg4: ";a" > afficheur ’tata titi toto’ nombre arguments : 1 arg1: "tata titi toto" UNSA – Licence MASS 2e année Traitements de données textuelles Séance de TP n◦ 10– Recherche dans le contenu des fichiers 3 > afficheur ’tata | wc -c’ nombre arguments : 1 arg1: "tata | wc −c" > afficheur tata | wc −c 36 > afficheur \( -type f -name ’∗.c’ \) −o \( -name ’truc’ \) nombre arguments : 11 arg1: "(" arg2: "-type" arg3: "f" arg4: "-name" arg5: "∗.c" arg6: ")" arg7: "−o" arg8: "(" arg9: "-name" arg10: "truc" arg11: ")" > afficheur \(-type f -name ’∗.c’\)−o\(-name ’truc’\) nombre arguments : 5 arg1: "(-type" arg2: "f" arg3: "-name" arg4: "∗.c)−o(-name" arg5: "truc)" > touch allo achtung alors > afficheur ’a∗’ "a∗" a\∗ nombre arguments : 3 arg1: "a∗" arg2: "a∗" arg3: "a∗" > afficheur a∗ nombre arguments : 4 arg1: "achtung" arg2: "afficheur" arg3: "allo" arg4: "alors" Vous comprenez peut-être mieux comment la commande find reçoit ses paramètres et pourquoi il faut mettre des espaces entre-eux et protéger les caractères spéciaux du Shell, comme les parenthèses ou les ’;’. 2.2. Test d’appartenance d’un mot dans une liste • À partir du fichier VILLES , construisez avec la commande grep et Emacs un fichier VILLES.06 qui contient sur des lignes différentes tous les noms des communes des Alpes Maritimes. On supprimera les codes postaux et les signes ‘:’. • Écrivez un script est-dans-AM qui rend 0 comme code de retour, si le nom de ville donné en argument est dans les Alpes-Maritimes et 1 sinon. Suggestion : utilisez le fichier VILLES.06 et la commande egrep avec l’option -f. • Testez ce script avec les commandes : UNSA – Licence MASS 2e année Traitements de données textuelles Séance de TP n◦ 10– Recherche dans le contenu des fichiers 4 > est-dans-AM Cannes && echo oui || echo non oui > est-dans-AM Paris && echo oui || echo non non UNSA – Licence MASS 2e année Traitements de données textuelles