La tête

yeux

Étapes et péripéties du script....


Bien que le résultat de notre travail soit in fine tout à fait satisfaisant, on a traversé quelques moments difficiles. On retrace ici les plus marquantes des étapes, sans préciser combien d'heures, de nuits blanches ou de jours elles ont parfois mûries dans nos TETEs. Quant aux ceux qui ont plus de goût du documentaire, on les envoie sur notre blog qui nous a servi d'un journal de bord durant tout le semestre.


1) Arborescence
Pour bien travailler, il faut bien s'organiser! On commence notre projet par la préparation de notre environnement du travail. Ceci dit on crée notre dossier de base PROJET-MOT-SUR-LE-WEB qui contiendra les différents fichiers dont le nom indique leur caractères:
- le dossier URLS
- le dossier TABLEAUX
- le dossier PROGRAMMES
- le dossier DUMP-TEXT
- le dossier PAGES-ASPIREES et le dossier CONTEXTE.
N'oublions pas que les nom de fichiers ne peuvent en aucun cas se composer de caractères diacrités pour une simple raison - l'environnement d'UNIX ne les reconnait pas!
NB Notre arborescence va suivre le devéloppement du script.

2) Choix des urls
Pour le français, nous avons recherché le motif TETE dans les pages du journal Le Monde, sur lemonde.fr, mais également sur le site de Wiktionnaire. Pour l'anglais, nous avons recherché HEAD dans les pages du journal Independent. Cependant, nous étions obligés, par la suite, de démultiplier nous sources, afin d'obtenir des URL's et des contextes qui ne contiennent qu'un seul sens. Enfin, pour le polonais, nous avons recherché GLOWA sur le site de Gazeta Wyborcza qui est équivalent du journal Le Monde en Pologne. Avec un tel mode de recherche, nous acceptons des urls dans lesquelles il y a des mots comme entêtement, headlines ou encore glowami. On a un premier problème avec le polonais, puisque c'est une langue à déclinaisons (il y en a sept cas!) et que la traduction de tête ne sera pas seulement GLOWA, mais également GLOWIE, GLOWA, GLOWE etc. Au final on décide de garder uniquement l'occurrence glowa. En revanche pour plus de pertinence dans le choix de nos urls, on a essayé de trouver des pages avec différents sens pour le mot tête pour pouvoir les comparer et trouver finalement quelques sens communs pour les trois langues.

3) Tableau html
Une fois le choix des urls fait, on les range dans un tableau. Pour cela on écrit notre premier script qu'on nomme fait-tableau-v1.sh. L'aventure commence! Et les problèmes aussi. Pour l'instant ils sont dus à notre inexperiece dans la programmation. Puis pour rendre plus joli notre tableau de liens (d'y rajouter des couleurs, une bordure, etc.) on se renseigne un peu sur le langage html. Au début, le tableau a très peu de colonnes, mais il ne tardera pas à se remplir... . Pour ce qui est du titre du tableau, on veut qu'il soit spécifique à chaque langue. En donnant un nom à notre tableau, on a un problème car ce titre reprend tout le chemin et notre titre est tableau d'urls, p. ex ../URLS/urlfrancais.txt. On utilise donc basename qui dit de ne prendre en compte que la dernière partie du chemin, ainsi notre titre devient tableau d'urls francais (de même pour l'anglais et le polonais).

4) Aspiration de pages
L'aspiration des pages, c'est télécharger des pages Internet et les rendre accessibles hors connexion. Dans notre script, on utilise la commande wget pour aspirer nos pages et on ajoute la variable $i afin de numéroter les pages trouvées. Problème dans l'aspiration des pages: tout a été écrasé! On décide donc de modifier notre script et notre arborescence. Déjà, au lieu d'avoir des données specifiques à chaque langue à savoir donnees_francais, donnees_anglais, etc. on crée une donneesgen.txt avec ../URLS ../TABLEAUX/tableaux.html qui va nous créer 1 page html avec 3 tableaux, donc un pour chaque langue. On modifie notre script, et on 'double-boucle', en fait on crée une boucle autour de la 1ere boucle qu'on avait pour wget. Cette nouvelle boucle nous permet de faire pour chaque fichier (donc francais, anglais, polonais) la même chose, c'est-à-dire de créer dans PAGES-ASPIREES, un répertoire où on aura nos pages aspirées cliquables et numerotées, en fonction de la variable ($fichier). C'est-à-dire dans PAGES-ASPIREES, on aura francais (avec à l'intérieur les pages aspirées cliquables en français), anglais (pareil) et polonais (pareil). Et grace à cette variable $fichier, on pourra avoir 1 tableau pour chaque fichier dans une seule page html.

