Accéder au contenu principal

#Article 7 : Finalisation du script


Lors de notre dernier billet, nous avons cherché une manière d’obtenir les encodages de toutes les pages et de convertir en UTF-8 celles qui ne l’étaient pas déjà.
Nous avons vu en cours une manière plus simple et efficace que celle que nous avions trouvée :
egrep -io "charset=\"?[^\",]+\"?" ./PAGES-ASPIREES/$numerotableau-$compteur.html | cut -f2 -d"=" | tr -d '("|\\|>)' | sed "s/'//g" | tr '[a-z]' '[A-Z]'
L’expression régulière charset=\"?[^\",]+\"? permet de trouver l’encodage, puis nous nous débarrassons de « charset= » grâce au cut -f2 -d"=", ainsi que des éventuels guillemets (simples et doubles) encadrant l’encodage et autre signes (barres obliques et balises) avec tr -d '("|\\|>)' | sed "s/'//g" |, et enfin nous passons le résultat en majuscules avec tr '[a-z]' '[A-Z]'.  Nous  avons ajouté à cette commande les instructions |sort|uniq après avoir constaté que le charset était renseigné à deux reprises sur certains sites.


Nous avons également ajouté les dernières colonnes du tableau (cinq colonnes).

Tout d’abord, une colonne avec un lien vers un fichier texte montrant le motif cherché en contexte. Nous avons pour cela ajouté au début du programme une troisième variable à déclarer lors du lancement du script. La variable 3, que l’on renomme motif, contient le motif entre guillemets : en ce qui nous concerne, le mot « geek ». Voici la commande pour créer ce fichier :
egrep -i -C2 $motif "./DUMP-TEXT/$numerotableau-$compteur.txt" > ./CONTEXTES/$numerotableau-$compteur.txt
La fonction -C de la commande egrep permet d’afficher la ligne contenant le motif accompagné des n lignes précédentes et des n lignes suivantes (ici 2). Nous ajoutons -i  (pour case insensitive) afin d’avoir également les résultats pour « GEEK » en majuscules. Et nous enregistrons le fichier dans le répertoire « CONTEXTES ».

La colonne suivante affiche un lien vers un fichier html contenant chaque ligne où apparaît le motif, accompagnée, en bleu et italique, de la ligne précédente et de la ligne suivante. Les numéros de lignes sont précisés en bleu et le motif apparaît en rouge. Cette présentation plus visuelle du motif en contexte est permise par le programme Perl minigrep que nous avons téléchargé. Il s’utilise comme suit :
perl ./minigrep/minigrepmultilingue.pl "UTF-8"  ./DUMP-TEXT/$numerotableau-$compteur.txt minigrep/parametre-motif.txt;
mv resultat-extraction.html ./CONTEXTES/$numerotableau-$compteur.html;
Nous appelons le programme avec la commande perl puis nous donnons trois arguments dans cet ordre : encodage, fichier dans lequel le motif est recherché, fichier dans lequel nous avons écrit le motif à chercher. Le fichier de résultat est généré automatiquement avec le nom « resultat-extraction.html ». Nous le renommons pour qu’il ne soit pas écrasé à chaque tour de boucle et le déplaçons dans le répertoire « CONTEXTES ».

               La colonne suivante contient un lien vers un index : l’ensemble des mots et le nombre d’occurrences de chacun est présenté dans un fichier texte. Pour créer ce fichier, nous écrivons la commande suivante :
egrep -o "\w+" ./DUMP-TEXT/$numerotableau-$compteur.txt | sort | uniq -c | sort -gr > ./DUMP-TEXT/index-$numerotableau-$compteur.txt
L’expression régulière \w+ permet de lister tous les mots du fichier contenant le texte de la page web. Nous trions ces mots dans l’ordre alphabétique avec sort, nous n’affichons qu’une fois chaque mot, en ajoutant le nombre d’occurrences devant avec uniq -c et nous classons les résultats dans l’ordre décroissant d’occurrences avec sort -gr.

               L’avant-dernière colonne contient un lien vers un fichier texte listant les bigrammes, c’est-à-dire les couples de mots qui se suivent. Le fichier est généré ainsi :
egrep -o "\w+" ./DUMP-TEXT/$numerotableau-$compteur.txt > bi1.txt;
tail -n +2 bi1.txt > bi2.txt;
paste bi1.txt bi2.txt > bi3.txt ;
cat bi3.txt | sort | uniq -c | sort -gr > ./DUMP-TEXT/bigrams-$numerotableau-$compteur.txt
Nous créons un premier fichier temporaire avec la liste des mots, grâce à la regex vue plus haut. Nous créons ensuite un second fichier temporaire à partir du premier, dont nous retranchons la première ligne (donc le premier mot) grâce à la commande tail -n +2. Nous concaténons les lignes de ces deux fichiers grâce à la commande paste dans un troisième fichier qui contient donc les bigrammes. Nous retravaillons ce fichier en triant les résultats comme nous l’avons fait pour l’index.

               La dernière colonne affiche le nombre d’occurrences du motif. La commande est la suivante :
nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$numerotableau-$compteur.txt)
Nous créons une variable nbmotif qui contient le nombre d’occurrence (egrep -co) de notre motif.


L’ensemble des étapes permettant de remplir les colonnes du tableau est un long processus qui doit être répété à plusieurs reprises : deux fois pour les fichiers dont nous avons trouvé l’encodage dans le protocole http (pour les fichiers déjà en UTF-8 puis pour les autres après conversion), puis deux fois pour les fichiers dont nous avons trouvé l’encodage dans le code source (idem).
Afin d’alléger un peu le programme, nous avons donc souhaité créer une fonction. Voici comment créer une fonction en bash :
nom_de_la_fonction()
{
Instructions
}
Pour l’appeler, nous écrivons tout simplement le nom de la fonction ainsi que ses éventuels paramètres (sans parenthèses).
Nous avons rencontré un problème lors de la création de la fonction. En effet, la dernière étape de la fonction consiste à écrire dans le tableau. Ce tableau est désigné par son chemin relatif, dans lequel notre répertoire « TABLEAU » est désigné à l’aide d’une variable $2 qui sera passée en paramètre lors de l’appel du script. Cependant si nous écrivons une variable à l’intérieur d’une fonction, un paramètre est attendu pour la fonction elle-même. C’est pourquoi j’ai renommé « $2/tableau.html » en « $1/tableau.html » et passé $2 en paramètre lors de l’appel de la fonction.
Voici notre fonction :



J’appelle cette fonction avec la commande : constit_tableau $2;

Notre tableau est terminé ! Nous n’avons plus qu’à analyser  les données que le script nous a permis de recueillir. Cela fera l’objet des prochains billets !



Commentaires

Enregistrer un commentaire

Posts les plus consultés de ce blog

#Article 3 Présentation du projet

Le sujet de notre projet est le résultat d’un débat qu’il nous semble intéressant de relater ici. Lorsque nous avons constitué notre équipe, ayant tous les trois un intérêt commun pour le gaming - les jeux vidéos -, nous avions convenu que notre projet porterait sur ce thème. Le mot « gaming » en lui-même ne nous semblant pas présenter d’intérêt linguistique particulier - en dehors de l’emprunt linguistique qu’il représente -, il nous restait donc encore à préciser le sujet. Deux idées ont alors émergé. D’un côté, nous nous sommes intéressés à l’e-sport, une discipline en plein essor depuis la fin des années 1980 dont le statut est discuté (est-ce un sport ? Peut-on véritablement en faire son métier ?) et dont la popularité et l’image peuvent différer significativement d’un pays à l’autre. D’un autre côté, nous avons pensé à étudier les différents mots servant à désigner les personnes en lien, de près ou de loin, avec le monde des « gamers ». Les mots « geek »

#Première étape du projet : Création du corpus

Rappel du mot d’étude : geek Rappel des langues étudiées : français, anglais, allemand, italien, japonais L’analyse linguistique que nous comptons réaliser concernant le mot geek sur le web se fonde sur un corpus que nous allons construire. Mais avant de s’intéresser à la partie informatique du problème, il convient d’établir les limites et la nature de ce fameux corpus multilingue.  Réflexion sur le corpus : Premièrement, nous souhaitons que les urls sélectionnées aient été créées au cours des cinq dernières années. La raison de ce choix se base sur le fait que nous souhaitons réaliser une étude synchronique du mot geek et non pas diachronique. Nous pensons qu’une période de cinq ans représente une durée suffisamment longue pour avoir de nombreuses données, tout en limitant les risques de biais que représentent les stéréotypes qui circulaient sur les geeks par le passé tels que “les geeks sont des personnes asociales qui restent enfermées toute la jo

#Article 10 : Création du Site Web

Ce dixième et dernier article du blog aura pour objet la création de notre site web associé au projet. Nous avons choisi une mise en forme personnalisée, sur la base d'un modèle trouvé en ligne, et, ayant tous les trois quelques connaissances en HTML/CSS, nous avons ajouté et modifié nous-mêmes les pages dudit site. Il reprend certaines parties de ce blog: présentation de l'équipe, du projet. Nous y avons ajouté une section traitant des programmes utilisés tout au long de notre recherche, ainsi qu'une page dédiée aux données traitée. Par la suite, une section se consacre au script et à son écriture, une aux résultats obtenus, et enfin une à l'analyse de ces résultats. Contrairement à ce blog, le site contiendra plus de visuels et sera probablement un peu plus agréable dans sa navigation. Pour pouvoir travailler ensemble sur les fichiers, ceux-ci ont été partagés sur un drive commun. En effet, il serait autrement compliqué d'y avoir accès aisément depuis différentes