c
a
d
r
a
t






  Entrée 
   Études    
    Programmation  
     Langage  
 
+  Des ressources en corpus, isotopies et programmes
+  Des articles d’ études sur le traitement automatique de la langue
+  Les pages du site pour des recherches, informations, résumés...


     le langage Python      §II.3.2. 
La page de description du langage Python

 1.      II.3.2.1.  langage Python

Python a été écrit en 1990 par Guido Van Rossum à l’Université d’Amsterdam. Il est revendiqué comme libre de droit. La licence Python l’expose compatible GPL et l’article wikipédia le dit proche de la BSD. Il s’inscrit ainsi dans la philosophie du logiciel libre, consistant à ouvrir le code source pour laisser toute possibilité d’adaptation, d’amélioration et dans une certaine mesure d’appropriation. Il sert à de nombreux types d’applications, comme le logiciel libre d’animation 3D, Blender, et le site officiel met en avant son utilisation dans des réalisations par la Nasa.

Il est généralement comparé à d’autres langages comme Java ou Perl. Des sites dédiés et des articles font état du classement des langages, (most popular programming languages), et situent régulièrement Python dans les dix plus utilisés. Les hébergeurs de site mutualisés les plus connus le proposent aux côtés de Perl et de PHP pour l’exécution de scripts côté serveur (en version 2.6.6). Ce dernier n’est pas nécessairement en concurrence, notamment parce que Python est plus généraliste qu’un PHP plus spécifique à Internet. Même si Python est moins à l’aise avec Internet, avec moins de fonctions natives consacrées à cet environnement que PHP, il permet de développer un même programme pour en faire un logiciel installable et une application en ligne. En prenant en compte quelques éléments (les versions de Python, l’entête d’identification, l’affichage HTML du programme et les ressources de la machine sollicitée), un même code en .py s’exécute sous un système d’exploitation Linux, en serveur distant ou en station de travail, se compile en un exécutable Windows. Il existe aussi des versions de Python pour iOS et Android. C’est Python qui a été choisi pour réaliser notre programme de catégorisation, et qui fait fonctionner le présent site pour les tâches de fond mettant à jour la page d’actualité. À titre d’illustration de la question de compatibilité entre la version 2. et 3. et de celle de portabilité, ces tâches de fond ont un même script pour les version Windows et Linux, ainsi que pour les deux versions, donc rétro compatible de la 3 vers la 2. Cela nécessite des ajustements et des redondances, mais démontre que le problème n’est pas insoluble.

Des documentations bien conçues et en français existent format PDF, pour l’initiation, et en synthèse (version 2). C’est cette documentation qui a servi (avec Dive Into Python) pour la création de notre programme. Son installation et son lancement sont simples, et une saisie peut s’opérer dans une console, ce qui permet de tester des lignes de commandes sans avoir à sauvegarder et lancer un programme.

Ses points faibles sont sa lenteur, qui concerne malheureusement tous les langages non compilés, c'est-à-dire à l'inverse de C++ ou Java, qui se chargent eux-même de la compilation, encore que ce dernier soit loin d'être une référence en la matière. L'on pourrait évoquer les quelques ratés de compatibilité d'une version à l'autre, problème récurrent de tout langage de programmation, que cependant l'accès libre permet parfois de résoudre. Question encore d'actualité, avec les difficultés entre PHP version 4 et 5, ou la dernière version de Python, la 3, apparue en février 2009, (la 3.6. de décembre 2016) qui est un remaniement des fondements du langage. Il faut espérer une transition sans trop de difficulté pour les applications déjà existantes afin d’éviter la coexistence de deux Python. Les évolutions de la version 2 se poursuivent toutefois régulièrement, avec la 2.7.13. de décembre 2016. Au départ de l'écriture du programme de catégorisation (Python 2.2.) , il existait des difficultés d’installation et d’exploitation de certains modules (Gadfly pour les bases de données, PyExe pour en faire un exécutable sous Windows) à l'opposé de la facilité d'autres librairies (Re pour les expressions régulières, TKinter pour le graphisme).

Sa syntaxe apparaît simple, ainsi à vocation pédagogique, et n’est pas sans rappeler le Basic, lequel langage équipait les tout premiers micro-ordinateurs grands publics, dont le prototype de Python, le langage ABC, se concevait d’ailleurs comme son successeur. L’écriture du code est indentée et offre donc une clarté dans la mise en page, facilitant la recherche d’informations et la compréhension du programme par un tiers, ce qui se révèle particulièrement intéressant pour améliorer un système qui est expérimental et qui nécessite d’être constamment mis à l'épreuve. Si elle est aussi source de peu de liberté de mise en page, elle est à l’usage simple et pratique, et s’assortit assez bien avec l’esprit de la programmation objet, suggérant l’écriture de procédures courtes.

