site de Fabien Torre


Programmation et Linux pour les textes : une introduction

Ce support constitue une introduction à la programmation dédiée aux textes. Nous évoquons les applications possibles et discutons de deux langages de programmation candidats. Ensuite nous discuterons des formats des fichiers traités. Enfin, nous présenterons l'environnement dans lequel nous allons travailler (Linux) et défendrons l'idée qu'il est particulièrement pertinent pour le travail sur les fichiers et les textes.

Nous donnons quelques idées sur les motivations et les réalisations possibles.

exploiter des corpus de texte non structurés ou semi-structurés, en particulier réaliser des extractions d'informations, extractions automatiques, depuis des textes. découverte d'informations linguistiques (co-occurrences, concordancier, reconnaissance d'entités, etc.) récupération d'informations présentes sur le Web

production automatique de documents, production automatique de textes : mots préfixe/suffixe, pipotron, conjugaisons, édition numérique, etc. transformation d'un document (restructuration, changement de formats, édition numrique) changement de formats (texte, html, xml, LaTeX).

Ces traitements automatiques sont envisagés de grands volumes de documents/fichiers/textes. Cela justifie de devoir programmer pour automatiser ces tâches.

Langages de programmation pour les textes

Nous nous appuyons sur les principes définis durant le cours d'algorithmique. En particulier, Rappels Définir d'un vocabulaire commun, lisible, non ambiguë. Vocabulaire qui définit des opérations élémentaires : des tâches basiques compréhensibles par tous et réutilisables. Pour concevoir des opérations de plus haut niveau.

Python

Python fournit sa philosophie, voici le début de son Zen :

        Préfère :
              la beauté à la laideur,
              l'explicite à l'implicite,
              le simple au complexe
              et le complexe au compliqué,
              le déroulé à l'imbriqué,
              l'aéré au compact.
        Prends en compte la lisibilité.
        Les cas particuliers ne le sont jamais assez pour violer les règles.
        Mais, à la pureté, privilégie l'aspect pratique.
        Ne passe pas les erreurs sous silence,
        ... ou bâillonne-les explicitement.
        Face à l'ambiguïté, à deviner ne te laisse pas aller.
        Sache qu'il ne devrait y avoir qu'une et une seule façon de procéder
[...]

Ce que nous retenons de la philospophie des caractéristiques du langage Python vis-à-vis de nos contraintes vues en algorithmique et de nos besoins sur les textes :

  1. Langage généraliste, initialement apprécié pour l'enseignement,
  2. pas de déclaration de variables,
  3. pas de déclaration des types,
  4. conversions de types à expliciter,
  5. utf8 par défaut, flux et encodages cachés,
  6. console interactive (Linux ou Windows, Thonny),
  7. librairies et notation objet nécessaires pour les expressions régulières,
  8. les interactions avec le système d'exploitation, etc.
  9. des algorithmes et des librairies à succès déjà disponibles,

Les programmeurs de Python en font différents usages :

  • Programmation « algorithmique »,
  • usage de librairies réputées,
  • concours de programmation et coaching.

Programmation Perl

De la philosophie de Perl, plus caractéristiques semblent pertinentes pour le travail sur les textes. En particulier, Larry Wall etc.

  • Langage glu,
  • syntaxe simple pour les fichiers,
  • facile pour les expressions régulières.

Malgré ces points appropriés pour les textes, d'autres points voulus par Larry Wall nous interrogent :

Voulu proche du langage naturel, permet de dire une chose de plusieurs manières différentes, la sémantique d'une expression dépend du contexte, existence de variables par défaut.

Ces idées sont clairement contraires à nos principes algorithmiques. Finalement,

  1. Pensé pour les textes,
  2. déclaration obligatoire des variables en mode strict
  3. pas de déclaration des types mais trois types « visibles » : $ @ %,
  4. conversions de types implicites,
  5. nécessité d'expliciter les flux et les codages,
  6. intrinsèquement lié à Unix/Linux,
  7. interfaçage avec treetagger, pandoc pour les epub, etc.
  8. fichiers, expressions régulières : aucune librairie nécessaire,

Usages de Perl

  • Programmation « algorithmique »,
  • écriture de poèmes en Perl... ou de programmes d'une seule ligne...
  • recherche des programmes les plus courts, sur une seule ligne.

Bilan sur les langages

utilisation algorithmique dans tous les cas

Python est plus proche de l'algorithmique mais généraliste et pas dédié aux textes. Perl est pensé pour les textes mais plus éloigné de nos préoccupations algorithmiques.

évoquons enfin le langage JavaScript

Les corpus et les productions.

Formats fermés, binaires, propriétaires :

  • obligation d'utiliser le logiciel qui a créé le document,
  • sensible au changement de version du logiciel,
  • interopérabilité nulle ou limitée aux logiciels du même éditeur,
  • pérennité liée à celle du logiciel,
  • mélange du contenu et de la mise en forme,
  • sémantique difficilement appréhendable,
  • taille importante des fichiers.

Conclusion : formats non appropriés aux traitements automatiques.

Un langage ouvert : HTML

fichier texte modifiable avec n'importe quel éditeur, essentiellement du texte, parsemé de balises, HTML : un exemple avec éléments de mise en forme Ne facilite pas les traitements sémantiques... Un document HTML davantage sémantique Aide à l'extraction automatique d'information. Utilisation de CSS (Cascading StyleSheet) Sur les CSS dédiées à l'apparence, permettent du HTML sémantique, graphiquement plus puissantes que le HTML seul.

Le format « Markdown »

Changement de format (pandoc) vers html, epub, LaTeX, etc.

LaTeX

Il s'agit également d'un format basé sur du texte et des instructions, il est ouvert. Les instructions LaTeX permettent de structurer le document. Plus ancien que HTML et destiné à l'édition papier. LaTeX n'est pas WYSIWYG (What You See Is What You Get).

LaTeX désigne aussi le programme qui transforme un fichier LaTeX en un fichier pdf.

TeX créé par Donald E. Knuth en 1978, LaTeX date de 1982, gratuit et fiable, seuls 5 bugs ont nécessité une nouvelle version de TeX en 35 ans d'utilisation, Donald E. Knuth récompense ceux qui découvrent de nouveaux bugs, le dernier : trouvé en 1995, payé 327,68 $, LaTeX respecte les règles de typographie (ligatures, sauts de page, etc.), les documents produits par LaTeX sont prêts à l'impression par un éditeur professionnel.

intérêt donc de produire automatiquement du code LaTeX, pour finalement obtenir des pdf de qualité

Bilan et encodage

attention à l'encodage des textes... UTF-8 ?

être capable de produire ces formats, bénéficier des outils développés par ailleurs pour chaque format

aussi les lire ?

L'environnement : GNU/Linux

logiciel libre et Linux

Éléments constitutifs d'une distribution

  • un système d'exploitation, interface entre matériel et logiciels,
  • en particulier, un système de fichiers,
  • un environnement graphique,
  • des logiciels applicatifs.

parmi les logiciels applicatifs :

  • une console,
  • un éditeur de texte,
  • une suite bureautique (traitement de texte, tableur, etc.),
  • des archiveurs et des compresseurs,
  • des visualisateurs (pdf, images, musiques, vidéos, etc.),
  • un navigateur Web, un lecteur de mail, etc.

Distributions Linux

  • Ubuntu, Mint, Debian, Mandriva, Gentoo, Fedora, etc.
  • environnements graphiques : Xfce, KDE, Gnome, Cinnamon, etc.
  • stratégies différentes dans les choix des logiciels applicatifs
  • et de la fréquence des mises à jour et nouvelles versions.

Peu importe pour nous. Toutes les distributions Linux disposent nativement de Perl et de Python. On n'utilisera que la console, un éditeur de textes, un navigateur.

de plus Linux présente d'autres intérêts pour le traitement des textes

instructions directement dans le terminal, traitement par lot et début de la programmation sur de grands volumes de documents

MacOS

Linux : fichiers

Système de fichiers. Principe : le système est organisé en hiérarchie de répertoires et de fichiers. Le premier point est de maîtriser ces notions. Le deuxième est d'avoir en tête où vous êtes à chaque étape d'un parcours de cette arborescence, et où sont les fichiers qui vous intéressent.

Notations principales :

  • les deux points .. désigne le dossier parent du dossier dans lequel vous vous trouvez,
  • l'étoile * désigne tous les fichiers du dossier courant.

Commandes Linux

Navigation dans l'arborescence de fichiers

  • cd changer de dossier
  • ls lister le contenu d'un dossier

Traitements des fichiers textuels

  • wc nombre de lignes, mots, caractères
  • grep recherche dans le contenu
  • cut extraction
  • sort tri des lignes
  • uniq lignes sans répétition

find recherche sur les noms des fichiers.

Extraction du texte des documents

  • pdftotext extraction depuis un pdf
  • tesseract OCRisation depuis une image

Interpréteurs :

  • python extraction depuis un pdf
  • perl OCRisation depuis une image

Syntaxe des instructions et exemples

Passons en revue les syntaxes possibles pour une commande cmd.

cmd commande sans paramètre
ls
passage de paramètres typiquement un seul paramètre, le nom d'un fichier à traiter cmd param1 param2 ...
pdftotext document.pdf
tesseract scan.pdf résultat

perl .pl
python .py
Outre les paramètres à traiter, le comportement des commandes peut-être modulé par des options cmd -opt1 -opt2 ... params
ls -l
ls -l -h
ls -lh

grep -rwi

pdftotext -layout
tesseract -l fra scan.pdf résultat

les enchaînements (pipe)

cmd1 | cmd2
grep coucou document.txt | wc -l

Accueil > Enseignement > Cours > Programmation > Textes et Linux
(contenu mis à jour )
site de Fabien Torre, université de Lille

Description

Survoler un lien de navigation pour lire sa description ici...


Une photo au hasard

Week-en en Picardie.

Pierrefonds.

(le 8 septembre 2007)

Le château de Pierrefonds.