Ressources numériques en sciences humaines et sociales OpenEdition Nos plateformes OpenEdition Books OpenEdition Journals Hypothèses Calenda Bibliothèques OpenEdition Freemium Suivez-nous

Gestion des erreurs avec Try/Except

Si une erreur survient lors de l’exécution d’un programme en Python, celui-ci peut planter et cessera alors de fonctionner immédiatement. Or certaines erreurs sont prévisibles et peuvent même faire partie du fonctionnement “normal” du programme. C’est notamment le cas s’il y a une forte probabilité qu’une erreur puisse survenir lors d’une étape de l’exécution ou si on souhaite exploiter la survenue d’une erreur comme mécanisme de contrôle.

Voici quelques explications pour pour gérer les erreurs avec try/except dans vos scripts et programmes en Python.

Continuer la lecture de « Gestion des erreurs avec Try/Except »

Ligne de commande avec Python

Lorsqu’on écrit un script ou un programme en Python, ce n’est pas nécessairement pour en faire un usage unique. Il est assez commun de réutiliser le même programme en faisant varier certains paramètres : par exemple, le chemin d’accès d’un fichier d’entrée, la valeur d’une variable prise en paramètre par une fonction, l’application ou non d’une condition… Ce sont des cas où il peut s’avérer préférable de ne pas modifier à répétition le code source. Une solution pour prendre en compte les variations à appliquer aux multiples exécutions du programme est de mettre en place une interaction avec la ligne de commande.

C’est ce que permet de faire le module argparse, et ce n’est pas compliqué ! Voici une illustration de son fonctionnement, avec un exemple d’étiquetage syntaxique d’un texte en chinois.

Continuer la lecture de « Ligne de commande avec Python »

Exemple de devoir en Master LTTAC : lexicographie bilingue

Ancien étudiant du Master LTTAC (Lexicographie, terminographie et traitement automatique de corpus) de l’Université de Lille, je reçois assez régulièrement des demandes d’informations sur le déroulement et le contenu de cette formation universitaire. J’ai décidé de publier sur ce carnet le texte d’un devoir rédigé dans le cadre de mes études en LTTAC , afin d’en montrer un exemple concret.

Il s’agit d’un devoir de lexicographie bilingue, qui me semble assez représentatif et pour lequel j’avais obtenu une très bonne note : il est probablement proche de ce qu’attendait l’enseignante. En dehors d’ajustements de mise en forme pour la publication sur un carnet Hypothèses et de la correction d’un petit nombre de fautes de frappe, aucune modification n’a été apportée au texte d’origine.

Continuer la lecture de « Exemple de devoir en Master LTTAC : lexicographie bilingue »

R et encodage des caractères

Dans l’article précédent, consacré à la production d’une représentation cartographique avec R, le tableau de données pris en entrée a été lu avec la fonction read.csv(). Comme son nom l’indique, cette fonction permet de lire des données structurées au format CSV, à partir d’une URL ou du chemin d’accès d’un fichier, afin de les convertir en un type de données propre à R et les manipuler.

Cependant, en fonction du ou des systèmes d’écriture présents dans le document d’origine, il peut arriver que les caractères soient affichés de façon erratique. Voici comment résoudre le problème, simplement en déclarant les paramètres appropriés de read.csv().

Continuer la lecture de « R et encodage des caractères »

Cartographie linguistique avec R

Plusieurs articles de ce carnet ont déjà été consacrés à la cartographie de données linguistiques. Ceux-ci présentaient des méthodes, applicables sans expertise en géomatique, permettant de produire des cartes au format HTML via la librairie Python folium. Voici maintenant comment procéder pour obtenir des représentations cartographiques similaires en utilisant R et la librairie leaflet, dont folium est un équivalent.

Je ne suis toujours pas géomaticien et je suis par ailleurs débutant dans l’utilisation de R, le code présenté ici sera donc particulièrement accessible.

Continuer la lecture de « Cartographie linguistique avec R »

Pour le XML, .sort() ou .sorted() ?

Pour trier les éléments d’un corpus XML selon un critère donné, on peut utiliser la fonction .sorted(), qui crée une nouvelle liste triée. En effet, puisque ce que renvoie Element.findall() est bien une liste, rien n’empêche de lui appliquer toutes les fonctions qui interagissent avec le type list.

Il devrait alors être possible d’utiliser .sort(), autre fonction native de Python, pour trier des (sous-)éléments dans une arborescence XML. Est-ce bien le cas ?

Bien sûr que oui, mais en raison des différences de fonctionnement entre .sorted() et .sort(), il faut légèrement adapter le code selon la fonction choisie.

Continuer la lecture de « Pour le XML, .sort() ou .sorted() ? »

Trier des éléments XML par valeur d’attribut

Les fichiers XML produits automatiquement peuvent être peu lisibles pour l’œil humain. Assez souvent, ce n’est pas forcément un problème puisqu’il est tout à fait possible que l’exploration et/ou le traitement des fichiers soient également effectués de façon automatique.

Mais dans certains cas, il peut être appréciable (voire nécessaire) de parcourir manuellement le contenu d’une arborescence XML : pour vérifier rapidement la cohérence des contenus d’un corpus, présenter les données ou un extrait des données à un public, apporter des corrections manuelles…

L’une des modifications qui n’a quasiment aucun impact sur les données à proprement parler mais peut faciliter le confort de lecture est de modifier l’ordre des éléments XML, par exemple suivant la valeur de l’un ou l’autre de leurs attributs.

Continuer la lecture de « Trier des éléments XML par valeur d’attribut »

Dépôts Github et Gitlab de Tekipaki

