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 journée pour jouer
aux jeux vidéo”.
Deuxièmement, la définition
du mot geek ne connaît pas de véritable consensus, mais nous espérons à
travers notre étude, à défaut d’en donner une universelle, nous en approcher.
Pour ce faire, nous aspirons à : 1) dans chaque langue, séparément, observer
les co-occurrences du mot geek, d’une part dans les textes dont
les auteurs considèrent appartenir au milieu “geek”, d’autre part dans les
textes dont les auteurs sont extérieurs à ce milieu, 2) pour chacun des deux
types d’auteurs, comparer les co-occurrences selon les langues, 3) dans chaque
langue, comparer les co-occurrences selon les types d’auteurs.
Dans cette optique, nous
avons l’intention de récolter par langue :
·
une vingtaine d’URLS provenant d’auteurs qui s’identifient à la
culture geek
·
·
une trentaine d’URLS provenant d’auteurs qui s’en distinguent
·
→ comment
déterminerons-nous si l’auteur d’un article s’identifie à cette culture?
Réflexion
sur la méthode de constitution du corpus :
Avec la consigne de
rassembler 50 urls par langues, nous pensions tout d’abord faire des recherches
manuelles pour y parvenir. Mais lors du cours de “Programmation et Projet
encadré 1” du 16 octobre 2019, nous avons appris que certains sites web
protégeaient leurs données de telle manière qu’il nous était impossible de
récupérer (aspirer) les pages HTML qui nous intéressaient (nous y reviendrons
en détails un peu plus loin).
L’idée de trouver des pages
web conformes à notre recherche qui puissent se révéler inutilisables était
assez décourageante.
“MAIS
Solveig est arrivée et nous a tous sauvés !!! Pour Solveig, HOURRA !!!”
Solveig suit le cours de
“linguistique de corpus”, et, durant cet enseignement, elle a étudié une
manière “de récupérer” toutes les URLS d’une recherche web à partir d’un moteur
de recherche. En combinant cela avec la commande bash “curl -SI nom_d’url”
qui permet d’obtenir le protocole HTTP d’une page web – si le
code HTTP est 200 nous pouvons aspirer la page –, et le script créé en
cours de “Programmation et projet encadré 1”, nous allons pouvoir obtenir un
tableau d’url où les urls inexploitables seront directement identifiées et il
ne nous restera plus qu’à trier celles que nous souhaitons garder suivant que
l’auteur se distingue ou non de la culture “geek”.
La liste d’url une fois
créée, nous passerons alors à la prochaine étape : la création d’un tableau
regroupant nos URL et les pages aspirées, et la résolution des problèmes
d’encodage.
Méthode
détaillée de l’extraction d’URLS pour la création du corpus :
Se rendre sur un moteur de
recherche (Bing), et taper une requête de recherche, dans notre cas “geek”.
La commande bash “curl”
permet d’aspirer le contenu d’une page web que l’on peut par la suite rediriger
dans un fichier du répertoire URLS de notre environnement de travail.
Cependant, seules les URLs
nous intéressent sur cette page. Pour pouvoir les extraire, nous allons donc
employer la commande “egrep” qui affichera les lignes correspondant à un
motif donné, accompagné de l’option “-o” qui retourne seulement le motif
cherché, et créer une expression régulière représentant un format d’URL “https?[^\’’]+”
La commande pour extraire
seulement les urls d’une page web est donc la suivante : egrep -o
“https?[^\’’]+”.
À cela s’ajoute une
commande egrep -v afin de retirer tous les mots susceptibles
d’apparaître dans des URL inexploitables.
Vient ensuite la suite de
commande “sort” et “uniq” qui permettent respectivement de trier
les résultats de manière alphanumérique, et de supprimer les doublons.
Et enfin, on élimine les
URLS « vides » avec la commande “egrep -v” – option
-v qui inverse la mise en correspondance pour sélectionner les lignes ne
correspondant pas au motif – et l’expression régulière
“http.?:/{1,2}$”.
Pour finir, on redirige les
résultats vers un nouveau fichier urlgeekfr.
Cela me donne la commande
suivante :
Seulement, cela ne permet
de récupérer que la première page suite à une requête dans un moteur de
recherche. Ce qui est loin d’être suffisant.
Pour éviter de devoir
répéter l’opération ci-dessus, il faut mettre en place une boucle.
En effet, lorsque l’on
passe de la page 1 à la page 2 d’une recherche Bing, on remarque que la mention
« FIRST=1 », dans l’URL, devient « FIRST=11 », puis « FIRST=21 » à la page 3,
etc.
Il suffit donc de créer une
variable “compteur = 1”, suivie d’une boucle qui s’arrêtera lorsque la
variable “compteur” atteindra le nombre 211, avec “-le” signifiant «
less or equal ». En Bash, la syntaxe d’une boucle est la suivante :
while + condition ( ici, [ $compteur
-le 211] ) ;
do + toutes les commandes à effectuer
tant que la condition est remplie* ;
done ;
* Ici, la commande à
effectuer est celle détaillée ci-dessus pour extraire les urls d’une page web
MAIS en remplaçant « FIRST=1 » par « FIRST=$Compteur » dans l’URL, et en
incrémentant le compteur de 10 de la manière suivante : compteur=$((compteur+10))
Cette fois, on crée deux
fichiers : geekfr dans lequel on dirige le contenu des pages avant de le
retravailler, et urlsgeekfr dans lequel on dirige ce qu’on a extrait du
premier fichier grâce aux différentes opérations effectuées dessus (egrep,
uniq…). On pourra par la suite supprimer le premier fichier.
Cela donne la commande
suivante dans notre cas :
Cette commande permet bien
de récupérer de nombreuses URLs en français.
Le cas de
l'allemand : Problèmes rencontrés lors de l’extraction d’URLS en allemand
En essayant de répéter
l’opération pour obtenir des résultats en langue allemande, Solveig a rencontré
un problème.
En effet, l’URL reste la
même, que les réglages de Bing soient en français ou en allemand. De ce fait,
même si les résultats apparaissent bien en allemand sur Bing, curl n’aspire
que des résultats en français.
Solveig a donc demandé
conseil à M. Daube qui l’a invitée à supprimer le « PERE » en fin d’URL et à le
remplacer par « setmkt=de-de&setlang=de ». Il lui a également
conseillé de préciser son navigateur internet – avec l’option -A de
curl suivie du nom du navigateur et de sa version – pour passer
outre d’éventuels paramètres de sécurité de Bing empêchant d’aspirer le contenu
de ses pages.
La commande suivante a
permis d’obtenir une liste d’URLs en allemand :
Création
d’un tableau HTML pour regrouper les URLS :
Avant de sélectionner les
URLs qui nous intéressent, nous souhaitons créer un tableau html par langue
avec, pour chacune des URLs récoltées, quatre colonnes contenant respectivement
:
- Le lien
pour permettre d’accéder rapidement au contenu des pages
- Le code
retour http indiquant si l’aspiration du contenu html de la page est possible
-
L’encodage de la page (lorsqu’il a été précisé par l’auteur du code html)
- Le lien
vers le fichier de la page aspirée.
Pour cela, nous utiliserons
le programme Bash suivant :
Ce programme contient deux
variables qu’il faudra préciser en arguments lorsque nous souhaiterons
l’exécuter :
·
le répertoire d’où nous souhaitons extraire les URL : $1
·
·
le répertoire où nous souhaitons créer les tableaux : $2
·
Il contient également deux
boucles for imbriquées. En effet, nous aspirons à créer :
1) un tableau par langue,
autrement dit un tableau par fichier présent dans le répertoire URLS, avec la
boucle : for fichier in $(ls $1)
2) et, au sein de chaque
tableau, une ligne par URL, autrement dit par ligne de chaque fichier, avec la
boucle : for line in $(cat «$1/$fichier»).
Ces deux boucles sont
accompagnées de deux variables : la première pour numéroter les tableaux (numerotableau),
à incrémenter à la fin de la première boucle ; la seconde pour numéroter les
lignes (compteur), à incrémenter à la fin de la seconde boucle.
Pour chaque ligne, nous
effectuons plusieurs opérations dont les résultats alimenteront les différentes
colonnes du tableau.
1) D’abord, nous souhaitons
savoir si l’aspiration du contenu de chaque page est possible. Pour ce faire,
nous devons obtenir le code retour http du protocole http de la page web. Avec
la commande “curl -SI” où les options -SI correspond respectivement à
Silent et Information du serveur, nous pouvons obtenir le protocole HTTP:
Pour extraire
seulement le code retour, nous effectuons la commande curl -SI -o
fichier -w %{http_code} page_web qui redirige le code retour dans un
fichier. Si celui-ci est de 200, l’aspiration de la page s’est bien passée.
Sinon, peut importe le code obtenu, cela signifie qu’il y a eu un problème lors
de l’aspiration de la page.
Explication
de la commande : curl
-SI -o fichier -w %{http_code} page_web
La commande curl -SI
(Silent et Information du serveur) permet d’afficher le protocole HTTP.
L’option -o permet
de stocker les informations dans un fichier et -w %{http_code} permet
d’extraire uniquement le code retour (ici « 200 ») à la première ligne.
2) A présent, nous voulons
connaître l’encodage de la page, qui se trouve à la fin de la 2e ligne après «
charset= ». Nous tapons pour cela la commande curl -SI page_web | head -2 |
cut -f2 -d”=” | tail -1 que nous décomposons ainsi : head -2 pour
sélectionner les 2 premières lignes, cut -f2 -d«=» pour sélectionner
pour chaque ligne le 2e champ (f = field), les champs étant séparés par
« = » grâce à -d”=”. Enfin, nous ne souhaitons que le résultat de la 2e
ligne, que nous obtenons avec tail -1.
Toutes ces informations -
code retour et encodage de la page - sont stockées dans des variables et ainsi
ajoutées au code html servant à construire le tableau que l’on dirige vers le
fichier tableau.html grâce à la commande echo et l’opérateur
>>.
Pour exécuter ce programme,
il faut écrire :
Nous obtenons ainsi le
tableau souhaité dont voici un extrait :
Il ne reste plus qu’à ne
conserver que les urls dont le code retour est égal à 200 puis à sélectionner
parmi les urls restantes les plus pertinentes pour notre projet. Nous verrons
cela lors d’un prochain billet.
Découverte
de dernière minute :
En vérifiant le protocole http de certaines url pour lesquelles nous n'avions pas réussi à extraire l'encodage, nous nous sommes rendu
compte que : dans le protocole HTTP d’une page web, la ligne sur laquelle
apparaît l’encodage de la page (quand elle est précisée par l’auteur) n’est pas
systématiquement la deuxième. De ce fait, notre commande pour extraire les
encodages : curl -SI page_web | head -2 | cut -f2 -d”=” | tail -1, ne
sera pas couronnée de succès à chaque utilisation.
Nous réfléchirons à ce
problème dans un prochain billet.
Commentaires
Enregistrer un commentaire