Projet de Programmation/Algorithmique
Licence 2004-2005

Objectif

Il s'agit d'implémenter un système de complétion permettant de faciliter la saisie de texte (un peu à la manière de la saisie de SMS offerte par certains téléphones portables).

Description

Le programme devra permettre à son utilisateur de saisir caractère par caractère une suite de mots. À chaque frappe d'un caractère le programme déterminera l'ensemble des complétions possibles, en offrira une à l'utilisateur et permettra à celui-ci de naviguer dans cet ensemble. Une complétion est une terminaison possible du mot courant trouvée dans un dictionnaire préalablement chargé. À tout moment l'utilisateur aura la possibilité de réaliser la complétion (compléter le mot courant avec le suffixe proposé).

En entrée, un dictionnaire sera un simple fichier texte constitué de mots (un par ligne). Il pourra être nécessaire d'effectuer certaines conversions sur le fichier du dictionnaire, sa version en mémoire ou sur le texte saisi, sachant qu'a priori le texte saisi ne le sera qu'en majuscules et sans aucun autre caractère qu'alphabétique.

Algorithmique

Nous insistons sur le fait que le dictionnaire devra être représenté en mémoire sous la forme d'un arbre des préfixes.

Il est demandé de soigner particulièrement les algorithmes de création de l'arbre, parcours de l'arbre, etc.

Extensions...

On pourra imaginer prolonger le sujet en implantant un système probabiliste permettant de proposer la liste des complétions en utilisant la fréquence d'utilisation des mots (cette fréquence pouvant être par ailleurs dynamiquement calculée).

Programmation

Nous insistons sur le fait que le programme devra être réalisé en utilisant une structuration objet des concepts. Le choix des interfaces/classes et objets devra être longuement pensé. D'autre part, l'utilisation justifiée de classes Java prédéfinies dans les packages par défaut sera jugé comme un point positif.

L'interface avec l'utilisateur pouvant (mais pas nécessairement, d'autant moins que les abstractions sont bien choisies) être déterminante, il est possible (mais pas obligatoire) d'utiliser une interface graphique (fournie plus bas).

Il est demandé de documenter correctement les classes et interfaces conçues, l'utilisation de javadoc est très fortement recommandée.

Extensions...

On pourra imaginer que les mots nouveaux (saisis par l'utilisateur et n'existant pas dans le dictionnaire) seront automatiquement ajoutés à un dictionnaire secondaire (lequel est chargé en complément du dictionnaire principal).

Le dictionnaire principal pourra par ailleurs être un paramètre.

On pourra aussi imaginer par exemple un dictionnaire d'abréviations permettant de réaliser des saisies abrégées: saisir bjr génèrera au final le mot bonjour.

Fournitures

Sont fournis:

Organisation

Le projet devra être réalisé par groupe de 2 ou 3 personnes (ni plus, ni moins). Le(s) programme(s) devront impérativement être écrits en langage Java et être exécutables sur au moins une machine de l'UFR.

Un rapport devra être remis au secrétariat au plus tard le 28 janvier 2005. Ce rapport devra expliciter clairement l'ensemble des points les plus importants du projet. Il devra aussi contenir le code source du projet. Le contenu de ce rapport sera jugé et noté (autant être précis et concis).

Les soutenances auront lieu dans la semaine du 31 janvier 2005 au 4 février 2005. Les dates exactes seront précisées ultérieurement ainsi que l'ouverture des inscriptions aux soutenances. La soutenance est obligatoire (sauf pour les dispenses officielles), toute absence conduira le jury à délivrer la note 0. Chaque personne devra intervenir (les silences seront jugés très négativement). La soutenance sera unique mais conduira le jury à délivrer une note en algorithmique et une note en programmation (les notes étant attribuées distinctement).


Valid XHTML 1.0!Valid CSS!