
Typing test : http://typingtest.aalto.fi/
Travail à réaliser :
I. Distance entre deux mots
1. Créer un algorithme permettant de trouver la distance entre deux mots de même longueur.
Documentez et expliquez votre algorithme avec un diaporama
II. Distance enre un mot et les mots d’un dictionnaire
2. Créer un algorithme permettant de trouver la distance entre un mot (ou un début de mot) et les mots d’un dictionnaire. Tous les mots ont la même longueur de 4 lettres. L’utilisateur saisit 1, 2, 3 ou 4 lettre(s).
Utilisez le script de démarrage : 00-start.py
Etape 1 : Tout d’abord, vous pouvez afficher la suite des distances entre le mot rentré par l’utilisateur et chaque mot du dictionnaire. Le programme affichera une suite de chiffres comme suit (stockés dans une liste) :
Cas 1 : [0, 2, 2, 2, 2, 2, 1, 2, 2, 2, 3, 3, 3, … pour EntreUtilisateur = « ABAT » si l’utilisateur écrit correctement un mot.
Cas 2 : [1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 2, 3, … pour EntreUtilisateur = « ABAS » si l’utilisateur fait une faute de frappe et que le mot n’est pas dans le dictionnaire.
Etape 2 :
Dans le cas 1, aucune intervention n’est nécessaire, l’algorithme affiche « mot correctement orthographié ». Vous pouvez utiliser la commande break pour arrêter la boucle dans ce cas, car nous n’avons pas besoin de suggestion.
Dans le cas 2, l’algorithme propose la liste de mot les plus proches, de distance 1, sinon 2 etc…
Voici le résultat obtenu avec l’entrée utilisateur « ABAS » avec les rangs des mots dans le dictionnaire
ABAT – 0
ABUS – 8
ADAS – 23
AGAS – 35
AMAS – 80
ANAS – 91
Documentez et expliquez votre algorithme avec un diaporama
III. Performance de l’algorithme :
Une des principales caractéristiques d’un algorithme de correction orthographique est sa rapidité. Un algorithme trop lent pourrait perturber l’expérience utilisateur. Etudions comment le temps d’exécution de votre algorithme évolue en fonction de la taille de votre dictionnaire et de la taille des mots.
Etape 1 : Repartir d’un script vide. Créer un algorithme pour générer une liste, de taille n, de mots de 4 lettres,
Pour générer des séquences de 4 lettres, vous pouvez utiliser ce que nous avons vu sur la table ASCII (chr… voir cours) et la fonction suivante permettant de générer des nombres aléatoires. Générer uniquement que des mots avec des majuscules.
from random import randrange
a = randrange(26) print(a)
Etape 2 : Appliquer votre algorithme du II. à ce dictionnaire créé en mesurant le temps d’exécution. La mesure du temps d’exécution s’effectue comme suit :
import time
start = time.time()
VOTRE CODE DU II. A MESURER ICI. RAPPELEZ VOUS D'ENLEVER LES PRINT DE VOTRE CODE, CAR LE TEMPS D'AFFICHAGE EST SOUVENT TRES IMPORTANT;
end = time.time()
print(end - start)
Etape 3 : Mesurer le temps d’exécution de l’algorithme avec un dictionnaire dont la taille qui augmente de 10 000 mots à chaque fois. Notez vos valeurs obtenues et réalisez un graphique sur un tableur. Commentez
(Optionnel) Vous êtes un fan de matplotlib ? Modifiez l’algorithme pour que l’algorithme réalisé précédemment s’exécute dix fois avec le même mot, mais avec une taille de dictionnaire qui augmente de 10 000 mots à chaque fois. Réalisez un graphique avec matplotlib. Commentez
Documentez et expliquez votre algorithme avec un diaporama
IV. Historique des entrées utilisateurs
Proposer comme dans le II. des suggestions par ordre alphabétique, est un bon début pour aider l’utilisateur à écrire, mais il serait intéressant de réaliser des propositions de mots qui se basent sur ce qu’il a l’habitude d’écrire, sinon ce dernier devra toujours parcourir fastidieusement les propositions. L’idée est donc d’afficher les propositions, non pas alphabétiquement, mais en fonction des mots précédemment entrés.
Reprendre votre algorithme du II. et vous ajouterez une liste nommée HistoriqueUtilisateur comportant quelques mots du dictionnaire de votre choix. Par exemple HistoriqueUtilisateur = [« YOGA », « ZOUK », « YOYO », « ANAS »]
Votre algorithme doit faire remonter dans la liste, en première position les mots présents dans HistoriqueUtilisateur, afin de proposer en priorité les mots que l’utilisateur a l’habitude d’écrire.
Exemple de comportement attendu :
Si on tape « ABAS », on obtient dans l’ordre alphabétique : [‘ABAT’, ‘ABUS’, ‘ADAS’, ‘AGAS’, ‘AMAS’, ‘ANAS’]
Si HistoriqueUtilisateur contient « ANAS« , alors ce mot devra remonter en première position de la liste, et on obtient alors [ ‘ANAS‘, ‘ABAT’, ‘ABUS’, ‘ADAS’, ‘AGAS’, ‘AMAS’, ]
Il faut donc réaliser une comparaison de contenus de deux listes pour extraire les éléments similaires et les faire remonter tout en haut. Il est recommandé d’avoir les propositions de mots, non pas affichées à l’écran, mais stockées dans une liste pour pouvoir manipuler les positions des mots.
De nombreuses méthodes peuvent être envisagées ici. (voici un indice, mais on peut faire sans 🙂 )
Documentez et expliquez votre algorithme avec un diaporama
V. Créer une interface utilisateur avec TKINTER
Créer une interface graphique pour votre projet. L’utilisateur rentre un mot, appuie sur un bouton, et les mots proposés s’affichent.
Documentation extensive : https://www.python-course.eu/tkinter_labels.php
Tutoriel sur Openclassrooms : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/234859-creez-des-interfaces-graphiques-avec-tkinter
Documentez et expliquez votre algorithme avec un diaporama
Ecrit par Picassciences
Poster un commentaire