Séance 8: Dictionnaire Flashcards

1
Q

Comment on règle le problème des caractères accentués dans le tri ?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

À quoi peut servir un tableau associatif?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Quelle est la différence entre une liste et un tableau associatif?

A

À la place d’un numéro de cellule associé à une valeur, il y a une clé et une valeur

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Comment on crée un TA et comment on y ajoute les informations?

A

D = {} => créer un TA vide
D[‘clé’] = ‘valeur’

OU

D = {‘clé’ : ‘valeur’,’clé’ : ‘valeur’}

On ajoute toujours en paires

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Pourquoi il est plus vite d’utiliser un TA pour afficher une valeur?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Comment imprimer les clés à partir des valeurs?

A

Impossible, seulement le contraire. On entre les valeurs par les clés.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Comment imprimer les clés ET les valeurs? En ordre alphabétique?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Autres instructions

A

Voir doc word

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

À quoi sert defaultdict?

A

si le mot n’est pas déjà dans le dictionnaire, il se fera attribuer la valeur 0 à laquelle on ajoute 1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Comment se créer un dictionnaire des mots dans notre texte avec leur fréquence?

A
  1. Ouvrir le texte
  2. Le séparer en mots
  3. Créer un tableau F avec defaultdict
  4. 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
  5. Imprimer le mot et sa valeur
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Comment trier les fréquences du dictionnaire en ordre croissant ? décroissant ?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Quelle est la première étape pour utiliser un dictionnaire fourni?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Comment importer un dictionnaire fourni dans Python pour en faire un TA?

A
  1. 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]
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Comment consulter le dictionnaire/comparer avec le texte analysé?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Comment trouver les noms dans un texte?

A

En utilisant une expression rationnelle.

  1. 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)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Quel est le problème quand on applique la recherche des noms aux prépositions? Quelle est la solution?

A

Il y a Pre ailleurs (dans les valeurs, les clés…)

On doit utiliser les bornes de mots (\b \b) pour que ça soit seulement quand Pre est le mot au complet

if re.search(‘\bPre\b’,categories):
print(‘ ‘.join(M[x-2:x]),’‘+mot+’’,’‘.join(M[x+1:x+3]))

=> avec contexte de cellule

sans : 
 if mot.lower() in D:
        Categories = D[mot.lower()]
if re.search('\\bPre\\b',categories):
print(mot)
17
Q

Quelles sont les 3 manières d’afficher les 25 mots les plus fréquents d’un texte?

A

MÉTHODE 1 : Avec un tableau des mots filtrés

  1. Se créer un tableau clefs2 et y ajouter (avec append) les mots du tableau clefs (clefs = sorted(F,key=F.__getitem__,reverse=True) qui ont une longueur de plus que 4
  2. imprimer les 25 premiers mots du tableau (déjà trié en ordre inverse des fréquences)

MÉTHODE 2 : Avec un compteur

1.Faire une itération : pour les mots in clefs qui ont une longueur de plus de 4 et quand le compteur est plus petit que 25, print le mot et monte le compteur

PROBL: continue à faire l’itération sur tout le tableau, il l’affichera pu mais il passe les mots au complet

MÉTHODE 3 : Avec break

  1. Faire une itération : pour mot in clefs qui a plus de 4 caractères, l’imprimer et monter le compteur
  2. break (arrête) l’itération quand i == 25