Séance 8: Dictionnaire Flashcards
Comment on règle le problème des caractères accentués dans le tri ?
import re
import locale
locale.setlocale(locale.LC_ALL, ‘’)
texte = open('untexte.txt','r').read() mots = re.split('\W+',texte)
mots.sort(key=locale.strxfrm)
for m in mots:
print(m)
LOCALE : va chercher la langue d’exploitation de Windows et Python l’utilise dans le tri
LOCALE.STRXFRM : tient en compte les majuscules et les caractères accentués
À quoi peut servir un tableau associatif?
Permet de faire un index comportant des clés et des valeurs
ex: À faire un index en fin d’ouvrage (garder les NOMS avec une fréquence importante)
Quelle est la différence entre une liste et un tableau associatif?
À la place d’un numéro de cellule associé à une valeur, il y a une clé et une valeur
Comment on crée un TA et comment on y ajoute les informations?
D = {} => créer un TA vide
D[‘clé’] = ‘valeur’
…
OU
D = {‘clé’ : ‘valeur’,’clé’ : ‘valeur’}
On ajoute toujours en paires
Pourquoi il est plus vite d’utiliser un TA pour afficher une valeur?
Avec print(D[‘maison’]) => nom
À la place de tout passer les valeurs comme une liste, il fragmente la clé en caractères, va chercher une valeur numérique pour chacun, fait un calcul et cela lui donne un numéro de cellule…. il va à cette cellule-là et affiche la valeur correspondante. Plus rapide que de vérifier chaque cellule une après l’autre avec des comparaisons.
Comment imprimer les clés à partir des valeurs?
Impossible, seulement le contraire. On entre les valeurs par les clés.
Comment imprimer les clés ET les valeurs? En ordre alphabétique?
for clé, valeur in F.items():
print (clé,valeur)
for clé in sorted(F,key=locale.strxfrm):
print(clé+’: ‘,F[clé])
*ne fonctionne pas avec F.items
Autres instructions
Voir doc word
À quoi sert defaultdict?
si le mot n’est pas déjà dans le dictionnaire, il se fera attribuer la valeur 0 à laquelle on ajoute 1
Comment se créer un dictionnaire des mots dans notre texte avec leur fréquence?
- Ouvrir le texte
- Le séparer en mots
- Créer un tableau F avec defaultdict
- Si le mot est déjà dans le tableau, augmenter sa fréquence de 1 et si non l’ajouter et mettre sa valeur à 1
- Imprimer le mot et sa valeur
Comment trier les fréquences du dictionnaire en ordre croissant ? décroissant ?
Croissant :
for mot in sorted(F,key=F.__getitem__):
print(mot+’: ‘,F[mot])
Décroissant :
for mot in sorted(F,key=F.__getitem__,reverse=True):
print(mot+’: ‘,F[mot])
**pu besoin de locale
sorted((1)IND,(2)key=IND.__getitem__,(3)reverse=True) :
1) je veux trier IND /
2) la clé, l’instruction à tenir compte est selon les fréquences (tj une caractéristique des valeurs, mais le résultat affiché est les clés) / 3) l’ordre voulu est inverse
Quelle est la première étape pour utiliser un dictionnaire fourni?
Observer la structure du dictionnaire (comment sont délimitées les entrées, catégories grammaticales principales vs secondaires…) + si les mots sont en maj/min
ex: clé et valeur séparés par TAB
Comment importer un dictionnaire fourni dans Python pour en faire un TA?
- Ouvrir le texte avec l’identificateur de fichiers
2.Créer un TA vide
3.Le remplir avec une itération sur le texte en enlevant le caractère de changement de ligne (fragmenter la clé et la cellule à la tabulation)
elements = re.split(‘\t’,ligne.rstrip())
D[elements[0]] = elements[1]
Comment consulter le dictionnaire/comparer avec le texte analysé?
1.Faire une itération : pour les mots du texte qui sont dans le dictionnaire, imprimer la clé, puis la valeur
for mot in M:
if mot.lower() in D:
print (mot+’: ‘,D[mot.lower()])
2.Pour les mots pas dans le dictionnaire, les imprimer
else:
print(mot+’absent du dictionnaire’) => intéressant pour néologismes
Comment trouver les noms dans un texte?
En utilisant une expression rationnelle.
- Mettre les catégories (valeurs) dans une variable categories
if mot.lower() in D:
Categories = D[mot.lower()]
2.Rechercher ‘nom’ dans catégories
if re.search(‘Nom’,’Categories’):
Programme complet :
import re
dict = open('dictionnaire.txt','r') D = {} for ligne in dict: elements = re.split('\t',ligne.rstrip()) D[elements[0]] = elements[1]
T = open('untexte.txt','r') texte = T.read() M = re.split('\W+',texte)
for mot in M: if mot.lower() in D: Categories = D[mot.lower()] if re.search('Nom',Categories): print(mot)