.1. Introduction | 0.1. Résumé | ||
.0.2 Abstract | 0.3. Mots-clefs | ||
.2. Changement de sujet } | A. B. |
Graphique des phrases dans Hamlet Tableau des tirades dans Hamlet |
|
.3. Continuité du discours } | C. D. |
Graphique des phrases, Terre des hommes Tableau des paragraphes de Terre des hommes |
|
.4. Autres figures | E. | Graphique des phrases dans Pilote de guerre | |
.4.1 Constance | F. | Tableau sur la continuïté, Pilote de guerre | |
.4.2 Déclin | G. | Tableau sur le déclin pour Pilote de guerre | |
.4.3 Accroissement | H. | Tableau sur l'accroissement, Pilote de guerre | |
.4.4 Chute | I. | Tableau sur la chute pour Pilote de guerre | |
.4.5 Superposition | J. | Tableau sur la superposition, Pilote de guerre | |
.5. Application d’un nuage de bulles aux mots-outils | K. | Graphique sur les mots-outils, Le Petit Prince | |
.6. Conclusion | |||
.7. Une bibliographie indicative sur le longueur des phrases |
.A. | Graphique en secteur du volume de l'œuvre |
.B. | Graphique du volume de l'œuvre avec Citadelle |
.C. | Tableau du relevé des occurrences pour l'étude |
.D. | Tableau du relevé des occurrences dans Frantext |
.A. Mots commençant par e | |
.B. Prénoms, pays et communes fr. | .F. Caractères spéciaux |
.C. Abréviations | .G. Interjections |
.D. Mots-outils et assimilés | .H. Dictionnaire des catégories |
.E. Mots composés | .I. Dictionnaire des noms propres |
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.
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.
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.
|
|
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.
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.
|
|
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.
|
|
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].
|
|
|
|
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.
|
|
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).
|
|
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,";").
|
|
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).
|
|
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.
|
|
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/
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/
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
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
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 |
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 - 2024 |