Master 1 Plurital 2012
November 19 2012
1ère partie:
Nous avons commencé le cours en apprenant une nouvelle commande d'unix :
$locale
Elle s'utilise pour savoir la configuration locale :
On voit bien là que mon ordinateur suit les usages de la langue française et utilise UTF-8 pour l'encodage. Qu'en est-il, quand même, des pages que nous aspirons ? Comment va-t-on faire pour qu'elles soient aussi en UTF-8 ?
La première question qu'on s'est posée est s'il suffit d'annoncer dans la balise "metacharset" que le fichier HTML sera encodé en utf-8. On a bien vu que c'est non. On peut l'annoncer et le désirer, mais écrire dans notre script cette phrase :
echo "<meta charset="utf-8"> $tableau ;
ne suffit pas. Cela est dû au fait qu'à l'intérieur de la balise "metacharset" on met seulement des descriptions. Ceci dit, dans ce cours, nous avons commencé à apprendre des commandes et des fonctions pour répérer les encodages, afin de pouvoir découvrir ensuite à la prochaine séance --au cas où on ne le fasse pas avant en cours de GIM-- comment faire pour convertir un texte en n'importe quelle encodage en un texte codé en utf-8. Il s'agira probablement de l'utilisation de la commande iconv, telle qu'elle est annoncée dans la page du cours.
La commande unix pour connaître l'encodage d'un fichier est $file avec l'option -i dans la plupart des versions ou -I pour mac. Avec cette commande, on verra, par exemple, l'encodage de quelques-unes de mes pages aspirées :
Mes fichiers 1.html et 2.html, qui proviennent du même journal, sont écrits dans un encodage inconnu. Il y aura donc du travail à faire. En revanche, avec les fichiers 21.html et 51.html nous avons eu plus de chance puisqu'ils sont encodés en utf-8, il ne faudra pas les convertir.
On a répéré que dans la description donnée par cette commande la seule chose qui nous intéresse est ce qui se trouve après “charset=”. Comment va-t-on faire pour extraire exclusivement cette information pertinente ?
En utilisant une autre nouvelle commande: $cut et ses options -d pour le délimiteur et -f pour indiquer le champ (field) que nous voulons. Dans notre cas, le délimiteur est le signe égal "=". On utilisera aussi un tube pour enchainer les deux actions. La commande complète sera donc :
$file -I nomdufichier | cut -d= -f2
[et pour pouvoir accéder à ces informations plus tard, il est possible de mettre le résultat dans une variable : encodage =$(file -l nomdufichier | cut -d= -f2) ]
Voilà :
2ème partie:
Notre prochain objectif est d'extraire les contenus textuels d'ne page web. Ainsi, on utilisera la commande "lynx". Il s'agit, à l'origine, d'un navigateur web utilisable depuis le terminal. Il nous intéresse, etant donné qu'il a des options qui vont permettre l'extraction visée.
Par exemple, pour acceder à une page web visée, on écrit:
lynx http://escritsomitologiapersonal.blogspot.fr/
le résultat est le suivant :
On ajoutera l'option “-dump” pour extraire le contenu textuel et l'option “-nolist” pour récupérer le texte sans tenir compte des liens existants. Pour garder ces informations dans un fichier, on ajoute “> nomfichier”
On peut déjà voir ici que le code n'est pas respecté. En catalan, les accents ne sont pas respectés. En grec, présent dans le texte d'origine, il n'apparait presque rien. Il n'y a rien en alphabet grec. On voit seulement quelques transliterations qui sont incomplètes aussi.
Si on lance la commande “file -I ” avec le nouveau fichier créé, on va voir que son encodage n'est pas en unicode.
En revanche, la page originale était en utf-8 :
Alors, on va lancer la commande avec une autre option encore, “display_charset=utf-8”, pour garder l'encodage original :
Quand on fait file -I, on rencontre quand-même un problème :
Le charset apparaît comme "unknown".
En utilisant la commande “cat”, on verra qu'il y a eu, de toute façon, une nette amélioration de l'encodage. Les accents en catalan sont déjà affichés et on retrouve les mots grecs en alphabet grec (cf. Δρόμοι au bout de l'image):
C'est déjà mieux, mais il va falloir chercher encore une amélioration plus satisfaisante.
Quelques reflexions ultérieures:
Ayant observé tout cela, on va essayer d'ajouter la commande "lynx" dans le dernier script, celui qu'on utilisait pour aspirer les pages. On va l'essayer sans l'option “display_charset”, en attendant les séances sur l'encodage et le décodage de GIM.
Voilà le script :
Avec cela, on a déjà les textes nettoyés, mais avec beaucoup de problèmes d'encodage, surtout pour le grec.
Voilà le début de la page html sur firefox :