Bienvenue sur notre site !

Bienvenue sur le site de Clémentine Gross et Simon Couturier, réalisé dans le cadre du cours de TD intitulé Maîtrise des systèmes d’exploitation et traitement des données et enseigné par Serge Fleury. Ce site a été divisé en trois parties, correspondant au trois types d'exercices que nous avions à réaliser durant ce semestre.

Pour effectuer ces exercices, nous avons dû utiliser deux logiciels : Cygwin et Emacs, disponibles ci-dessous. Cygwin permet d'émuler un système Unix sur une machine tournant sous Windows, ce qui nous a permis de découvrir l'univers sombre mais quasiment sans limite d'un environnement exclusivement constitué de lignes de code. Emacs , quant à lui, est un éditeur de texte permettant, entre autre, d'éditer des macros (= Editor MACroS).
Ce travail nous a permis de nous familiariser avec des outils utilisés en Traitement Automatique du Langage, et ceci par le biais d'éléments tels que les expressions régulières.

portfolio

Cygwin


portfolio

Emacs


Partie 1

Pour cette première partie des exercices, vue en début de semestre, nous avons travaillé sous Cygwin et découvert différentes commandes Unix élémentaires (cd, ls, mkdir etc.). Cette page explique donc l'utilisation de ces commandes.

    Exercice 1 (touch, emacs, less, ls)



    • Je me place tout d'abord dans mon répertoire de travail à l'aide de la commande cd


    • Pour créer un fichier premiertexte contenant une ou deux phrases, on utilise la commanche touch suivie du nom à donner au fichier et son extension !


    • Je suis ensuite allée remplir les 2 lignes manuellement.
    • On visualise le contenu de premiertexte sans l'éditer à l'aide de la commande cat


    • On peut vérifier la taille de premiertexte avec la commande ls -l (l'option -l affiche des informations sur la nature des fichiers)


    • Ici le fichier fait 109 octets.
    • Si on essaie d'éditer PREMIERTEXTE avec la commande less,


    • on constate qu'il est impossible de réaliser cette tâche parce que le fichier est introuvable. Effectivement, on demande d'éditer un fichier nommé en MAJUSCULES alors que le nôtre est en minuscules.

    Exercice 2 (cp, ls, mv)



    • On doit créer une copie du fichier premiertexte. On utilise alors la commande cp suivie du nom du fichier à copier (= fichier source), lui même suivi du nom donné à la copie (= fichier cible).



    • On veut maintenant comparer la taille de ces fichiers. On doit pour ce faire, utiliser la commande ls suivie de son option -l, ce qui donne alors des informations sur tous les fichiers du répertoire courant.



      Les deux fichiers qui nous intéressent, premiertexte et double font tout deux 109 octets.
    • On renomme maintenant le fichier double en introduction, avec la commande mv. On lui donne donc en premier le nom du fichier à renommer, et ensuite, le nouveau nom qu'on veut lui donner.



    • La différence qu'il y a entre mv double introduction et cp double introduction est que cette dernière commande sert à copier, non à renommer. La première commande prend le premier argument et le renomme en ce qu'on lui donne en deuxième argument, on a donc le même fichier avec un nom différent. La deuxième commande prend ce même argument mais le copie avec un nom différent, on a donc cette fois deux fichiers identiques.

    Exercice 3 (mkdir, mv, cp, ls, cd)



    • On crée un nouveau répertoire (ici essai/) avec la commande mkdir



    • On déplace le fichier introduction vers le répertoire essai/ avec la commande mv



    • D'abord, avec cp, on prend premiertexte et on en fait une copie



      Puis, avec mv, on déplace l'élément dans le répertoire essai/



    • La commande ls --color affiche une liste (colorée selon la nature du fichier) de ce que contient essai/



    Exercice 4 (rmdir, cd, rm)



    • On essaie de supprimer le répertoire essai/ avec la commande rmdir


    • Mais le résultat est nul : il est impossible de supprimer un répertoire tant que celui-ci contient des fichiers !
    • Situons nous donc dans le répertoire essai/ avec cd et supprimons les fichiers contenus à l'intérieur à l'aide de la commande rm




    • Puis le second :

    • Maintenant que le répertoire essai/ est vide, en remontant au niveau supérieur de l'arborescence, nous pouvons le supprimer




    Exercice sur ls



    • La commande ls permet d'afficher le contenu du répertoire /usr/local/
    • Pour pouvoir vérifier la taille de .bashrc on utilise la commande ls -l


    • Pour connaître l'utilisation de l'option -R de la commande ls, on utilise la commande man


      Voici un aperçu du résultat :

      Et voici ce qui nous intéresse précisément :

      La commande ls -R liste les sous-répertoires de manière récursive.
    • Par défaut, les fichiers et répertoires sont classés par ordre alphabétique.


      Ce critère peut être changé par les arguments de l'option --sort (par extension avec -X, taille avec -S etc.)

    • La commande ls-l affiche le contenu du répertoire courant en donnant des informations sur la nature des fichiers :
      Ce qui commence par "-" est un fichier, par "d" un répertoire ;
      et si le 3ème caractère est "x" il s'agit d'un programme.

Partie 2

    Jokers et expressions régulières



    Voici un petit rappel sur les expressions régulières et leurs opérateurs > ici <

    • On peut effacer en une seule ligne les fichiers essai1 essai2 essai3 et essai4 avec la commande rm

    • Pour regrouper les fichiers avec un suffixe .c dans un répertoire que j'appelerai C/ j'utilise les commandes mkdir et mv

    • Pour regrouper dans un répertoire Rangement/ tous les fichiers dont le nom contient un caractère minuscule suivi d'un caractère majuscule :

    • Pour regrouper dans un répertoire Rangement/ tous les fichiers dont le nom contient trois voyelles à la suite :

    • On voudrait afficher la liste des fichiers dans /bin dont le nom commence par «a» et dont la deuxième lettre est «s» ou «t» :


    • Pour afficher la liste des fichiers dans /bin dont le nom contient «un» et se termine par «t» :

    • Pour afficher la liste des fichiers dans /bin dont le nom contient «gre» ou «st» :

    • Pour afficher la liste des fichiers dans /bin dont le nom contient exactement deux lettres «m» :

    • Pour afficher la liste des fichiers dans /bin dont le nom contient au moins deux lettres «m» :

    • Pour afficher la liste des fichiers dans /bin dont le nom contient au moins quatre caractères et aucun chiffre :

    • Pour afficher la liste des fichiers dans /bin dont le nom est constitué de deux lettres exactement :

    • Pour afficher la liste des fichiers dans /bin dont le nom commence et finit par un chiffre :

    • Pour éliminer les lignes vides dans un fichier :

    • Pour éliminer les lignes ne contenant que des blancs :

    Exercices sur Germinal de Zola



    • Pour trouver le nombre de fois où le mot «mine» apparaît dans chaque chapitre de la première partie de Germinal, on utilise la commande de filtrage egrep suivie de l'option -c

    • Pour trouver de lignes blanches dans zola1.txt :

    Exercices sur head et tail



    • Pour afficher les 15 premières lignes du fichier zola1.txt, on utilise la commande head suivie de l'option -n indiquant le nombre de lignes que l'on veut afficher à préciser

      Fichier résultat

    • Pour afficher les 15 dernières lignes du fichier zola1.txt, on utilise la commande tail -n

      Fichier résultat

    • Pour afficher toutes les lignes à partir de la quinzième du fichier zola1.txt, on utilise la commande tail -n et on précède du signe "-" le numéro de la ligne à partir de laquelle on veut une sélection

      Fichier résultat

    • Pour afficher les lignes 15 à 20 du fichier zola1.txt, on utilise les commandes head et tail

      Fichier résultat


    • Pour récupérer les lignes 5 à 9 d'un fichier de 12 lignes :

    • Pour afficher la cinquième ligne d'un fichier,

      Pour n'afficher que la cinquième ligne d'un fichier, on utilise d'abord de la commande head -5 pour afficher les 5 premières lignes du fichier; puis tail -1 pour n'afficher que la dernière des 5 lignes sélectionnées.

Partie 3

Dans cette dernière partie, nous avons travaillé sur « Corpus Prématurés », à l'aide d'Emacs et de la commande Unix egrep.
D'abord sous Emacs, en effectuant des opérations manuellement, puis en les reproduisant à l'aide de macros (dont le principe est d'effectuer une opération automatiquement et autant de fois que souhaitée, à la place de l'utilisateur), et enfin, en reproduisant les même commandes (ou du moins pour chercher les mêmes résultats) à l'aide de la commande de filtrage egrep.

Dans cette première subdivision, on utilise le menu de recherche de chaînes de caractères à l'aide d'expressions régulières pour réaliser les opérations

    Fichier de travail : p96.tab



    • Rechercher les fiches contenant une interrogation :

      Il faut ici utiliser le caractère "\" qui annule la fonction de meta caractères. Pour rechercher le caractrère "?", il faut donc désactiver sa fonction de base dans la recherche avec la commande nommée occur (commande de filtrage équivalente à egrep), soit "\?" pour trouver les interrogations :

      Résultat

    • Rechercher les fiches correspondant au bébé 12 :



      Explication complète



    • Rechercher les fiches correspondant au bébé 1 :

      Explication complète

    • Rechercher les fiches pour lesquelles le score médical est de 12 :

      Pour cette opération, on utilise l'expression régulière : 12[^0-9]*$
      Elle signifie que ce que l'on cherche doit se trouver en fin de ligne (caractère "$"), et ne pas avoir de caractère autre que "12", d'où l'utilisation du "^" qui indique qu'on "ne veut pas" ce qui le suit.

    • Faire de même pour un score de 10 et expliquer le résultat :

      Sur le même modèle que précédement, on utilise l'expression régulière : 10[^0-9]*$
      Les résultats non convenables, à savoir que certaines lignes ne conviennent pas (résultats également observables lors des premiers essais pour la question précédente), viennent du fait que certaines lignes comportent des tabulations à la fin. On doit donc indiquer après la commande occur qu'il peut y avoir des éléments entre le motif recherché et la fin de la ligne.

    Fichier de travail : p96.bal



    • Rechercher les fiches concernant les bébés 10 à 12 :



    • Rechercher les fiches concernant les bébés 10 et 12, c'est-à-dire sans 11 et 13 :



      Fichier résultat
    • Rechercher le nombre de bébés de 23, ..., 30 semaines :



      Fichier résultat
    • Rechercher les fiches du jour 0 pour lesquels le bébé est né à 28 semaines :



      Fichier résultat
    • Rechercher les fiches des bébés nés entre 23 et 29 semaines :



      Fichier résultat
    • Rechercher les fiches pour lesquels le bébé à la naissance faisait au moins 1000 grammes :



      Fichier résultat
    • Rechercher les fiches pour lesquels le bébé à la naissance faisait moins de 1000 grammes :



      Fichier résultat
    • Rechercher les fiches concernant les bébés 10 à 12 :



      Fichier résultat

Dans cette deuxième partie, on utilise les mêmes opérations, mais réalisées à l'aide de macros.



    Le principe de la macro : on montre à Emacs une fois ce qu’on veut qu’il fasse, on enregistre et on lance.

    Pour lancer une macro :
    o on peut d'abord couper la fenêtre/buffer (= zone de mémoire où Emacs stocke le texte de l’édition) en 2 pour pouvoir afficher le fichier résultat
    o puis se placer dans le minibuffer de saisie de commande (ou zone d’écho en bas de la fenêtre)
    o on débute la macro à l'aide du raccourci clavier Ctrl-X ( et la terminer avec Ctrl-X )
    o Alt-0 Ctrl-X E permet de réexécuter la dernière macro sur l'ensemble du fichier
    o pour acceder à l'éditeur de macro (pour la modifier par exemple dans le but de la réutiliser) on utilise Ctrl-X Ctrl-K


    Fichier de travail : p96.tab

    • Extraire les fiches contenant une interrogation :

      Sont ici listées les commandes effectuées pour créer les macros (lorsqu'elles sont suivies de ";;" et d'un commentaire en anglais, cela provient d'une option d'Emacs qui permet de lister les commandes contenues dans la macro).

      Split window : diviser la fenêtre en 2 pour afficher le fichier résultat
      Effacer le contenu du buffer d’en dessous
      Open file  : choisir
      Vider
      Aller dans le fichier sur lequel on travaille (au début)
      Ctrl-x ( : démarrage de la macro
      Ctrl-s
      Insertion du caractère recherché : ?
      Ctrl-a : aller en début de ligne
      Ctrl-space : poser un marquage
      Ctrl-e
      Alt-w : copier
      Ctrl-x o : changer de buffer
      Ctrl-y : coller
      Retour à la ligne
      Ctrl-x o : rechanger de buffer
      Ctrl-x ) : fermeture de la macro
      Alt 0 ctrl-x e : réexécution de la macro sur l'ensemble du fichier


      Fichier résultat

    • Extraire les fiches correspondant au bébé 12 :

      Début buffer
      Ctrl-x ( : début de la macro
      Alt-x search-forward-regexp : option permettant de faire une recherche en temps réel en "avançant" manuellement dans le texte
      Entrée
      ^12[0-9][0-9]
      RET ;; newline
      C-a ;; beginning-of-line
      C-SPC ;; set-mark-command
      C-e ;; end-of-line
      M-w ;; kill-ring-save
      C-x o ;; other-window
      C-y ;; yank
      RET ;; newline
      C-x o ;; other-window
      Ctrl-x ) : fin de la macro
      Alt 0 ctrl-x e : réexécution


      Fichier résultat

    • Extraire les fiches correspondant au bébé 1 :

      Ctrl-x ( : début de la macro
      M-x ;; execute-extended-command
      sea ;; self-insert-command
      ;; previous-line
      RET ;; newline
      ^1[0-9][0-9][^0-9] ;; self-insert-command
      RET ;; newline
      C-a ;; beginning-of-line
      C-SPC ;; set-mark-command
      C-e ;; end-of-line
      M-w ;; kill-ring-save
      C-x o ;; other-window
      C-y ;; yank
      RET ;; newline
      C-x o ;; other-window
      Ctrl-x ) : fin de la macro
      Alt 0 ctrl-x e : réexécution


      Fichier résultat

    • Extraire les fiches pour lesquelles le score médical est de 12 :

      /!\ Comme pour la partie précédente, cette macro comportait au départ une erreur, engendrant des mauvaises réponses dues à la présence de tabulation. L'expression était au départ "12$", ce qui - étant faux - a été remplacé par 12[^0-9]*$

      Ctrl-x ( : début de la macro
      M-x ;; execute-extended-command
      search-forward-regexp ;; self-insert-command
      DEL ;; delete-backward-char
      p ;; self-insert-command
      RET ;; newline
      12[^0-9]*$ ;; self-insert-command
      RET ;; newline
      C-a ;; beginning-of-line
      C-SPC ;; set-mark-command
      C-e ;; end-of-line
      M-w ;; kill-ring-save
      C-x o ;; other-window
      C-y ;; yank
      RET ;; newline
      C-x o ;; other-window
      Ctrl-x ) : fin de la macro
      Alt 0 ctrl-x e : réexécution


      Fichier résultat

    • Faire de même pour un score de 10 et expliquer le résultat :

      Ctrl-x ( : début de la macro
      <> ;; search-forward-regexp
      10[^0-9]*$ ;; self-insert-command * 10
      RET ;; newline
      C-a ;; beginning-of-line
      C-SPC ;; set-mark-command
      C-e ;; end-of-line
      M-w ;; kill-ring-save
      C-x o ;; other-window
      C-y ;; yank
      RET ;; newline
      C-x o ;; other-window
      Ctrl-x ) : fin de la macro
      Alt 0 ctrl-x e : réexécution


      Fichier résultat

    • Quelles fiches vont être extraites si l'on demande les fiches commençant par 13 ? Expliquer :

      Si on demande les fiches commençant par 13, il nous donnera aussi les fiches du bébé 1 (1+30... etc. dans le système de notation du document). Il faut donc faire comme précédement pour le bébé 12.

      Fichier résultat

    • Extraire les fiches correspondant aux bébés faisant au moins 1000 grammes :

      Pour cette question, c'est une formule plus longue qui est utilisée :
      [0-9][0-9][0-9][0-9][^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9]*$
      De cette façon, on simule les colonnes et les tabulations avec des expressions régulières.

      Fichier résultat

    Fichier de travail : p96.bal



    • Extraire les fiches concernant les bébés 10 à 12 :



      Fichier résultat

    • Extraire les fiches concernant les bébés 10 et 12, c'est-à-dire sans 11 et 13 :



      Fichier résultat

    • Trouver le nombre de bébés de 23, ..., 30 semaines :



      Fichier résultat

    • Extraire les fiches du jour 0 pour lesquels le bébé est né à 28 semaines :



      Fichier résultat

    • Extraire les fiches des bébés nés entre 23 et 29 semaines :



      Fichier résultat

    • Extraire les fiches pour lesquelles le bébé à la naissance faisait au moins 1000 grammes :



      Fichier résultat

    • Extraire les fiches pour lesquelles le bébé à la naissance faisait moins de 1000 grammes :



      Fichier résultat

    • Extraire les fiches rédigées par les infirmières 12 et 22 :



      Fichier résultat

    • Extraire les fiches concernant le bébé 10 et ne correspondant pas au jour 0 :



      Fichier résultat

Dans cette dernière subdivision de la 3ème partie, on travaille avec la commande de filtrage egrep

    Fichier de travail : p96.tab



    • Extraire les fiches contenant une interrogation :

      On doit "annuler" la fonction de méta-caractère du "?" par "\?"

    • Extraire les fiches correspondant au bébé 12 :

      egrep "^12[0-9][0-9]+" p96.tab

    • Extraire les fiches correspondant au bébé 1 :

      egrep "^1[0-9][0-9][^0-9]" p96.tab

    • Extraire les fiches pour lesquelles le score médical est de 12 :

      egrep "12[^0-9]*$" p96.tab

      Soit "un 12, suivi de tout sauf de chiffres, en fin de ligne".

    • Faire de même pour un score de 10 :

      egrep "10[^0-9]*$" p96.tab

      Idem avec "10".

    • Quelles sont les fiches qui vont être extraites si l'on recherche les fiches commençant par 13 ? Expliquer ? :

      Avec la formule : egrep "^13" p96.tab on trouvera, en plus des fiches du bébé 13, toutes les fiches qui commenceront par 13, même celle du bébé 1 qui, pour des raisons de système de notation du document, est suivie d'un 3.

    • Extraire les fiches correspondant aux bébés faisant au moins 1000 grammes :

      egrep "[0-9][0-9][0-9][0-9][^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9][0-9]+[^0-9]*$" p96.tab

      Comme pour la partie précédente, on simule les tabulations (que egrep ne reconnaîtrait pas tout seul), grâce à la formule [^0-9] (soit "ce qui n'est pas un caractère compris entre 0 et 9", donc pas un chiffre)

    Fichier de travail : p96.bal



    • Extraire les fiches concernant les bébés 10 à 12 :



      Fichier résultat

    • Extraire les fiches concernant les bébés 10 et 12, c'est-à-dire sans 11 et 13 :



      Fichier résultat

    • Trouver le nombre de bébés de 23, ..., 30 semaines :



      Fichier résultat

    • Extraire les fiches du jour 0 pour lesquels le bébé est né à 28 semaines :



      Fichier résultat

    • Extraire les fiches des bébés nés entre 23 et 29 semaines :



      Fichier résultat

    • Extraire les fiches pour lesquelles le bébé à la naissance faisait au moins 1000 grammes :



      Fichier résultat

    • Extraire les fiches pour lesquelles le bébé à la naissance faisait moins de 1000 grammes :



      Fichier résultat

    • Extraire les fiches rédigées par les infirmières 12 et 22 :



      Fichier résultat

Nous contacter

  


Pour toute question, vous pouvez nous contacter sur nos adresses mail personnelles :
clementinegross@gmail.com
eurimos@gmail.com