Billet récapitulatif sur la partie programmation


L’expérience du projet encadré arrivant à son terme, il convient maintenant de faire le bilan de cette expérience du point de vue de la programmation.


POURQUOI PYTHON PLUTOT QUE BASH ?

Lorsque nous avons appris, mes collègues et moi, les fonctions que devraient remplir le programme en début d’année, nous nous sommes dit que Bash ne suffirait pas et qu’il faudrait surement passer par Python, au moins pour la partie analyse du corpus. C’est l’une des raisons pour lesquelles nous avons choisi de coder le programme en python plutôt qu’en bash.

En effet, Python possède de nombreux avantages quant à la partie analyse des corpus dans la mesure où il existe de nombreux modules disponibles pour une myriade de langues différentes pour analyser et parser des corpus. Pour n’en citer que quelques-uns, ceux que nos scripts utilisent, nous pouvons parler des fameux NLTK et Spacy notamment. Ces outils-là constituent de précieux atouts en matière d’analyse linguistique dont bash est dépourvu.

Grâce à ces modules de parsing, nous avons pu obtenir des contextes cohérents et assez précis par rapport à bash mais il y a un mais. Nous en parlerons dans la seconde partie.

Le deuxième avantage majeur de Python réside dans le fait que la gestion des encodages est nettement simplifiée. Malgré des encodages parfois très divers (ISO 8859-1, GBK…) sur les pages à scraper, le module requests de Python permet de convertir nativement ces encodages en UTF-8 sans souci majeur. Avec bash, il faut convertir manuellement chaque fichier en UTF-8.

Le troisième avantage de Python réside dans la gestion des erreurs dans le web scraping. Le module requests fournit tous les outils pour gérer les différentes exceptions qui peuvent se produire pendant le scraping d’une page web. Par exemple, après avoir lancé une requête pour scraper le contenu de la page, un simple response.ok permet de savoir si le code http est 200, et cela nous permet facilement de mettre de coté les code réponse http différents de 200.

Un autre avantage de Python réside dans le fait qu’avoir la possibilité d’utiliser des proxies, un fake user agent, un timer entre chaque tentative de scraping afin de passer le moins possible pour un robot pour scraper les pages permet d’obtenir un taux de réussite de 95% sur les pages aspirées. Comparé à un script bash standard, ce taux est très largement supérieur.

Le dernier avantage, et non des moindres, est que nous avions déjà une expérience en Python plus importante qu’en bash au moment de démarrer le projet encadré.

Cependant, Python présente aussi des inconvénients majeurs qu’il convient ici de mettre en exergue.

Premièrement, la pluralité des modules à utiliser implique une connaissance fine de ces derniers. Nous avons ainsi passé de nombreuses heures à lire la documentation pour chaque module à utiliser, ce qui constitue une perte de temps non négligeable, sans compter les bugs à corriger qui furent nombreux au début.

De plus, la pluralité des modules implique qu’il faut nécessairement en choisir un plutôt qu’un autre. Le choix de tel module plutôt qu’un autre a également demandé un temps précieux pour tenter de choisir celui qui était le plus idoine par rapport à ce que nous recherchions.

Deuxièmement, le codage en Python implique une charge du travail beaucoup plus importante pour les mêmes fonctionnalités en bash. C’est là que réside sans doute le principal désavantage de Python. Alors que quelques dizaines de lignes de code en bash sont nécessaires, il en faut plusieurs centaines voire plus en Python. Au total, nos script Python avoisinent les 1500 lignes, ce qui est nettement plus important qu’avec bash.

Enfin, Python étant un langage de plus haut niveau que bash, le temps d’exécution des scripts est plus important. Dans le cas du projet encadré, le corpus à analyser n’étant pas immense, cela n’a pas posé de problèmes particuliers mais quid d’un corpus de dizaines de milliers de lignes ? Et nous ne parlons même pas des soucis d’optimisation.

En conclusion, voici un tableau récapitulatif des avantages et inconvénients de Python :

comparaison entre python et bash