Python est en effet orienté objet, c’est-à-dire facilitant la réutilisation de morceaux du programme aux fonctions similaires, évitant la réécriture permanente, une architecture trop linéaire, et donc la surcharge dans la rédaction. Elle permet d’envisager une programmation modulaire et la fabrication de logiciels importants par la taille. Les langages comme PHP 5 ou Perl l'ont intégrée ou développée. Si la programmation objet est native en Python, à savoir inhérente au langage, elle n’est pas un handicap à la rédaction de programmes, contrairement par exemple à JavaScript qui implique de se familiariser assez rapidement avec le concept d'association des méthodes à leur objet. Il s'agit d'une caractéristique de ce langage : la programmation multi-paradigme, qui laisse une liberté d'approche pour la rédaction du code.

 2.      II.3.2.2.  le traitement du texte avec les chaînes et listes

Le principe des chaînes de caractères et des listes est décrit afin d’illustrer les phases de catégorisation, comme le découpage du texte en mot. L'écriture repose entièrement sur les crochets. Cette convention est plus souple que C++ ou PHP, qui supposent de définir l'équivalent des listes : les tableaux, en array.

Les chaînes (§ 2.1.) traitent la forme de caractère en caractère, où la notion de mot est absente, puisque le texte est considéré comme un bloc de lettres. Les expressions (§ 2.2.) sont des chaînes, mais à paradigmes multiples, permettant d'effectuer des manipulations complexes de lettres et de groupes de lettres (et donc atteindre le niveau du mot ou de la phrase). Les listes (§ 2.3.) traitent une forme comme un bloc de caractères, forme par forme, autrement dit en mots ou en syntagmes. Les chaînes et les listes peuvent être imbriquées, pour gérer autant le détail d’une forme que la forme elle-même par rapport à d’autres. Les listes imbriquées sont aussi appelées tableau multi-dimensionnel.

Ce sont ces niveaux de manipulations qui vont permettre de matérialiser tous les morceaux d’opérations pour un traitement global du texte. L’important pour la linguistique est de retenir les concepts de métaplasme (modification de la chaîne) de niveau syntagmatique (liste) d'arborescence (liste imbriquée) et de basculement (passage de la liste à la chaîne), et retrouver ainsi les différents niveaux d’analyse du texte, du morphème (chaîne) à la phrase (liste).

La chaîne (string en anglais) traite le niveau des lettres, des graphèmes et du morphème, du mot : 'langage'
La liste ou tableau (array en anglais) traite le niveau des mots et de la phrase, de la syntaxe : ['langage','de','programmation']
La liste imbriquée ou tableau multi-dimensionnel traite le niveau des phrases et du texte, du corpus : [ ['langage','de','programmation','.'],['ingénierie','linguistique','.'] ]

Il existe aussi un niveau supérieur : les dictionnaires. Il s'agit d'associer un marqueur à chaque chaîne ou groupe de chaînes. Cela permet de retrouver la valeur d'une chaîne autrement que par sa position à la manière d'une base de données. La syntaxe est différente des listes, utilisant l'accolade en place du crochet.
Le dictionnaire ou tableau associatif traite le niveau des phrases et du texte, du corpus, à l'aide des marqueurs : dictionnaire = { 'outil' : ['langage','de','programmation','.'], 'domaine' : ['ingénierie','linguistique','.'] }. Javascript et PHP possèdent aussi ce principe, lequel est appelé tableau associatif et le marqueur : un index ou clé. Javascript use d'une syntaxe similaire, avec un repère est de type variable objet plutôt que chaîne. PHP l'emploie en tant qu'extension des tableaux. Les niveaux chaînes, listes et dictionnaires peuvent se combiner.


 2.1.      II.3.2.2.1.  chaînes

 2.1.A.   Chaîne avec extraction 

Les tranformations lexicales les plus simples s’opèrent sur la syntaxe des crochets, cela nous permet par exemple de demander les trois derniers caractères de la dernière forme, un suffixe : l’instruction b[3][-3:] affiche « age ». La première information est son rang dans la liste, à partir de zéro et la seconde est son rang dans la chaîne en partant de la fin. Il s'agit d'une apocope, mais comme la suppression des graphèmes ne tient pas compte de la phonétique, la tranche peut-être arbitraire.




>>> b = 'langage'
>>> b[3][-3:]
'age'

 2.2.      II.3.2.2.2.  chaînes en requête

