Nous allons manipuler une collection de documents avec le langage python et illustrer empiriquement la loi de Zipf.
Le langage python est un langage interprété fortement typé. Il prend en charge les expressions régulières avec le module re (regular expression). Vous pouvez trouver une référence à python en https://docs.python.org/2.7/.
* Les structures de contrôles sont les mêmes qu'en langage C avec syntaxe un peu différente. * Le mot-clef def FonctionTest permet de définir des fonctions en python. } ⇒ Appel: FonctionTest * Pour ouvrir un fichier f = open(“Chemin/Nom de fichier”);
*Pour découper les chaines de caractères en mots, on utilisera la librairie python nltk, qu'on installe dans un terminal en lançant la commande 'pip install –user nltk'. Pour découper les mots, on créée un : tokenizer = RegexpTokenizer('[A-Za-z]\w{1,}') qui utilise un expression régulière qui découpe en token et garde les mots commenĉant par une lettre, suivi d'au moins une lettre ou d'un chiffre, et les place dans le tableau words, suivant leur ordre d'apparition. Infaut alors importer en début de programme “from nltk.tokenize import RegexpTokenizer”.
Utiisation d'un tokenizer :
words = “This is random 23 we are going to split apart”
words2 = tokenizer.tokenize(words)
words2 ⇒ ['This', 'is', 'random', 'text', 'we', 'are', 'going', 'to', 'split', 'apart' ]
* Pour afficher des courbes, il est possible de passer par matplotlib de python : https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py.
* Il ne faut pas oublier que python est très sensible aux tabulations, car il n'utilise pas de séparateurs comme les parenthèses du language C.
* Une structure de donnée très utile en python est le dictionnaire. C'est un tableau dont les indices ne sont pas des entiers mais des chaînes de caractères.
dico={} dico["toto"]=12 print dico["toto"]
affiche 12.
* Il est possible de passer en revue les éléments d'un dictionnaire en le triant par ses valeurs en utilisant :
from operator import itemgetter dico={} ... for elem in reversed(sorted(dico.items(), key = itemgetter(1))): ...
* Ne pas oublier de passer les mots en minuscule avant de calculer le nombre d'occurrences (s2 = s1.lower())
On consière un ensemble de 3204 documents, stockés dans un fichier zip en http://mrim.imag.fr/User/philippe.mulhem/MIASHS/cacm.zip).
On vous fournit un squelette de code python capable de passer en revue les documents, si vous donnez le répertoire dans lequel ces fichiers sont. Ce fichier est en split_cacm_miashs.py.zip. Il ouvre tous les fichiers d'un répertoire et prépare les traitements sur les mots lus.