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 »

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 »

SudachiPy VS spaCy

L’article consacré aux nouveaux modèles spaCy pour le chinois et le japonais montrait un exemple d’utilisation pour le chinois. Ceci avait permis de comparer la sortie produite par spaCy à celle de Jieba, étiqueteur morphosyntaxique qui avait également fait l’objet d’un article sur ce carnet.

Tout comme la segmentation du chinois avec spaCy est (par défaut) issue de Jieba, la segmentation du japonais s’appuie sur SudachiPy. Puisque j’ai depuis présenté l’installation et le fonctionnement de SudachiPy, voici maintenant un aperçu de l’étiquetage du japonais avec spaCy.

Continuer la lecture de « SudachiPy VS spaCy »

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 »

Modèles chinois et japonais pour spaCy

La dernière mise à jour de spaCy (v2.3) inclut (entre autres) des modèles pour le chinois et pour le japonais. La segmentation et l’étiquetage s’appuient sur SudachiPy pour le japonais, et la segmentation est réalisée avec Jieba (par défaut) pour le chinois.

Si vous utilisez cette version de spaCy avec les paramètres par défaut pour segmenter un texte en chinois, vous devriez donc obtenir un résultat assez proche de la segmentation avec Jieba présentée dans un précédent article de ce carnet. Attention, ce ne sera pas forcément complètement identique, et l’étiquetage a également de grandes chances d’être différent.

Continuer la lecture de « Modèles chinois et japonais pour spaCy »

Uniformiser l’encodage d’un corpus avec Python

Quelques articles de ce carnet ont déjà été consacrés au traitement de données dans le cadre de la constitution d’un corpus, notamment l’étiquetage morphosyntaxique (pour le chinois, avec les étiqueteurs PyNLPIR et Jieba). Toutefois je n’y avais pas abordé la question de l’encodage des caractères.

Concernant les corpus écrits, l’encodage est un paramètre important.
Il doit :

  • Permettre la reconnaissance de tous les caractères présents dans le corpus .
  • Être le même dans tous les fichiers composant le corpus.
  • Être compatible avec les outils de traitement qui seront utilisés par la suite.

Lorsqu’on construit un corpus textuel, les données ne valident pas forcément ces critères au moment de leur collecte, et il est alors indispensable d’uniformiser l’encodage au plus vite.

Je vais détailler ici l’écriture d’un script Python permettant de convertir automatiquement en utf-8 un ensemble de fichiers, quel(s) que soi(en)t leur(s) encodage(s) d’origine.

Continuer la lecture de « Uniformiser l’encodage d’un corpus avec Python »

Étiquetage morphosyntaxique avec Jieba

Mon travail sur le traitement d’un corpus écrit m’a amené à étiqueter le texte avec deux étiqueteurs morphosyntaxiques différents, PyNLPIR et Jieba. Un article a déjà été consacré à la marche à suivre pour réaliser l’étiquetage avec PyNLPIR, voyons maintenant comment faire avec Jieba.

Continuer la lecture de « Étiquetage morphosyntaxique avec Jieba »

Étiquetage morphosyntaxique avec PyNLPIR

L’étiquetage morphosyntaxique (ou POS-tagging) est une étape habituelle dans la constitution d’un corpus textuel, assez étroitement liée à la langue dans laquelle le texte est écrit.

Il n’y a pas très longtemps, j’ai réalisé deux versions de l’étiquetage d’un corpus écrit en chinois, sous Python. Je vais donc partager successivement la façon dont j’ai procédé avec chacun des deux étiqueteurs, à savoir PyNLPIR (implémentation Python du logiciel NLPIR/ICTCLAS) et Jieba.

Continuer la lecture de « Étiquetage morphosyntaxique avec PyNLPIR »

Restructurer un tableau CSV

Le module csv intégré par défaut à Python permet de lire et écrire facilement des fichiers CSV. Voyons ici comment modifier un tableau de données préalablement récupéré sur une page web, avec la seconde étape de traitement du tableau des variantes pa-hng and hm nai.

Continuer la lecture de « Restructurer un tableau CSV »