LTAL, TP 07.09

Commencez par la préparation de votre environnement de travail. Construisez un dossier pour vos programmes, et (éventuellement) un autre pour vos données : textes, grammaires, etc. Pensez à sauvegarder régulièrement vos ressources (par ex. sur les clés USB). Renouvelez votre connaissance avec Python (nécessaire en toute indépendance de cette option)

Vérifiez SVP si les solutions/commentaires sont déjà en ligne.


Analyse des textes (1)

Le traitement informatisé des entités linguistiques ne se réduit pas à l'analyse des textes, un texte est une représentation statique, discrète d'un flot d'information correspondant aux entités infiniment plus complexes : dynamiques, contextuelles, souvent ambiguës. Mais il faut commencer par quelque chose...

Puisque nous allons travailler sur des textes (en Python : chaînes de caractères et fichiers, locaux et distants), vous devez disposer d'une base textuelle, d'un corpus. On aura besoin de quelques textes en vrac, pour votre propre travail d'analyse, ainsi que de textes annotés, bases de données étiquetées et cherchables, dictionnaires lexicaux, etc. L'Internet vous offre plusieurs échantillons textuels, et le paquetage NLTK [introduit plus tard] dispose également de plusieurs sources. Pour commencer, je vous recommande de faire connaissance avec les suivantes (cette liste pourra évoluer !).


1. Données textuelles en Python, manipulation de base

On considère que vous disposez de Python en état de marche, et que vous savez comment écrire et lancer les programmes typiques, en utilisant une des interfaces disponibles sur votre plate-forme (Idle, IPython, SPYder, Eclipse, Geany, Emacs, ... tout ce que vous voulez). En cas de problèmes avertissez-moi.

Ici vous trouverez, en texte HTML le contenu de la Déclaration universelle des droits de l'homme de 1948 en français. Si vous voulez, la rubrique "Traductions" en contient d'autres versions nationales, ce qui pourra nous être utile un jour.

Exercice 1. Effectuez les deux opérations suivantes.

Affichez le contenu. Comparez les deux chaînes (ou séquences, si vous voulez) obtenues par ces deux moyens. Montrez-moi la comparaison. Est-ce que la reconnaissance du codage était correcte? [D'ailleurs, si vous voulez copier dans un fichier local ce texte avec les balises HTML, je vous en prie, pour l'instant ceci n'a pas d'importance, mais les balises "< ... >", c'est du bruit].

Le texte sur le site a été encodé en UTF-8, qui est devenu le standard le plus populaire pour les textes multilingues sur le Web. Cela signifie que la lecture qui passe par l'URL, si l'ouverture de l'adresse n'a pas prévu le paramètre charset, risque de donner des résultats différents de la lecture locale ; elle peut utiliser par défaut le codage ISO-Latin 1 (ou ISO 8859-1 un autre standard international, mais restreint à quelques langages occidentaux)... Ceci dépend de la configuration du réseau.

De toute façon, puisque le contenu d'un site Web peut être non-textuel, read() appliqué au résultat de urlopen produit une donnée d'un autre type qu'une chaîne (str, liste de caractères). Quel est ce type? Vérifiez le type des éléments de cette collection.

Appliquez decode('utf-8') à cette donnée. Est-ce que le résultat est égal à la chaîne lue localement? Si nous voulons traiter une chaîne comme une liste/tableau de caractères, quelle représentation semble propice?

Exercice 2. Revisez vos connaissances des dictionnaires Python. C'est la structure de données composite la plus importante pour nous, et également fondamentale pour la construction des entités orientées-objet !

Exercice 3. Envoyez à mon adresse mail les résultats de votre analyse fréquentielle. Le but de cette manipulation est la vérification si vous arrivez depuis vos postes dans la salle des machines, envoyer correctement quelque chose à mon adresse. Considérez ceci comme un travail obligatoire, sans note.


2. Premier rencontre avec NLTK

Exercice 4. Le chapitre 3 du livre sur NLTK contient plusieurs informations sur le traitement des chaînes en Python, sans ou avec le paquetage.

En particulier, NLTK possède une classe FreqDist qui effectue l'analyse fréquentielle des caractères dans une chaîne ou des mots dans une liste, etc. (c'est universel : dct=nltk.FreqDist(sequence). Ensuite dct peut être utilisé comme un dictionnaire, et en utilisant items() vous pouvez imprimer la liste résultante). Voir le chapitre 1 du livre.

Si vous avez encore un peu de temps, apprivoisez cet outil, lancez-le pour la Déclaration DH, et comparez les résultats avec les vôtres.

Bien sûr, cet exercice est soumis à la condition que NLTK approprié avait été installé sur nos machines, ce qui n'est pas évident. Si le paquetage ne marche pas ici, rien ne vous empêche de faire cette expérience chez vous.


Exercice 5. Wikipédia présente un graphique avec ces fréquences. Matplotlib vous permet de le faire en 3 - 5 lignes de code. Faites-le, si vous connaissez Matplotlib, sinon commencez son apprentissage. Il nous sera utile tout le temps.


Solutions (à venir)

Semaine suivante
Retour à l'index