Depuis l’ouverture de Tekipaki, chaque script qui y est présenté est mis à disposition sur Github et/ou Gitlab, accompagné d’exemples de fichiers d’entrée et de sortie.

Le partage de code est un élément central dans le fonctionnement de ce carnet, mais je n’avais jusque là pas explicité comment il est organisé. Comme j’ai récemment opéré une petite modification dans l’organisation des fichiers partagés (qui passera peut-être inaperçue pour vous), il me semble pertinent d’expliquer plus clairement comment vous pouvez retrouver les scripts et autres fichiers associés aux différents articles de Tekipaki.

Continuer la lecture de « Dépôts Github et Gitlab de Tekipaki »

Notebook d’initiation web scraping et cartographie

Le 15 décembre dernier j’ai eu l’honneur d’intervenir dans un séminaire du Master Sciences du Langage – Parcours Lexicographie, terminographie et traitement automatique de corpus (LTTAC) de l’Université de Lille, où j’ai moi-même été étudiant il y a quelques années.

À cette occasion, j’ai mis en place une activité pratique sous forme de notebook Jupyter. Celui-ci s’adresse à un public qui ne connaît pas Python, et l’objectif de l’activité est de produire une représentation cartographique à partir de données extraites d’une page web.

Continuer la lecture de « Notebook d’initiation web scraping et cartographie »

Interroger l’API HAL avec Python

Il est certainement inutile de présenter l’archive ouverte multidisciplinaire HAL et son interface en ligne. Un usage moins visuellement saillant de cette archive est qu’il est également possible d’interagir avec sa base de données via une API, et notamment de l’interroger pour y effectuer des recherches selon divers critères puis de récupérer les résultats dans différents formats de données structurées.

Vous pouvez tout à fait utiliser Python pour interroger l’API de HAL et traiter les résultats obtenus.

Continuer la lecture de « Interroger l’API HAL avec Python »

Utiliser TinySegmenter avec Python

Lors du traitement d’un corpus en japonais, l’étape de segmentation est souvent indispensable. Il est possible de l’effectuer sans écrire de script pour l’occasion, par exemple avec un logiciel tels que SegmentAnt, déjà présenté sur ce carnet dans l’article Segmenter du texte brut avec SegmentAnt.

Peut aussi se présenter le cas où la segmentation intervient parmi d’autres traitements qui seront pris en charge par un ou plusieurs script(s). Il est alors intéressant de prévoir quelques lignes de code pour segmenter le texte plutôt que de faire appel à un outil supplémentaire.

Voici comment faire, en utilisant TinySegmenter avec Python.

Continuer la lecture de « Utiliser TinySegmenter avec Python »

Segmenter du texte brut avec SegmentAnt

Dans des langues telles que le français ou l’anglais (entre autres), les différentes entités linguistiques, ou plus simplement les “mots”, sont plus ou moins intuitivement identifiables à l’écrit car ils tendent à être séparés par un caractère dédié : l’espace.

Ce séparateur n’est pas commun à toutes les langues écrites, et n’est notamment pas utilisé en chinois et en japonais. Un lecteur humain sera évidemment capable d’identifier les entités qui composent le texte pour pouvoir le comprendre, mais ce n’est pas forcément le cas des outils de traitement automatique utilisés lors de l’exploration d’un corpus. Il peut alors devenir nécessaire de segmenter le texte d’origine, en y insérant un caractère séparateur.

SegmentAnt, développé par Laurence Anthony, est un logiciel qui vous permettra de segmenter du texte en chinois ou en japonais extrêmement facilement, sans écrire une ligne de code.

Continuer la lecture de « Segmenter du texte brut avec SegmentAnt »

Lire (et modifier) un fichier XML avec Python

Un article précédent a montré comment générer facilement un corpus textuel avec Python. Le corpus ainsi produit se présentait sous forme d’un fichier au format XML, écrit notamment grâce à xml.etree.ElementTree, qui fait partie de la librairie standard.

ElementTree s’avère donc utile pour créer des fichiers XML, mais permet aussi de lire des fichiers préexistants, notamment dans le but de les modifier.

Voici comment procéder pour lire l’arborescence d’un fichier XML et lui apporter des modifications.

Continuer la lecture de « Lire (et modifier) un fichier XML avec Python »

Déclaration XML automatique

Lorsqu’on automatise la création d’un corpus, ou tout autre document, structuré en XML, il est important de veiller à générer également une déclaration XML cohérente avec le contenu du fichier. Il y a plusieurs façons d’y parvenir, notamment en faisant appel à bs4 ou à xml.etree.ElementTree.

Continuer la lecture de « Déclaration XML automatique »

Produire un corpus web format XML en 15 lignes de code

Pour effectuer certaines tâches, disposer d’un corpus textuel est très utile, voire indispensable : faire des essais pour un projet dont le corpus de travail est en cours de constitution, tester des scripts et traitements, prendre en main un nouvel outil et/ou le comparer à d’autres outils similaires…

Ce sont des usages qui relèvent principalement des phases préparatoires d’un projet, et pour lesquels il est surtout important de pouvoir construire un corpus rapidement et sans trop d’effort. Ce n’est pas grave si sa constitution n’est pas particulièrement précise puisqu’elle ne nécessite qu’un investissement limité et que les résultats obtenus n’ont pas vocation à être exploités en conditions réelles.

Je vous présente ici un script Python de web scraping très simple, qui vous permettra d’obtenir un corpus textuel au format XML tout à fait adapté à ce type d’utilisation.

Continuer la lecture de « Produire un corpus web format XML en 15 lignes de code »