Les transformations les plus complexes au niveau de la chaîne s'opèrent avec les expressions régulières. Il s’agit d’un cas rare de compatibilité entre langages de programmation, l’expression régulière est quasi-identique que ce soit en Perl, en PHP ou en Python, seules les instructions pour la réaliser diffèrent.


 2.2.B.   Chaîne recherchée 

La première ligne est l'importation du module des expressions régulières. La ligne suivante demande de chercher n'importe quel décimal à deux chiffres suivi d'un « h » puis de deux autres décimaux. Si cela est le cas, il est affiche « trouvé ! ». Le u (pour unicode) après l'instruction search spécifie que la chaîne peut contenir des accents.




>>> import re
>>>
if re.compile("\d\dh\d\d").search(u"il était 14h45.") is not None:print "trouvé ! "
'trouvé !'   

 2.2.C.   Chaîne extraite 

L’instruction findall permet de sortir d’une chaîne une expression recherchée si celle-ci s’y trouve. L’exemple ci-dessous demande d’extraire n’importe quelle chaîne de n’importe quelle longueur comprise entre les chaînes "<title>" (laquelle est une balise HTML), grace à la requête point + astérisque .* et l’isoler en la mettant entre parenthèses (.*). En l’absence de parenthèses capturantes, le résultat aurait inclus la chaîne title.




>>> import re
>>> mot_ou_expression = re.findall("<title>(.*)</title>","<title>notule</title>")
>>> mot_ou_expression[0]
'notule'    

 2.2.D.   Chaîne modifiée (pas à pas) 

Pour traiter par exemple les sigles : la ligne 5 demande de repérer n’importe quel caractère précédé d’un espace suivi d’un point, puis la suivante de reprendre ce caractère et ce point pour en changer juste le point en dièse. L’intérêt est de ne pas simplement remplacer tous les points mais seulement un caractère plus un point. Comme il peut il y avoir plusieurs résultats, l’on ne demande que la première occurence avec les crochets et 0 mot_ou_expression[0].




>>> import re
>>>
mot_ou_expression= " (\w)\."
>>> phrase="Python 2.6 est un langage..."
>>> remplacement= " \\1#"
>>> e=re.compile(mot_ou_expression)
>>> f=e.sub(remplacement,phrase)
>>> print f
'Python 2#6 est un langage...'    

 2.2.E.   Chaîne modifiée (en une seule instruction) 



>>> re.sub(" (\w)\."," \\1#","Python 2.6 est un langage...")
'Python 2#6 est un langage...'    


 2.3.      II.3.2.2.3.  listes

 2.3.F.   Liste imbriquée créant une arborescence 

Nous entrons à la ligne 1 une variable a possédant les valeurs « python » et « 2.4 », qui correspondront respectivement aux positions 0 et 1. La ligne 2 inclut a dans b pour les valeurs « python » « 2.5 » en position 0, et « est », « un », « langage » respectivement en postion 1, 2 et 3. À la ligne 3, la demande d'affichage de b nous donne donc les valeurs avec une liste imbriquée. À la ligne 6, l'affichage de b pour la seule position zéro donne les deux valeurs. À la ligne suivante est demandée à l'intérieur de cette liste une autre position, celle à 1, et affiche donc « 2.5 » à la ligne 8.




>>> a=["Python","2.6"]
>>> b=[a,"est","un","langage"]
>>> b
[['Python', '2.6'], 'est', 'un', 'langage']
>>> b[0]
['Python', '2.6']
>>> b[0][1]
'2.6'

 2.3.G.   Liste imbriquée au format Notule 

La ligne 1 contient le format d'une étiquette pour notre programme de catégorisation. En première position se trouve la forme, puis la nature, c'est-à-dire le lemme et sa classe, ensuite, en troisième, son marqueur, et enfin une éventuelle information, ici par défaut neutre. La ligne 2 appelle la position de la forme, et la 4, celle de la classe. C'est à partir de cette étiquette que vont s’appliquer les règles et que vont être éliminées les autres natures (ou choisie la bonne).




>>> etiquette=[[['ai'], ['*avoir', 'Ver:IPac+SG+P1'], ['/amb'], ['info']], [['vraiment'], ['*vraiment', 'Adv:Manr'], ['/amb'], ['info']], [['trouv\xe9'], ['*trouver', 'Vpp:PPas+Mas+SG'], ['/amb'], ['info']]]
>>> etiquette[0][0][0]
'ai'
>>> etiquette[0][1][1]
'Ver:IPac+SG+P1'

 2.3.H.   Basculement d’une chaîne vers une liste 

Un basculement s’effectue entre le niveau chaîne et le niveau liste pour par exemple transformer « python », « est », « un », « langage » en « python est un langage », et vice versa, disponible dans le module string. Le point de repère pour le découpage ou la soudure est par défaut l’espace, et peut être défini, par exemple le point-virgule : string.split(c,";").




