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

Documents pareils