- Analyseur de Texte et Optimiseur de Disposition de Clavier
- belhassen-bencheikh-projet-cpoo5-24-25
- Ilias BENCHEIKH
- Rayan BELHASSEN
Notre projet est concue est conçue pour :
-
Analyser la fréquence des suites de caractères (monogrammes, bigrammes, trigrammes) dans des fichiers texte.
-
Évaluer l'efficacité des dispositions de clavier en fonction des analyses de fréquence.
-
Optimiser les dispositions de clavier pour améliorer la productivité et réduire la fatigue de frappe.
Le projet utilise plusieurs patrons de conception pour assurer une architecture adapter et flexible pour faciliter la maintenance
voir le fichier Diagramme_des_classes.pdf
-
Analyseur de Fréquence de Suites de Caractères :
- Analyse des monogrammes, bigrammes, trigrammes ou une combinaison des trois.
- Prise en charge de multiples fichiers texte.
- Génération de rapports en format JSON.
-
Évaluateur de Disposition de Clavier :
- Évaluation des dispositions de clavier existantes en fonction des statistiques de fréquence.
- Affichage des scores d'efficacité pour chaque disposition évaluée.
-
Optimiseur de Disposition de Clavier :
- générer un clavier optimisé en fonction du corpus donné.
- affichage graphique d'un clavier.
- écriture du clavier en format JSON.
-
Affichage des Dispositions de Clavier Disponibles :
- Liste des dispositions de clavier disponibles dans le répertoire dédié.
-
Gestion des Résultats d'Analyse :
- Vider les résultats précédents de l'analyseur.
-
Gestion de l'Interface Utilisateur :
- Interface en ligne de commande intuitive avec un menu principal pour naviguer entre les fonctionnalités.
Java Development Kit (JDK) 21 ou supérieur Gradle pour la gestion des dépendances et la compilation
Cloner le Répertoire du Projet :
git clone https://github.com/RayanVSS/Analyseur-de-Texte-et-Optimiseur-de-Disposition-de-Clavier.gitNaviguer dans le Répertoire du Projet :
cd belhassen-bencheikh-projet-cpoo5-24-25Compiler le Projet :
./gradlew buildExécuter l'Application :
./gradlew run-
Décorateur : Ajoute dynamiquement des fonctionnalités sans modifier les classes existantes.
-
Délégation : Sépare les responsabilités, facilitant ainsi la maintenance et l'extensibilité.
-
Observateur/Observable : Permet une communication flexible entre les composants sans couplage étroit.
-
Monteur (Builder) : Simplifie la création d'objets complexes, rendant le code client plus propre.
Avec les implémenté des patrons de conception, notre projet gagne en robustesse et en flexibilité.
Voici comment les différents patrons s'intègrent dans l'ensemble du projet :
Ajoute des fonctionnalités de journalisation ( ou Logging, enregistrer des informations sur l'exécution ) à l'analyseur de fréquence sans modifier sa structure. Permet d'ajouter d'autres fonctionnalités similaires de manière modulaire.
Sépare la logique de sélection des fichiers de l'analyseur de fréquence. Facilite l'ajout de nouvelles sources de données à l'avenir (par exemple, bases de données, API).
Permet de notifier différentes parties de l'application lorsque des événements importants se produisent (par exemple, fin d'analyse, évaluation terminée).
Simplifie la construction d'objets complexes comme les dispositions de clavier. Permet de gérer différentes sources de construction de manière uniforme.
Pour une meilleure compréhension, voici un diagramme UML (NON EXHAUSTIF) simplifié illustrant l'interaction entre les principales classes et patrons de conception.
+---------------------+ +---------------------+
| App | | MenuHandler |
+---------------------+ +---------------------+
| - menuHandler |<>--------| - scanner |
| - frequencyAnalyzer | +---------------------+
| - keyboardEvaluator |
| - textDisplay |
+---------------------+
|
| Uses
|
+----------------------+ +---------------------+ +---------------------+
| FrequencyAnalyzer | | KeyboardEvaluator | | KeyboardOptimisateur|
+----------------------+ +---------------------+ +---------------------+
| - dataSource | | - jsonfile | | |
| - observers | | - fileCounter | | |
| - allResults | | | | |
+----------------------+ +---------------------+ +---------------------+
| + execute() | | + execute() | | + execute() |
| + registerObserver() | | + registerObserver()| | + registerObserver()|
| + notifyObservers() | | + notifyObservers() | | + notifyObservers() |
+----------------------+ +---------------------+ +---------------------+
|
| Decorated by
|
+-----------------------------------+
| LoggingFrequencyAnalyzerDecorator |
+-----------------------------------+
| - wrappedAnalyzer |
+-----------------------------------+
| + execute() |
| + getResults() |
+-----------------------------------+
- App utilise MenuHandler pour gérer les interactions utilisateur.
- App détient des instances de FrequencyAnalyzer, KeyboardEvaluator, et TextDisplay.
- FrequencyAnalyzer et KeyboardEvaluator peuvent enregistrer des observateurs pour recevoir des notifications.
- FrequencyAnalyzer est décoré par LoggingFrequencyAnalyzerDecorator pour ajouter des fonctionnalités de journalisation.
/src/main/java
│
├── /clavier
│ ├── azerty.json
│ ├── qwerty.json
│ └── ... autres dispositions ...
│
├── /texte
│ ├── java.txt
│ ├── livretJava.txt
│ ├── notes_logique.txt
│ └── ... autres textes ...
│
├── /resultat
│ ├── analyseur.json
│ └── optimise.json
│
├──/src/main/java
│ ├── /config
│ │ ├── Analyseur.java
│ │ ├── Evaluateur.java
│ │ └── Optimisateur.java
│ │
│ ├── /models
│ │ └── KeyboardLayout.java
│ │
│ ├── /utils
│ │ ├── ConsoleUtils.java
│ │ ├── FileCounter.java
│ │ ├── Jsonfile.java
│ │ └── Readfile.java
│ │
│ ├── /services
│ │ ├── AbstractService.java
│ │ ├── FrequencyAnalyzer.java
│ │ ├── KeyboardEvaluator.java
│ │ ├── KeyboardDisplay.java
│ │ ├── KeyboardEvaluator.java
│ │ ├── ResultClearer.java
│ │ ├── TextDisplay.java
│ │ ├── MenuHandler.java
│ │ ├── IFrequencyAnalyzer.java
│ │ ├── LoggingFrequencyAnalyzerDecorator.java
│ │ ├── observer
│ │ │ ├── Observer.java
│ │ │ ├── Subject.java
│ │ │ └── LoggerObserver.java
│ │
└── App.java/clavier: Contient les fichiers JSON des différentes dispositions de clavier./texte: Contient les fichiers texte à analyser./resultat: Contient les résultats des analyses en format JSON./config: Contient les classes de configuration telles que Analyseur et Evaluateur./utils: Contient les classes utilitaires pour diverses tâches comme la gestion des fichiers, la lecture de fichiers, etc./services: Contient les classes principales qui gèrent les différentes fonctionnalités de l'application, y compris les implémentations des patrons de conception.
Les dispositions de clavier sont stockées dans le répertoire /clavier sous forme de fichiers JSON. Chaque fichier représente une disposition de clavier avec comme informations sur chaque touche:
- la rangée
- la colonne
- le doigt utilisé
- si elle est une touche de doigt de repos (home),
- si elle nécessite l'utilisation de la touche Shift.
- Analyseur de Fréquence de Suites de Caractères Analyse la fréquence des suites de caractères (monogrammes, bigrammes, trigrammes) dans les fichiers texte sélectionnés. Pour Définir la fréquence des caractères : Entrez un nombre entier entre 1 et 4.
- 1 : Monogrammes
- 2 : Bigrammes
- 3 : Trigrammes
- 4 : Monogrammes, Bigrammes et Trigrammes simultanément
- Évaluateur de Disposition de Clavier
Évalue l'efficacité des dispositions de clavier disponibles en fonction des statistiques de fréquence générées par l'analyseur.
Avec comme critère d'evaluation:
inconue(rien) : le clavier n'a identifier une toucheSFB(same finger bigram) : les mouvements à un seul doigtciseaux: mouvements à une main faisant succéder la rangée inférieure et la rangée supérieureLSB(left shift bigram) : mouvements à extension latéralealternance: main gauche/main droiteroulement: mouvement réalisé par deux doigts différents d’une même mainmauvaise redirection: les mouvements à une main avec changement de directionredirection particulier: mauvaises redirections, ne faisant pas intervenir l’indexSKS(same key same finger): comme un SFB, mais avec une touche de l’autre main entre les deuxautre_bigramme: mouvement correctautre_trigramme: mouvement correcttout les doitgs du clavier: depend du pourcentage du doigt utiliser
- Optimiseur de Disposition de Clavier L'Optimiseur a pour objectif d'optimiser la disposition des touches d'un clavier en utilisant des algorithmes génétiques pour améliorer la disposition des touches d'un clavier, en cherchant à maximiser un score basé sur des fréquences de séquences de caractères.
Le reste des options (de 4 a 7) sont assez explicites et ne demandent aucune manipulation particulière