>>> import string
>>> b=["Python","est","un","langage"]
>>> c=string.join(b)
>>> c
'Python est un langage'
>>> d=string.split(c)
>>> d
['Python', 'est', 'un', 'langage']

 2.3.I.   Liste avec nouvel élément 

Une fois l’énoncé découpé en liste, il est possible de manipuler celle-ci, puis de revenir à une  chaîne. La première instruction insère une chaîne numérique dans la liste, la deuxième ajoute les points de suspension en fin de liste, puis la troisième ligne la ramène à une chaîne. Les lignes 2 et 3 montrent aussi une syntaxe un peu différente, correspondant respectivement  à d[len(d):]=["..."] et à d=string.join(d).




>>> d[1:1]=["2.6"]
>>> d.append("...")
>>> d=' '.join(d)
>>> d
'Python 2.6 est un langage ...'  

 2.3.J.   Liste parcourue 

La manipulation de listes a aussi lieu avec son parcours. C’est cette phase qui nécessite le plus de temps et qui doit retenir l’attention pour pallier la difficulté, différenciant vraisemblablement une programmation de moindre qualité qui déroule systématiquement le corpus, d’une rédaction plus fine qui se rend là où l’information est la plus pertinente, évitant ainsi que la boucle ne passe par de nombreuses phases de vides.

L’instruction va afficher chaque valeur de g, c’est-à-dire chaque forme de la variable b. La virgule accrochant simplement la forme précédente.




>>> for g in b:
       print g,
'Python est un langage'  

 3.      II.3.2.3.  liens

 3.1.      II.3.2.3.1.  documentation


     Installation, synthétique, (Guillaume Duriaud)  « Développez.com » (version 2)
http://guigui.developpez.com/Tutoriel/Python/PythonWindows/
     Cours débutant, (Gérard Swinnen)  « Inforef » (version 2)
http://inforef.be/swi/python.htm
     Cours pédagogique, installation (6pri1 et prolixe)  « Open Classrooms » (version 3)
http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-python
     Cours synthétique, (Jérôme Tschanz)  « Ceramiko » (version 2)
http://python.50webs.com/
     Documentation officielle traduite, (Olivier Berger)  « olivierberger » (version 2)
http://olivierberger.org/python/
 

 3.2.      II.3.2.3.2.  ressources


     Liens, « Python-eggs »  (version 2)
http://www.python-eggs.org/
     Tutoriels, « Développez.com »   (version 2 et 3)
http://python.developpez.com/
     Officiel, en anglais « Python.org »  (version 2 et 3)
http://www.python.org
     Association Francophone PYthon, « AFPY »  (version 2)
http://afpy.org/
 

 3.3.      II.3.2.3.3.  code

     FAQ, « Développez.com »  (version 2)
http://python.developpez.com/faq/?page=sommaire/
     IAQ, Infrequently Answered Questions, en anglais « Peter Norvig »  (version 2)
http://www.norvig.com/python-iaq.html
     Astuces et divers codes, « Wikipython »  (version 2)
http://wikipython.flibuste.net/
     Initiation et réalisations en vidéo, «  Pythonneries » (version 2 et 3)
http://www.dailymotion.com/user/pythonneries/1
 

 3.4.      II.3.2.3.4.  expressions régulières


     Description détaillée, en anglais « Regular expression operations »  (version 2 et 3)
http://docs.python.org/library/re.html
     Description synthétique, en anglais «  Regular expressions »  (version 2)
http://www.regular-expressions.info/python.html
     Approfondi, (A.M. Kuchling) en anglais « Regular Expression HOWTO »  (version 2.7)
http://docs.python.org/howto/regex.html

 3.5.      II.3.2.3.5.  traitement linguistique


       Boîte à outils et corpus, en anglais « Natural language Toolkit »  (version 3)
http://www.nltk.org/
 


     Des ressources en corpus, isotopies et programmes
    [...]
       Un recueil de liens (textes, mots et langage Python)
         Liens sur le langage Python    II.3.2.3.  
    [...]
       Un spicilège de codes 
         Le programme des verbes fléchis pour le corse, en Python
         Le programme du découpage lexical en Python
         L’utilisation et le code de la catégorisation grammaticale  pour le français, en Python
     La page d’accueil
     Le sommaire des pages

       Site       motte 0.5  
       Imprimer  
     Rédaction : 01.04.2004      Publication : 01.05.2006     Révision : 18.12.2012 / 16.09.2014 / 20.02.2015 / 30.09.2015 / 07.10.2015
      http://cadrat.saynete.net2003 - 2018