Mes Projets Informatiques
Licence 1
Cette année là, nous avons eu deux principaux projets à mettre en œuvre.
Dans un premier temps, je vais vous présenter ici une application qui est capable de reconnaitre la langue d'un texte de façon très précise (avec en outre une possibilité d'apprentissage de nouvelles langues : ce programme est évolutif).
Enfin, je vous présenterai une application qui constitue ma première application avec interface graphique (codée en GTK).
Le projet TAL : Traitement Automatique de la Langue
Le TAL, ou traitement automatique de la langue, est une matière qui nous a été enseignée en première année de licence. Notre professeur nous a alors inculqué les bases permettant d'analyser des phrases.
Le projet associé à cette matière permet de développer une application fonctionnant en mode console permettant de déterminer avec une assez grande précision la langue d'un texte. En effet, en donnant un texte a analyser à l'application, celle-ci effectue un traitement sur ce dernier (une normalisation, puis un découpage en mots clefs). Puis, elle compare ces mots-clefs avec des données codées en dur dans l'application. Selon le résultat de ces comparaisons, le programme détermine la langue.
En fait, on a établi dans le programme une liste de mot, pour chaque langue que l'on souhaite traiter, typique de cette dernière. Ainsi, des mots comme 'un', 'le', 'la' sont typiques du langages Français.
Cependant, on remarque très rapidement que le système permettant de déterminer la langue d'un texte par comparaison de mots clefs présent en dur dans le programme se révèle rapidement limité. En effet, pour ajouter une langue, il faut retrouver une liste de mots typiques de cette dernière, puis les implémenter dans le programme, avant de tout recompiler.
C'est pourquoi il m'a été possible d'implémenter un système d'apprentissage de texte. J'ai alors pu permettre à mon application de traiter des textes d'une langue jusque là inconnu. Pour cela, il suffit de lancer un apprentissage sur certains textes. Ainsi, on précise à l'application la langue d'un texte à l'avance (il faut être sûr de la langue de ce texte !). L'application traite ce texte : elle le normalise, le découpe en mots clefs, puis calcule le nombre d'occurrences de chaque mot clef. Elle mémorise alors dans un fichier binaire associé à cette langue les mots clefs qu'elle a enregistré, ainsi que leur nombre d'occurrences (ceci permettra de pondérer la présence de ce mot dans un texte à reconnaitre -> un mot qui apparait souvent, et qui apparait dans un texte dont la langue est à déterminer, doit donner un score important à la langue qu'il est censé identifier).
A partir de maintenant, l'application possède des fichiers binaires dans lesquelles elle a stocké ses résultats pour chaque langue. Lorsque l'utilisateur souhaite reconnaitre une langue, il décide s'il veut utiliser la base de mots clefs codé en dur, ou alors la base issue de l'apprentissage. Typiquement, la base issue de l'apprentissage est plus élaborée (car forcément beaucoup plus complète), il est alors recommandé de la choisir en priorité.
Il faut alors déposer le texte à identifier dans un fichier texte, puis demander à l'application d'analyser ce fichier. Après un court temps de traitement, les scores de chaque langues apparaissent à l'écran. La langue au plus score est alors choisie, et affichée à l'écran. C'est la langue du texte que l'on souhaite identifier.
Ajouter des langues est relativement simple. Dans son état actuel, mon application gère 7 langues, dont le Français, l'Allemand, l'Anglais et l'Espagnol entres autres.
Le code source de l'application, ainsi qu'une bibliothèque de langues se trouvent dans le répertoire suivant : cliquez ici.
Le SUDOKU : ma première interface graphique
Pendant la suite de mon année universitaire, et plus précisément durant mon second semestre, il m'a été demandé d'interfacer un algorithme de création de grille de SUDOKU avec une interface graphique.
Ce projet, réalisé en binôme, a duré environ trois mois. Il nous a permis de créer notre première interface graphique. Codée en GTK, cette dernière est constituée :
- d'une barre en haut de la fenêtre, contenant le nom de l'application, ainsi que des boutons standards (réduire l'application, l'agrandir, la fermer) ;
- une barre située juste en dessous de la précédente contient une
série de bouton permettant, entres autres :
- de sauvegarder une partie ;
- d'en charger une autre ;
- de changer la dimension de la grille ;
- de consulter les meilleurs scores enregistrés ;
- de fermer l'application ;
- d'une zone coupée en deux parties
- la partie gauche est la partie où est affiché le score, le temps restant, ainsi qu'un bouton permettant d'annuler le dernier choix ;
- la partie droite contient la grille de jeu. Cette dernière peut être en 4*4, 9*9 ou 16*16. Ceci est modifiable via la barre d'option située en haut de l'application.
Voici un aperçu, en quelques images, de notre application :

On remarque sur l'image ci-dessus l'utilisation de la barre de boutons supérieurs. On peut alors distinguer clairement les options disponibles.
De la même manière, on peut distinguer les différentes options offertes par notre application via les images suivantes :


Le prochain imprim-écran montre la partie gauche de notre application. On rappelle qu'elle contient le temps depuis lequel le joueur a commencé sa partie, le bouton de retour en arrière et son score (chaque retour en arrière lui enlève des points, un bon coup lui en donne).

Enfin, présentons l'aire de jeu de notre application, à savoir la grille de SUDOKU. On peut notamment distinguer des boutons dans la zone basse de l'application dont les utilités sont suffisamment explicites à partir des noms employés pour ceux-ci : Un bouton 'New Game' pour démarrer une nouvelle partie, un bouton 'High Score' pour connaitre le nom des joueurs ayant le meilleur score, et un bouton 'Quitter' afin de fermer l'application.

Dans tous les cas, lorsqu'une décision importante doit être prise par l'utilisateur (fermer l'application par exemple), une boite de dialogue s'ouvre et demande une confirmation (oui/non) au joueur afin de sécuriser les actions importantes.
Le code source complet de cette application, ainsi qu'un bref rapport, sont disponibles dans le repertoire suivant : cliquez ici.