5) Texte seul
Le but est d'extraire de nos pages aspirées le contenu textuel de chaque page, et de le mettre en format .txt, donc en format texte. Il faudra évidemment rediriger les pages textes dans un fichier de sortie. Pour cette manipulation, on utilisera la commande lynx-dump. Ce sera la quatrième colonne de notre tableau. On crée 3 répertoires: anglais, francais et polonais dans DUMP-TEXT. On modifie le script, dans la boucle, juste après wget, on a lynx-dump -nolist pour n'avoir que du texte et on enlève en plus tous les liens. Mais pour respecter notre script précédent on va de nouveau avoir 3 tableaux distincts dans 1 page html. Il faut bien penser à prendre en compte $fichier (comme précédemment). On n'a pas tellement de problèmes avec le lynx, si ce n'est qu'il ne fonctionne pas à l'INALCO donc on est obligés d'aller à l'ILPGA pour faire tourner notre script.

6) Contextes
Le but est de retrouver dans chaque page dumpée le mot choisi plongé dans son contexte. Pour le contexte, on choisit de garder toute la phrase dans laquelle est l'occurrence utilisée. On ajoute donc des conditions. C'est-à-dire que pour tout url contenu dans nos différents répertoires d'url (en fonction de la langue), si on travaille sur l'anglais, alors le motif sera head, si on travaille sur le français alors le motif sera tête, si on travaille sur le polonais, alors le motif sera glowa. Puisqu'on travaille dans PROGRAMMES dans notre arborescence, on a créé, dans le dossier en question, un répertoire MOTIF dans lequel on mettra 3 fichiers .txt:
MOTIF=head dans head.txt
MOTIF=tête dans tete.txt
MOTIF=glowa avec le bon l dans glowa.txt parce ques dans le fichier texte on peut écrire avec le bon encodage, mais pas sur le script directement. On a un problème pour faire tourner notre script, il faut le faire tourner à l'INALCO pour que ça fonctionne. Mais à l'INALCO, il n'y a pas de lynx... qui nous serait utile. On ne peut donc pas faire tourner tout le script, mais une partie, afin d'avoir des petits bouts de script et enfin l'unifier.

En conséquence on fait tourner une boucle if dans une boucle for. On lui dit que si le fichier c'est de l'anglais, il doit prendre le motif head. En fait, on ne lui dit pas vraiment prends le motif head mais va chercher dans le répertoire MOTIF le fichier head où à l'intérieur on a rentré HEAD avec un éditeur de texte. Si on fait ça, c'est parce que directement sur le script, si on écrit: si c'est du polonais, le motif sera glowa, il ne va pas l'encoder directement. C'est à dire que le fait d'utiliser un éditeur de texte dans lequel on entre notre motif nous permet d'avoir le VRAI motif recherché, à savoir celui où on a glowa avec un l barré donc avec une ortographe correcte. Pour avoir une jolie page des contextes en sortie, on va utiliser le mini egrep multilingue qu'on va progressivement modifier. D'abord, dans le script du minigrep multilingue, au début, il y a:
use locale;
sauf qu'en fait il n'en tient pas compte.Et donc dans la partie #print "motif lu: $formein n";
chomp($formein);
$formein=~/MOTIF=(.+)$/;

Il faut changer le w en + pour lui dire de prendre n'importe quel caractère, même le non-unicode, sinon il ne va prendre que les caractères qu'il connait OR le ^ et le l barré sont PAS des caractères qu'il connait. Au final, on lui demande de lire le motif, quelle que soit sa forme. yeux
Problème principal: l'encodage!

* Amélioration du script: On veut générer des jolis tableaux, 1 sens par page html. Déjà, on décide de choisir à l'avance le sens qu'on veut analyser. Pour cela, on lance le 1er script: sh début.sh Pour être plus clairs on va afficher ce script: >

#!/bin/bash echo "Bonjour ! Quel sens du mot "tête" en français, anglais et polonais, voulez-vous analyser ? Pour tête dans la dimension anatomique du terme, tapez sh tete.sh < anatomie.txt Lorsqu'on emploie tête pour exprimer un commandement, tapez sh tete.sh < chef.txt Lorsqu'on emploie tête pour exprimer l'ordre dans une liste, tapez sh tete.sh < liste.txt Pour la tête dans le domaine du mental, de la pensée, tapez sh tete.sh < mental.txt Pour tête lorsqu'on parle de la partie essentielle d'un objet, tapez sh tete.sh < objet.txt

