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

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 »

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 »

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 »

Navigation web automatique avec Python

Dans cet article de la série d’articles consacrés à la cartographie de données linguistiques avec Python, la librairie selenium était exploitée pour réaliser des captures d’écran.

Ce n’est pas sa seule utilité : le webdriver de selenium permet de naviguer sur une page web de façon automatisée, et donc de mettre en place divers degrés d’interaction. Ceci peut être par exemple utile si, lors de la constitution d’un corpus web, vous voulez récupérer des contenus qui n’apparaissent qu’après un clic sur un élément de la page.

Voici deux exemples d’utilisation de selenium pour obtenir l’accès à des contenus qui nécessitent une interaction avec la page web.

Continuer la lecture de « Navigation web automatique avec Python »

Didόmena dans votre carnet Hypothèses

Didόmena est un entrepôt de données collaboratif qui permet aux membres des unités de recherche sous tutelle de l’EHESS de stocker durablement leurs données, mais aussi de les partager. Comme l’indiquent le site ainsi que la plaquette de présentation de la plateforme, “les données y sont décrites selon les standards de l’information scientifique et technique”, qui respectent les principes FAIR : Findable, Accessible, Interoperable, Reusable.

Il est notamment très simple d’afficher un jeu de données de Didόmena sur un carnet Hypothèses. Voici comment faire.

Continuer la lecture de « Didόmena dans votre carnet Hypothèses »

Sélecteur 1000 langues en HTML

Pour créer des questionnaires ou formulaires relatifs à des projets de recherche en linguistique, il est parfois nécessaire de proposer à l’utilisateur/utilisatrice de renseigner une ou plusieurs langue(s) : par exemple pour indiquer quelle(s) langue(s) lui sont connues, lister les langues présentes dans son environnement à une période donnée, spécifier quelle(s) langue(s) elle ou il utilise selon les contextes, renseigner dans quelle(s) langue(s) est rédigé un document donné, etc. Il est beaucoup plus simple, notamment pour analyser ensuite les réponses fournies, de disposer d’une liste de référence affichée sous forme de liste déroulante plutôt que de recueillir une réponse sous forme de texte libre.

Je vous présente ici un sélecteur prêt à l’emploi, au format HTML, qui permet de faire un choix parmi une liste de 1193 langues différentes.

Continuer la lecture de « Sélecteur 1000 langues en HTML »

Uniformisation d’encodage en deux étapes

La lecture préalable de l’article Fiabilité de chardet est fortement conseillée.

Lorsqu’on travaille avec un corpus textuel composé de nombreux fichiers dont l’encodage n’est pas uniforme, l’une des premières étapes de traitement est de convertir l’ensemble du corpus vers un encodage unique et reconnu par les outils qui seront utilisés ensuite. Il existe plusieurs façons d’y parvenir, telle que celle présentée dans cet article, qui fait appel à chardet.

Toutefois, en fonction de la composition du corpus et des objectifs poursuivis, détecter et convertir en masse l’encodage de l’ensemble des fichiers n’est pas forcément la solution la plus efficace. Voici une alternative où la détection et la conversion constituent deux étapes distinctes.

Continuer la lecture de « Uniformisation d’encodage en deux étapes »

Parser un flux de syndication avec Python

En faisant des recherches pour l’écriture d’un programme, je suis tombé par hasard sur la documentation de feedparser, qui permet de lire les informations d’un flux RSS (ou Atom) avec Python. Ce n’était pas ce que je cherchais, mais j’ai quand même voulu tester, à titre informatif : il s’avère que c’est extrêmement simple.

Continuer la lecture de « Parser un flux de syndication avec Python »

Étiquetage morphosyntaxique avec SudachiPy

J’ai présenté dans de précédents articles deux librairies Python permettant de réaliser un étiquetage morphosyntaxique (ou POS-tagging) sur des textes écrits en chinois : PyNLPIR et Jieba.

Voici maintenant quelques mots sur un étiqueteur permettant de traiter des textes en japonais : SudachiPy, la version librairie Python de l’étiqueteur et analyseur morphologique Sudachi.

Continuer la lecture de « Étiquetage morphosyntaxique avec SudachiPy »

Fiabilité de chardet

L’utilisation de chardet a déjà été évoquée sur ce carnet, dans cet article consacré à l’uniformisation de l’encodage d’un corpus textuel.

J’y indiquais que chardet.detect() permettait d’identifier l’encodage d’un fichier ouvert en binaire, afin de le décoder correctement. Le résultat retourné par cette fonction se présente sous forme d’un dictionnaire : celui-ci contient le nom de l’encodage reconnu à la clé encoding, mais également un indice de confiance dont la valeur correspond à la clé confidence.

Comprendre ce qu’est cet indice peut s’avérer utile, notamment pour repérer dans quels cas l’encodage risque d’être mal détecté.

Continuer la lecture de « Fiabilité de chardet »