Fonctionnement du script

L'essentiel du traitement du corpus a été fait de façon automatique par un script écrit en bash.

Script non-interactif

Le premier choix important dans la rédaction de ce script a été de le rendre strictement non-interactif :

Une fois lancé, il tourne tout seul sans requérir d'informations supplémentaires, ce qui implique de lui fournir tout ce dont il a besoin en argument de ligne de commande lors de son lancement, ou bien de l'écrire "en dur" dans le script.

La deuxième solution serait d'ailleurs parfaitement envisageable. Le script part du principe que certains répertoire existent déjà (PAGES-ASPIREES, DUMP-TEXT, CONTEXTES, index), mais il serait aisé de le modifier afin de les lui faire créer le cas échéant, avec la commande mkdir.

En l'occurrence, les deux seuls arguments dont le script a besoin sont la localisation du dossier contenant les listes d'urls, et le nom du fichier HTML de sortie. Si l'un des deux n'est pas présent, il s'arrête immédiatement, et renvoie une erreur.

Le gros avantage d'un script non interactif est qu'il est bien plus simple de le tester, puisque pour le relancer avec les mêmes arguments, il suffit de taper !! dans bash (ou d'utiliser les flèches du clavier, si on emploie un émulateur de terminal).

A contrario, un script qui demande des informations au cours de son exécution oblige à récrire les mêmes informations à chaque fois.

HTML

Le script crée lors de son exécution une page HTML contenant des tableaux, dont chaque case correspond à une étape du traitement du corpus. Il commence donc par imprimer l'en-tête du fichier, qui est écrit en dur dans le script. Cela pose un léger problème dans la mesure où tout changement dans la structure de la page nécessite de réexécuter le script en entier. C'est pour cette raison que la page des tableaux d'URL est légèrement différente des autres. Il aurait été mieux de créer d'abord un squelette de fichier HTML avant d'écrire le script, mais la nécessité ne s'en est pas fait sentir avant la création du reste du site.

Traitement des fichiers

Le script établit une liste de fichiers du répertoire donné en argument avec la commande ls -B, l'option -B permettant d'éliminer des résultats les fichiers de backup créés automatiquement sous les systèmes UNIX. Chacun de ces fichiers est ensuite utilisé tour à tour comme une source d'URLs. La lecture des fichiers se fait ligne par ligne, le script ne faisant rien si la ligne lue est vide. Sinon, elle est traitée comme une URL, et le script tente alors de la télécharger avec le programme wget.

Si le téléchargement ne se passe pas correctement, wget renvoie un code de statut différent de 0, et le script en reste là, sinon, la page est chargée une deuxième fois dans un navigateur textuel, w3m. Si w3m n'est pas disponible, le script tente d'employer lynx. Si lynx n'est pas disponible, le script renvoie une erreur et s'arrête.

Ça ne paraît pas nécessairement le meilleur choix, on pourrait faire en sorte que le script continue à s'exécuter malgré l'absence de navigateur textuel, mais étant donné que toutes les étapes suivantes dépendent des rendus créés par ces navigateurs textuels (les "dumps"), ce ne serait pas très intéressant en l'occurrence.

Une fois le dump créé, le script y relève les lignes contenant le mot visé, au moyen de la commande grep. Les urls étant triées par langue, les fichiers d'URLs portent le nom du mot visé pour chaque langue. C'est ainsi que le nom du fichier d'URLs traité sert, tel quel, d'expression régulière pour trois des quatre langues traitées, et aussi de titre aux tableaux correspondants.

C'est ainsi que sont construits les fichiers de contextes, qui réunissent pour chaque fichier les lignes où apparaissent effectivement les mots visés.

Ensuite, et de la même façon, sont créés les index de chaque fichier, c'est à dire des listes de mots triées par nombre d'utilisation décroissants. Les mots sont relevés au moyen de l'expression régulière "[[:alpha:]]+" qui relève toute suite de caractères alphabétiques (donc à l'exclusion de la ponctuation, des espaces et des nombres), ce qui n'est pas sans poser quelques problèmes :

Les mots composés du français comportent souvent des tirets (arc-en-ciel, grand-mère), voire des espaces (pomme de terre). Ce problème n'est pas géré par le script, il paraît difficile à résoudre au moyen des seules expressions régulières. Pour résoudre ce genre de problèmes, il faudrait pouvoir employer un dictionnaire.

En revanche, les index sont insensibles à la casse. La commande complète pour la construction des index est :

cat $dump | grep -Ei -o "[[:alpha:]]+" | sort -f | uniq -ic | sort -rn > $index

Une fois chaque URL traitée, les dumps et les contextes sont concaténés, puis l'index global est construit à partir de la concaténation des dumps.

On notera également que le script donne l'encodage de toutes les pages téléchargées. L'encodage des dumps n'est pas donné en revanche, parce qu'il s'agit invariablement de fichiers UTF-8, du moins quand w3m est installé.