Vous obtiendrez ainsi différents tableaux de résultat en fonction du sens choisi. C'est très compréhensible. Ainsi, on peut passer au script principal qui va générer les tableaux recherchés, tete.sh On voudrait avoir en sortie un seul tableau pour anglais/francais/polonais et pas 3 tableaux différents. Pour cela, on a juste à sortir le tableau créé dans notre script de la boucle for afin qu'il ne crée pas un tableau pour chaque fichier, mais bien un tableau global. On modifie les couleurs, on donne un titre à notre tableau qui va varier en fonction du sens, on se servira encore une fois de basename qui nous permet d'avoir un joli titre en sortie et pas tout le chemin relatif. Il faut faire attention également, lorsqu'on enregistre un fichier texte, à ne pas noter l'extension .txt car si on le fait, étant donné qu'on a une variable pour chaque titre qui correspond au fichier texte, on aura pour titre francais.txt. PROBLEME : Avec une telle manière de procéder, on arrive à obtenir un tableau par page html, mais étant donné qu'on n'a pas créé de sous répertoires en rapport avec le sens, les fichiers étaient tous écrasés les uns après les autres lorsqu'on utilisait le script pour un autre sens. Il aurait donc fallu regrouper à la fin, une fois le script lancé, tous les résultats. Et c'est plutôt difficile, ça reviendrait presque a avoir un script par sens, ce qui n'est pas très intéressant au final. On décide donc de revenir en arrière dans nos étapes, et de faire un script pour toutes les urls . Il faut donc les classer par sens ET par langue. On va ainsi devoir rajouter une variable $sens, et donc une boucle for . Nouvelle boucle for, parce qu'on réfléchit sur : pour chaque FICHIER dans chaque sens de notre répertoire d’url. Finalement, notre script va créer dans l’arborescence, des sous répertoires. C'est à dire que dans "pages aspirees" on aura les différents sens du mot "tête». On aura ces différents sens dans chaque langue. Francais, anglais, polonais. On fait également des expressions régulières dans "motif" nous permettant d'avoir head et Head par exemple, mais surtout nous permettant d'avoir "tête" en polonais dans différents contextes, puisque le polonais est une lange à déclinaisons . Pour le tableau, on décide d'avoir tous les tableaux sur une même page html, ce qui facilite la mise sur le site ensuite. Résultat : une très belle page dans laquelle il y a un très joli tableau. 1er problème : Beaucoup de pages dumpées sont vides, et on retrouve ces pages dans le tableau, sur des liens qui mènent nulle part. On décide donc de modifier le script en créant une nouvelle variable poids, et en utilisant la commande ls -l, on peut connaître la taille des fichiers dumpés . S'ils sont à 0, alors ce n'est pas la peine d'afficher quoi que ce soit comme ligne sur le tableau. Si le poids n'est pas nul, alors c'est bon on peut créer le tableau. 2nd problème : Sur chaque page contexte du français, il nous affiche deux fois un contexte qui n'appartient pas à l'url donnée. En effet, si vous allez dans contexte dans le sens "ordre dans liste" et "partie essentielle d'un objet" vous verrez qu'apparaissent les lignes 83 et 122 ("des têtes tombent") juste avant qu'apparaissent les vrais contextes. On n'a cependant pas réussi à traiter ce problème. Dans tous les cas, on a directement expliqué notre mode de fonctionnement sur le script. "en re scriptant on a modifié le nom des repertoires . L'arborescence finale est : programmes , tête et tableau . Dans "programmes", on a le mini egrep multilingue modifié comme precedemment + afin qu'il accepte les expressions regulieres, on a modifié ici :ligne 73: $formein=~/MOTIF=(.*)/; ligne 113: while ($ligne =~/($forme)/g) lignes 115-117: my $droite = $'; my $formereconnue=$&; my $test=0; ligne 127: print FILEOUT "
  • Ligne n°$i : $gauche$formereconnue<\/b><\/font>$droite
  • "; #formereconnue au lieu de forme $verif=1; On fait tourner notre script comme ça : sh scriptfinal.sh < donneesgen.txt dans donneesgen.txt il y a ../tête et ../tableau/tableaufinal.html indiquant où sont stockées nos urls et dans quel fichier de sortie on veut les stocker ."