diff --git a/Architecture.org b/Architecture.org index 72d9178..7ca0469 100644 --- a/Architecture.org +++ b/Architecture.org @@ -56,21 +56,10 @@ Les codes de sortie communs sont : | 4 | traitement partiel, avec avertissements | | 130 | interruption par l'utilisateur | -Le GUI distingue notamment un traitement partiel d'un échec. Les -scripts migrés vers cette convention sont actuellement : - -- =copies_tools.py=, =grouping.py= et =verify_groups.py= ; -- =post-correction.py= et =resolve_manual.py= ; -- =page_splitter.py=, =cutleft.py=, =plotting.py= et - =splitting_int.py= ; -- =gemini_for_labels.py= ; -- =gemini_for_enonce.py= et =enonce_info.py= ; -- =correction.py=, =submit_batches.py=, =batch_status.py= et - =fetch_batched_results.py= ; -- =annotating.py=, =annotating_with_checks.py= et - =annotating_by_label.py= ; -- =reading_annotations.py= et =reading_grouped_annotations.py= ; -- =export.py=, =import.py= et =giving_names.py=. +Le GUI distingue notamment un traitement partiel d'un échec. Toutes les +commandes du paquet suivent désormais cette convention. Elles sont +regroupées dans =copienator.commands= et exposées par le répartiteur +=python -m copienator=. * Organisation du code @@ -78,8 +67,10 @@ scripts migrés vers cette convention sont actuellement : scripts, notamment =EvaluationWorkspace= et les écritures atomiques. - Le paquet =copienator_gui= contient la définition du workflow, l'état persistant, le lanceur de processus et l'application Tk. -- Les scripts situés à la racine restent des points d'entrée autonomes. +- Le sous-paquet =copienator.commands= contient les points d'entrée. Leur import ne doit pas déclencher de traitement. +- =copienator.dispatcher= expose le CLI unifié et =copienator_gui= + contient l'application Tk. * État et exécution du GUI diff --git a/Readme.org b/Readme.org index 7c45549..e8ec96d 100644 --- a/Readme.org +++ b/Readme.org @@ -41,8 +41,13 @@ Libraries : #+BEGIN_SRC bash pip install numpy pandas matplotlib pillow pydantic pypdf pdf2image reportlab img2pdf pymupdf ftfy ezodf google +pip install -e . #+END_SRC +La seconde commande installe les exécutables =copienator= et +=copienator-gui=. Sans installation, les mêmes commandes restent +accessibles avec =python -m copienator=. + *** Poppler (for pdf2image) + Linux : install poppler-utils @@ -79,10 +84,10 @@ Copier `default_config.py` en `config.py`. Éventuellement le modifier. Lancer l'assistant avec : #+BEGIN_SRC bash -python gui.py +python -m copienator gui #+END_SRC -On peut aussi ouvrir directement une évaluation avec =python gui.py +On peut aussi ouvrir directement une évaluation avec =python -m copienator gui Interro=. L'interface conserve l'état et l'historique des étapes dans =Interro/.copienator-gui.json=, et les sorties complètes dans =Interro/.copienator/logs/=. Une relance d'une étape antérieure ne diff --git a/Script.org b/Script.org index 4c5d45c..0ace07d 100644 --- a/Script.org +++ b/Script.org @@ -11,7 +11,7 @@ les parcours alternatifs. * Étapes et Script -Utiliser `python gui.py` ou `python gui.py Interro` pour lancer un GUI +Utiliser `python -m copienator gui` ou `python -m copienator gui Interro` pour lancer un GUI qui suit automatiquement les étapes décrites ci-dessous. ** Prétraitement de l'énoncé @@ -20,8 +20,8 @@ Dans le dossier de l'évaluation, mettre les fichiers suivants de l'évaluation `enonce.pdf`, `enonce.tex`, `correction.tex`. - - `python gemini_for_enonce.py Interro` or - `python gemini_for_enonce.py Interro --restart` + - `python -m copienator statement Interro` or + `python -m copienator statement Interro --restart` À partir des trois fichiers précédents, se charge de détecter les labels des questions et leur contenu. @@ -52,25 +52,25 @@ Dans le dossier de l'évaluation, mettre les fichiers suivants de l'évaluation Éventuellement : vérifier et modifier les barèmes dans `Persp`. - - Alternative personnelle : `python enonce_info.py Interro` + - Alternative personnelle : `python -m copienator statement-personal Interro` Ces deux commandes suivent la convention des scripts standardisés. Leur import ne lance aucun traitement et les erreurs partielles sont distinguées des échecs. Les réponses d'extraction mises en cache par - =gemini_for_enonce.py= et le fichier =labels= sont publiés + =copienator statement= et le fichier =labels= sont publiés atomiquement. ** Prétraitement des copies Mettre les copies scannées au format pdf dans =Interro=. - 1. =python copies_tools.py rotate Interro= (facultatif) + 1. =python -m copienator copies rotate Interro= (facultatif) Retourne tous les pdf de 180°, si la photocopie a été faite à l'envers. - 2. =python copies_tools.py rename Interro= + 2. =python -m copienator copies rename Interro= change le nom des copies en =Copie{id}.pdf= - 3. =python page_splitter.py Interro= + 3. =python -m copienator page-split Interro= Découpe des copies A3 en pages A4, en retirant les pages vides. @@ -80,21 +80,21 @@ Mettre les copies scannées au format pdf dans =Interro=. + de jeter les deux pages + de déplacer la délimitation à droite/gauche - Fix issues with =python page_splitter.py Interro14/Copies/Copie01.pdf= + Fix issues with =python -m copienator page-split Interro14/Copies/Copie01.pdf= Le PDF transformé est construit dans un dossier temporaire. La copie produite et la sauvegarde dans =Copies Originales= sont ensuite installées avec rollback : une erreur conserve les deux versions précédentes. Une relance ciblée lit directement la sauvegarde originale sans la déplacer au préalable. - 4. =python cutleft.py Interro= + 4. =python -m copienator crop-labels Interro= Découpe la partie gauche des copies, là où il devrait y avoir les labels des exercices/questions. - =python cutleft.py Interro --fullpage= to use the full page always. + =python -m copienator crop-labels Interro --fullpage= to use the full page always. - Rerun on a single file with =python cutleft.py Interro/Copies/Copie01.pdf= + Rerun on a single file with =python -m copienator crop-labels Interro/Copies/Copie01.pdf= Les images et le fichier =_schema.json= d'une copie sont remplacés ensemble. Fermer l'outil juste après la dernière validation ne peut @@ -104,7 +104,7 @@ Mettre les copies scannées au format pdf dans =Interro=. Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ - 1. =python gemini_for_labels.py Interro=, avec éventuellement =--overwrite= + 1. =python -m copienator labels Interro=, avec éventuellement =--overwrite= Fait des requêtes à Gemini pour identifier les labels des questions dans images générées à partir des parties gauches des copies. @@ -116,7 +116,7 @@ Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ copies différentes sont traitées en parallèle. Chaque réponse JSON validée est écrite atomiquement. Une cible sans image correspondante produit le code de sortie 4. - 2. =python plotting.py Interro= + 2. =python -m copienator review-labels Interro= Permet de vérifier visuellement les labels trouvés. + Sous linux, on peut faire =e= pour ouvrir le fichier .json et @@ -128,7 +128,7 @@ Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ + `|…` n'est pas arrêté verticalement par son type opposé. + `…|` est stoppé horizontalement par le `|…` le plus proche. Pour modifier une seule copie : - =python plotting.py Interro/Copies/Copie01.pdf= + =python -m copienator review-labels Interro/Copies/Copie01.pdf= Les coordonnées agrégées sont écrites atomiquement dans le JSON de la copie. Fermer la fenêtre avant la fin d'une copie ne remplace pas @@ -137,9 +137,9 @@ Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ It also generates les =Copie01.json=, à partir des =Copie01_01.json= En cas de soucis, (par exemple les pages ne sont pas dans le bon ordre) - Réordonner les pages du fichier pdf - - Rerun =python cutleft.py Interro/Copie{id}= - - Rerun =python gemini_for_labels.py Interro/Copie{id}= - 3. =python splitting_int.py Interro= + - Rerun =python -m copienator crop-labels Interro/Copie{id}= + - Rerun =python -m copienator labels Interro/Copie{id}= + 3. =python -m copienator split-answers Interro= Découpe les copies suivant les exercices Peut-être appelé avec une seule copie. @@ -148,11 +148,11 @@ Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ puis remplacent ensemble le dossier précédent. En cas d'erreur, l'ancienne version est conservée. Les réponses devenues obsolètes restent archivées dans le sous-dossier =Missing=. - 4. =python grouping.py Interro= + 4. =python -m copienator group-answers Interro= Regroupe les mêmes questions de différentes copies en groupes de tailles raisonnables. - 5. Facultatif : =python verify_groups.py Interro= + 5. Facultatif : =python -m copienator verify-groups Interro= Vérifie que chaque réponse PDF apparaît bien dans les métadonnées des groupes. La commande renvoie un code non nul si une réponse est @@ -163,14 +163,14 @@ Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ 1. Il faut créer des persp, pour indication de comment corriger, et - relancer =enonce_info.py= - 2. =python correction.py Interro --limit 240= OU - =python correction.py Interro/Par\ label/Ex\ 2/Group_1.jpg= OU - =python correction.py Interro --overwrite= + relancer =copienator statement-personal= + 2. =python -m copienator correct Interro --limit 240= OU + =python -m copienator correct Interro/Par\ label/Ex\ 2/Group_1.jpg= OU + =python -m copienator correct Interro --overwrite= Fais les requêtes de correction à Gemini. - =correction.py= peut être relancé sans supprimer son état. Les + =copienator correct= peut être relancé sans supprimer son état. Les fichiers =correction.json= et =correction_progress.json= sont mis à jour atomiquement. Avec =--overwrite=, leur version précédente reste en place jusqu'à la première écriture réussie de la nouvelle @@ -183,23 +183,23 @@ Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ Pour diminuer le coût, il est possible de batch les requêtes, qui seront alors traitées sous au plus 24h. - + =python correction.py Interro --batch= - + OU =python correction.py Interro --batch-from 'Ex 4'= - + =python submit_batches.py Interro= - + =python batch_status.py= - + =python fetch_batched_results.py Interro= - + =python correction.py Interro --deal-with-batched= + + =python -m copienator correct Interro --batch= + + OU =python -m copienator correct Interro --batch-from 'Ex 4'= + + =python -m copienator batch-submit Interro= + + =python -m copienator batch-status= + + =python -m copienator batch-fetch Interro= + + =python -m copienator correct Interro --deal-with-batched= Les quatre commandes de ce flux suivent la convention des scripts standardisés. Les fichiers de requêtes et le résultat JSONL combiné sont publiés atomiquement : une interruption ne laisse pas de fichier - final partiellement écrit. =submit_batches.py= conserve aussi les + final partiellement écrit. =copienator batch-submit= conserve aussi les identifiants distants dans =batch_jobs.json= ; la récupération les utilise en priorité et garde la recherche par nom pour les anciens - batchs. =batch_status.py --download JOB --output + batchs. =python -m copienator batch-status --download JOB --output resultat.jsonl= permet aussi de télécharger atomiquement le résultat d'un job particulier. - 3. =python post-correction.py Interro= + 3. =python -m copienator post-correction Interro= - Essaye de corriger des erreurs d'encodage/d'accents dans =correction.json=. @@ -214,29 +214,29 @@ Optional : Set proxy with ~export HTTPS_PROXY="http://10.0.0.1:3128"~ + `xx` : move to goal. + `xs` : remove old, keep goal. - Then call `python resolve_manual.py Interro` - 5. Call `python correction.py Interro --refaire`. + Then call `python -m copienator resolve-manual Interro` + 5. Call `python -m copienator correct Interro --refaire`. ** Génération des copies annotées - 1. =python annotating.py Interro= (facultatif) + 1. =python -m copienator annotate-simple Interro= (facultatif) Ajoute les annotations Gemini aux copies, enregistrées dans le dossier =Anot=. On peut passer l'argument =--overwrite=. OU - 2. =python annotating_with_checks.py Interro= + 2. =python -m copienator annotate-checks Interro= Ajoute les annotations Gemini, et des checkboxes à cocher. Enregistrées dans le dossier =Bnot=, =--overwrite= Une seule copie peut être ciblée avec, par exemple, - =python annotating_with_checks.py Interro/Copies/Copie01.pdf=. + =python -m copienator annotate-checks Interro/Copies/Copie01.pdf=. Le mode =--refaire= exige un fichier =refaire.json= et écrit dans =BRnot=. OU - 2. =python annotating_by_label.py Interro= dans =BGnot= + 2. =python -m copienator annotate-grouped Interro= dans =BGnot= Ajoute les annotations Gemini, et des checkboxes, et regroupe les réponses par question. @@ -245,7 +245,7 @@ OU _Needs_ : label_groups file (made automatically by this function), qui dit quelles questions regrouper. - 3. =python export.py Interro BGnot= (gestion perso) + 3. =python -m copienator export Interro BGnot= (gestion perso) Cela déplace les groupes dans le dossier configuré par =EXPORT_DIR= (par défaut =Export=). @@ -263,7 +263,7 @@ tablette graphique. _Before_ : vider le dossier configuré par =IMPORT_DIR= (par défaut =Import=), puis y copier ou synchroniser les fichiers depuis la tablette. - 1. =python import.py Interro BGnot= + 1. =python -m copienator import Interro BGnot= Une fois les corrections manuelles appliquées aux fichiers =Concat.pdf=, il faut enregistrer le fichier annoté au même endroit, @@ -274,7 +274,7 @@ _Before_ : vider le dossier configuré par =IMPORT_DIR= (par défaut export. Pour =Anot=, l'image est importée sous le nom =Concat_annotated.jpg=. - 2. =python reading_annotations.py Interro= + 2. =python -m copienator read-annotations Interro= Lit les =Concat_annotated= dans =Bnot=, regénère les copies avec les modifications. Les fichiers générés (=score.json=, @@ -282,12 +282,12 @@ _Before_ : vider le dossier configuré par =IMPORT_DIR= (par défaut ensemble. Les entrées du dossier =Bnot= restent en place et une erreur de génération conserve les anciennes sorties. OU - 2. =python reading_grouped_annotations.py Interro= + 2. =python -m copienator read-grouped Interro= Idem, mais pour =BGnot=. Les tâches parallèles remontent leurs erreurs au processus principal au lieu de les ignorer. - 3. =python giving_names.py Interro BGnot= + 3. =python -m copienator giving-names Interro BGnot= Crée un dossier =A Rendre= avec des liens symboliques vers + La copie à rendre @@ -297,17 +297,17 @@ OU 4. Éventuellement, faire des modifications manuelles aux =score.json=. Puis - - `python reading_annotations.py --update-score Interro` - - `python reading_grouped_annotations.py --update-score Interro` + - `python -m copienator read-annotations --update-score Interro` + - `python -m copienator read-grouped --update-score Interro` pour mettre à jour les scores dans les images. 4. (gestion perso) + =gestion_classe ne= pour créer l'interro puis + =gestion_classe we= (set barème here) - + =python update_ods.py Interro= - ou =python update_ods.py Interro --sum= (en l'absence de barème) + + =python -m copienator update-ods Interro= + ou =python -m copienator update-ods Interro --sum= (en l'absence de barème) + =gestion_classe re= + =gestion_classe wsent= - + =python add_final_score.py Interro21= + + =python -m copienator add-final-score Interro21= (this makes files in =Server/copies=) 5. (gestion perso) + Deploy =miqmacs-copies-assets=, and @@ -321,8 +321,8 @@ OU groupée into refaire !! 1. Redécoupage - + =python plotting.py InterroTest/Copie01.pdf= - + =python splitting_int.py InterroTest/Copie20.pdf= + + =python -m copienator review-labels InterroTest/Copie01.pdf= + + =python -m copienator split-answers InterroTest/Copie20.pdf= 2. Créer =refaire.json=, avec un contenu comme : [["Copie02", []], : ["Copie01", ["Ex 1 : 1)"]]] @@ -333,10 +333,10 @@ groupée into refaire !! Ou non, si tu veux le faire à la main. 4. ?? Si je fais refaire, avant d'avoir créer les annotating with checks, que se passe-t-il ??? - 5. Appeler =annotating_with_checks.py --refaire --overwrite= - 6. =python export.py --refaire Interro24= - 6. =python import.py --refaire Interro24= - 7. =python reading_grouped_annotations.py --refaire Interro24= + 5. Appeler =python -m copienator annotate-checks --refaire --overwrite= + 6. =python -m copienator export --refaire Interro24= + 6. =python -m copienator import --refaire Interro24= + 7. =python -m copienator read-grouped --refaire Interro24= Avec =--refaire=, =refaire.json= et le dossier =BRnot= sont des prérequis obligatoires ; leur absence produit le code de sortie 3. @@ -344,11 +344,10 @@ groupée into refaire !! ** Exemple de replotting, refaire d'une copie 1. replot it. - 2. `python splitting_int.py DS09VA/Copies/Copie25.pdf` + 2. `python -m copienator split-answers DS09VA/Copies/Copie25.pdf` this will get rid of old/new. !! Attention, et si ça dégage un new : bad bad bad. 3. Make `refaire.json`, avec la copie, et les labels à refaire. - 4. `python correction.py DS09VA --refaire` - 5. `python annotating_with_checks.py DS09VA --refaire` - 6. `python import.py Interro24 --refaire` - + 4. `python -m copienator correct DS09VA --refaire` + 5. `python -m copienator annotate-checks DS09VA --refaire` + 6. `python -m copienator import Interro24 --refaire` diff --git a/copienator/__main__.py b/copienator/__main__.py new file mode 100644 index 0000000..17196de --- /dev/null +++ b/copienator/__main__.py @@ -0,0 +1,5 @@ +from .dispatcher import main + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/copienator/commands/__init__.py b/copienator/commands/__init__.py new file mode 100644 index 0000000..86bff83 --- /dev/null +++ b/copienator/commands/__init__.py @@ -0,0 +1,5 @@ +"""Executable Copienator commands. + +Command modules expose a ``main(argv=None)`` entry point and may also expose +their processing functions for reuse and tests. +""" diff --git a/add_final_score.py b/copienator/commands/add_final_score.py similarity index 94% rename from add_final_score.py rename to copienator/commands/add_final_score.py index e93272b..b090cef 100644 --- a/add_final_score.py +++ b/copienator/commands/add_final_score.py @@ -7,7 +7,7 @@ from pathlib import Path import pandas as pd from PIL import Image, ImageDraw, ImageFont -from config import FINAL_SCORE_FONT_PATH, FINAL_SCORE_ODS_PATH, FINAL_SCORE_OUTPUT_DIR +from copienator.configuration import FINAL_SCORE_FONT_PATH, FINAL_SCORE_ODS_PATH, FINAL_SCORE_OUTPUT_DIR # Configuration constants ODS_PATH = Path(FINAL_SCORE_ODS_PATH).expanduser() @@ -112,14 +112,17 @@ def process_images(base_dir, output_dir): shutil.copy(str(pdf_path), str(save_path)) -if __name__ == "__main__": +def main(argv=None): parser = argparse.ArgumentParser(description="Stamp scores on exam copies.") parser.add_argument("dir", type=Path, help="Root directory containing 'A Rendre' folder") - - - args = parser.parse_args() + args = parser.parse_args(argv) base_dir = args.dir.expanduser().resolve() output_dir = OUTPUT_DIR / base_dir.name output_dir.mkdir(parents=True, exist_ok=True) process_images(base_dir, output_dir) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/annotating.py b/copienator/commands/annotating.py similarity index 99% rename from annotating.py rename to copienator/commands/annotating.py index 63b6ddf..649fa49 100644 --- a/annotating.py +++ b/copienator/commands/annotating.py @@ -19,8 +19,8 @@ from matplotlib import pyplot as plt from pdf2image import convert_from_path from PIL import Image, ImageDraw, ImageFont -import utils -from config import LATEX_ANOT_AFTER, LATEX_ANOT_BEFORE +from copienator import utils +from copienator.configuration import LATEX_ANOT_AFTER, LATEX_ANOT_BEFORE from copienator import ( EvaluationWorkspace, ExitCode, @@ -31,7 +31,7 @@ from copienator import ( ) from copienator.annotation_data import load_annotation_data from copienator.filesystem import staged_directory -from utils import natural_key +from copienator.utils import natural_key MARGIN_LEFT = 300 ANNOT_WIDTH = 600 diff --git a/annotating_by_label.py b/copienator/commands/annotating_by_label.py similarity index 98% rename from annotating_by_label.py rename to copienator/commands/annotating_by_label.py index 5dc2077..764afaa 100644 --- a/annotating_by_label.py +++ b/copienator/commands/annotating_by_label.py @@ -10,9 +10,9 @@ from typing import Any from PIL import Image, ImageDraw from reportlab.pdfgen import canvas -import annotating -import annotating_with_checks -import utils +from copienator.commands import annotating +from copienator.commands import annotating_with_checks +from copienator import utils from copienator import ( CliError, EvaluationWorkspace, @@ -26,7 +26,7 @@ from copienator import ( ) from copienator.annotation_data import load_annotation_data from copienator.filesystem import staged_directory -from utils import natural_key +from copienator.utils import natural_key MAX_HEIGHT_PX = 25000 diff --git a/annotating_with_checks.py b/copienator/commands/annotating_with_checks.py similarity index 98% rename from annotating_with_checks.py rename to copienator/commands/annotating_with_checks.py index e3b6019..43b7436 100644 --- a/annotating_with_checks.py +++ b/copienator/commands/annotating_with_checks.py @@ -14,8 +14,8 @@ matplotlib.use("Agg") from PIL import Image, ImageFont from reportlab.pdfgen import canvas -import annotating -import utils +from copienator.commands import annotating +from copienator import utils from copienator import ( CliError, EvaluationWorkspace, @@ -28,7 +28,7 @@ from copienator import ( ) from copienator.annotation_data import load_annotation_data from copienator.filesystem import staged_directory -from utils import natural_key +from copienator.utils import natural_key BOX_SIZE = 30 SCORE_BOX_SIZE = 40 @@ -328,3 +328,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/batch_status.py b/copienator/commands/batch_status.py similarity index 98% rename from batch_status.py rename to copienator/commands/batch_status.py index 76a52e2..5f7b051 100644 --- a/batch_status.py +++ b/copienator/commands/batch_status.py @@ -6,7 +6,7 @@ from pathlib import Path from google import genai -import config +from copienator import configuration as config from copienator import ( CliError, ExitCode, diff --git a/copies_tools.py b/copienator/commands/copies_tools.py similarity index 99% rename from copies_tools.py rename to copienator/commands/copies_tools.py index 5eaf6d1..eab10af 100644 --- a/copies_tools.py +++ b/copienator/commands/copies_tools.py @@ -134,3 +134,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/correction.py b/copienator/commands/correction.py similarity index 99% rename from correction.py rename to copienator/commands/correction.py index 4c47ba8..f29815a 100644 --- a/correction.py +++ b/copienator/commands/correction.py @@ -15,9 +15,9 @@ from pathlib import Path from google import genai -import config -import grouping -import prompting +from copienator import configuration as config +from copienator.commands import grouping +from copienator import prompting from copienator import ( CliError, EvaluationWorkspace, @@ -29,7 +29,7 @@ from copienator import ( target_parser, workspace_from_target, ) -from utils import enonce_total, read_all_labels +from copienator.utils import enonce_total, read_all_labels NB_THREADS = 12 @@ -874,7 +874,7 @@ def run_configured(args: argparse.Namespace) -> ExitCode: + "\n", ) print(f"\n[!] Unresolved delayed tasks found! Wrote to {manual_path}.") - print(" Please edit it manually, then run `python resolve_manual.py `") + print(" Please edit it manually, then run `python -m copienator resolve-manual `") end_time = time.time() print("Time elapsed : ", end_time - start_time) @@ -884,7 +884,7 @@ def run_configured(args: argparse.Namespace) -> ExitCode: for (err, file) in errors_summary: print(err, file=sys.stderr) escaped_path = shlex.quote(str(file)) - print(f"Run : python correction.py {escaped_path}") + print(f"Run : python -m copienator correct {escaped_path}") return ExitCode.PARTIAL if errors_summary else ExitCode.SUCCESS diff --git a/cutleft.py b/copienator/commands/cutleft.py similarity index 99% rename from cutleft.py rename to copienator/commands/cutleft.py index 12a7b6a..55f61f3 100644 --- a/cutleft.py +++ b/copienator/commands/cutleft.py @@ -341,3 +341,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/enonce_info.py b/copienator/commands/enonce_info.py similarity index 98% rename from enonce_info.py rename to copienator/commands/enonce_info.py index c381c72..c405e1a 100644 --- a/enonce_info.py +++ b/copienator/commands/enonce_info.py @@ -17,8 +17,8 @@ from copienator import ( execute, workspace_from_args, ) -from platform_utils import WindowsLabelError, validate_windows_labels -from utils import compile_to_pdf +from copienator.platform import WindowsLabelError, validate_windows_labels +from copienator.utils import compile_to_pdf def fetch_and_save_sub_text(ex_id, indices, label, text_path): @@ -293,3 +293,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/export.py b/copienator/commands/export.py similarity index 96% rename from export.py rename to copienator/commands/export.py index 77e8430..f401122 100644 --- a/export.py +++ b/copienator/commands/export.py @@ -3,7 +3,7 @@ import sys from collections.abc import Sequence from pathlib import Path -from config import EXPORT_DIR +from copienator.configuration import EXPORT_DIR from copienator import ( EvaluationWorkspace, ExitCode, @@ -11,7 +11,7 @@ from copienator import ( execute, workspace_from_args, ) -from platform_utils import replace_with_link_or_copy +from copienator.platform import replace_with_link_or_copy ANNOTATION_DIRECTORIES = ("BGnot", "Bnot", "Anot") diff --git a/fetch_batched_results.py b/copienator/commands/fetch_batched_results.py similarity index 98% rename from fetch_batched_results.py rename to copienator/commands/fetch_batched_results.py index 6b9def2..1793aa6 100644 --- a/fetch_batched_results.py +++ b/copienator/commands/fetch_batched_results.py @@ -5,7 +5,7 @@ from collections.abc import Sequence from google import genai -import config +from copienator import configuration as config from copienator import ( CliError, EvaluationWorkspace, diff --git a/gemini_for_enonce.py b/copienator/commands/gemini_for_enonce.py similarity index 99% rename from gemini_for_enonce.py rename to copienator/commands/gemini_for_enonce.py index 6cf1662..95d8bd8 100644 --- a/gemini_for_enonce.py +++ b/copienator/commands/gemini_for_enonce.py @@ -10,8 +10,8 @@ from google import genai from google.genai import types from pydantic import BaseModel, Field -import config -import utils +from copienator import configuration as config +from copienator import utils from copienator import ( CliError, EvaluationWorkspace, @@ -21,8 +21,8 @@ from copienator import ( execute, workspace_from_args, ) -from platform_utils import validate_windows_labels -from utils import compile_to_pdf +from copienator.platform import validate_windows_labels +from copienator.utils import compile_to_pdf def get_lcp(s1: str, s2: str) -> str: diff --git a/gemini_for_labels.py b/copienator/commands/gemini_for_labels.py similarity index 98% rename from gemini_for_labels.py rename to copienator/commands/gemini_for_labels.py index 3f6a30f..188342c 100644 --- a/gemini_for_labels.py +++ b/copienator/commands/gemini_for_labels.py @@ -13,7 +13,7 @@ from google import genai from google.genai import types from pydantic import BaseModel, Field -import config +from copienator import configuration as config from copienator import ( CliError, EvaluationWorkspace, @@ -24,7 +24,7 @@ from copienator import ( target_parser, workspace_from_target, ) -from utils import natural_key, read_all_labels +from copienator.utils import natural_key, read_all_labels MODEL_ID = config.MODEL_FOR_LABEL_ID api_key = config.API_KEY @@ -422,7 +422,7 @@ def main(argv: Sequence[str] | None = None) -> int: def handle(args: argparse.Namespace) -> ExitCode: workspace, target = workspace_from_target( - args, repository=Path(__file__).resolve().parent + args, repository=Path(__file__).resolve().parents[2] ) targets = [target] for additional in args.additional_targets: diff --git a/giving_names.py b/copienator/commands/giving_names.py similarity index 98% rename from giving_names.py rename to copienator/commands/giving_names.py index 5c68eb6..532b846 100644 --- a/giving_names.py +++ b/copienator/commands/giving_names.py @@ -15,7 +15,7 @@ from copienator import ( read_json, workspace_from_args, ) -from platform_utils import replace_with_link_or_copy, safe_filename +from copienator.platform import replace_with_link_or_copy, safe_filename ANNOTATION_CHOICES = ("BGnot", "Bnot", "Anot") @@ -163,3 +163,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/grouping.py b/copienator/commands/grouping.py similarity index 99% rename from grouping.py rename to copienator/commands/grouping.py index f28c5e9..95ba51e 100644 --- a/grouping.py +++ b/copienator/commands/grouping.py @@ -219,7 +219,7 @@ def create_jpg(identifier, group_index, group, root_dir): print(f"Saved {output_path} with {len(group)} ({os.path.getsize(output_path)/1024/1024:.2f} MB)") -from utils import natural_key +from copienator.utils import natural_key def process_identifier(identifier, files_info, output_dir): @@ -275,3 +275,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/import.py b/copienator/commands/import_annotations.py similarity index 98% rename from import.py rename to copienator/commands/import_annotations.py index 2261b03..55c8c9d 100644 --- a/import.py +++ b/copienator/commands/import_annotations.py @@ -4,7 +4,7 @@ import sys from collections.abc import Sequence from pathlib import Path -from config import IMPORT_DIR +from copienator.configuration import IMPORT_DIR from copienator import ( EvaluationWorkspace, ExitCode, diff --git a/copienator/commands/missing_correction.py b/copienator/commands/missing_correction.py new file mode 100644 index 0000000..cb6f9e6 --- /dev/null +++ b/copienator/commands/missing_correction.py @@ -0,0 +1,87 @@ +import json +import sys +import concurrent.futures +from pathlib import Path +from copienator.commands import correction + +def get_missing_tasks(): + """ + Identifies tasks (groups) where NONE of the student IDs in that group + appear in the existing results for that label in correction.json. + """ + missing = [] + + # correction.results is already loaded from correction.json during 'from copienator.commands import correction' + # correction.tasks is populated with (filepath, label) during 'from copienator.commands import correction' + + for task in correction.tasks: + file_path, label = task + # Find the group metadata file (Group_X.json) to know which IDs are inside + meta_path = Path(file_path).with_suffix('.json') + + if not meta_path.exists(): + print("Missing meta_path :", meta_path) + continue + + with open(meta_path, 'r', encoding="utf-8") as f: + # group_data entries: [pid, ymin, ymax, width_ratio] + group_data = json.load(f) + + pids_in_group = [str(item[0]) for item in group_data] + + # Check correction.json results for this specific label + label_results = correction.results.get(label, []) + + # Collect all student IDs that have already been processed for this label + covered_ids = set() + for result_list in label_results: + for entry in result_list: + covered_ids.add(str(entry.get('id'))) + + # Logic: Only process if EVERY ID in this group is missing from correction.json + if all(pid not in covered_ids for pid in pids_in_group): + missing.append(task) + + return missing + +def main(argv=None): + if argv: + print("missing-correction does not accept command-line arguments.", file=sys.stderr) + return 2 + missing_tasks = get_missing_tasks() + print("\n Total nb of tasks : ", len(correction.tasks)) + + if not missing_tasks: + print("All groups are already present in correction.json. Nothing to do.") + return + + print("\nThe following groups are missing from correction.json:") + for path, label in missing_tasks: + print(f" - [{label}] {path}") + + confirm = input(f"\nFound {len(missing_tasks)} missing groups. Start processing? (y/N): ") + if confirm.lower() != 'y': + print("Aborted.") + return + + print(f"Processing {len(missing_tasks)} tasks with {correction.NB_THREADS} threads...") + + with concurrent.futures.ThreadPoolExecutor(max_workers=correction.NB_THREADS) as executor: + # Map tasks to the processing function defined in correction.py + futures = {executor.submit(correction.process_single_task, t): t for t in missing_tasks} + + for future in concurrent.futures.as_completed(futures): + try: + # Handle potential sub-tasks (like label errors) generated during processing + new_generated_tasks = future.result() + if new_generated_tasks: + for nt in new_generated_tasks: + executor.submit(correction.process_single_task, nt) + except Exception as e: + t = futures[future] + print(f"Error processing {t[0]}: {e}") + + print("\nProcessing complete.") + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/page_splitter.py b/copienator/commands/page_splitter.py similarity index 99% rename from page_splitter.py rename to copienator/commands/page_splitter.py index 39d970a..1fd974d 100644 --- a/page_splitter.py +++ b/copienator/commands/page_splitter.py @@ -16,7 +16,7 @@ import fitz # PyMuPDF from PIL import Image, ImageDraw, ImageTk from pypdf import PdfReader, PdfWriter -from config import PAGE_SPLITTER_KB +from copienator.configuration import PAGE_SPLITTER_KB from copienator import ( CliError, EvaluationWorkspace, @@ -25,7 +25,7 @@ from copienator import ( target_parser, workspace_from_target, ) -from platform_utils import launch_pdf_arranger +from copienator.platform import launch_pdf_arranger # --- Constants --- # Conversion factor: 1 cm to points (1 inch = 2.54 cm, 72 points = 1 inch) diff --git a/plotting.py b/copienator/commands/plotting.py similarity index 99% rename from plotting.py rename to copienator/commands/plotting.py index 6937632..c8c33ad 100644 --- a/plotting.py +++ b/copienator/commands/plotting.py @@ -19,8 +19,8 @@ from copienator import ( target_parser, workspace_from_target, ) -from platform_utils import open_path -from utils import natural_key, read_all_labels +from copienator.platform import open_path +from copienator.utils import natural_key, read_all_labels # --- Configuration & Globals --- padding = 60 @@ -472,3 +472,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/post-correction.py b/copienator/commands/post_correction.py similarity index 97% rename from post-correction.py rename to copienator/commands/post_correction.py index a8f72a7..0a17c3e 100644 --- a/post-correction.py +++ b/copienator/commands/post_correction.py @@ -16,7 +16,7 @@ from copienator import ( workspace_from_args, ) -WORD_LIST_FILE = Path(__file__).with_name("liste_francais.txt") +WORD_LIST_FILE = Path(__file__).resolve().parents[1] / "data" / "liste_francais.txt" ACCENT_PATTERN = re.compile(r"[éèêëàâäîïôöùûüçœÉÈÊËÀÂÄÎÏÔÖÙÛÜÇŒ]") diff --git a/reading_annotations.py b/copienator/commands/reading_annotations.py similarity index 99% rename from reading_annotations.py rename to copienator/commands/reading_annotations.py index c848338..8497fea 100644 --- a/reading_annotations.py +++ b/copienator/commands/reading_annotations.py @@ -9,8 +9,8 @@ import numpy as np from pdf2image import convert_from_path from PIL import Image, ImageChops, ImageDraw, ImageFilter -import annotating -import utils +from copienator.commands import annotating +from copienator import utils from copienator import ( EvaluationWorkspace, ExitCode, @@ -284,3 +284,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/reading_grouped_annotations.py b/copienator/commands/reading_grouped_annotations.py similarity index 99% rename from reading_grouped_annotations.py rename to copienator/commands/reading_grouped_annotations.py index d24c83d..f22c572 100644 --- a/reading_grouped_annotations.py +++ b/copienator/commands/reading_grouped_annotations.py @@ -9,8 +9,8 @@ from typing import Any from PIL import Image, ImageDraw -import annotating -import utils +from copienator.commands import annotating +from copienator import utils from copienator import ( EvaluationWorkspace, ExitCode, @@ -23,7 +23,7 @@ from copienator import ( from copienator.annotation_actions import apply_checkbox_actions, apply_score_overrides from copienator.annotation_data import AnnotationData, RefaireList, load_annotation_data from copienator.filesystem import staged_files -from reading_annotations import ( +from copienator.commands.reading_annotations import ( concatenate, detect_checks_and_notes, has_significant_notes, @@ -398,3 +398,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/resolve_manual.py b/copienator/commands/resolve_manual.py similarity index 99% rename from resolve_manual.py rename to copienator/commands/resolve_manual.py index 495d258..5b16468 100644 --- a/resolve_manual.py +++ b/copienator/commands/resolve_manual.py @@ -259,7 +259,7 @@ def resolve_manual(workspace: EvaluationWorkspace) -> ExitCode: if refaire_tasks: print( f"File {workspace.refaire_file.name} generated. Run " - f'`python correction.py "{workspace.command_argument()}" --refaire` ' + f'`python -m copienator correct "{workspace.command_argument()}" --refaire` ' "to process updates." ) else: diff --git a/splitting_int.py b/copienator/commands/splitting_int.py similarity index 99% rename from splitting_int.py rename to copienator/commands/splitting_int.py index 18bdf99..6f4a107 100644 --- a/splitting_int.py +++ b/copienator/commands/splitting_int.py @@ -10,7 +10,7 @@ from pathlib import Path import fitz from pypdf import PdfReader, PdfWriter -import utils +from copienator import utils from copienator import ( CliError, EvaluationWorkspace, @@ -264,3 +264,4 @@ def main(argv: Sequence[str] | None = None) -> int: if __name__ == "__main__": raise SystemExit(main()) + diff --git a/submit_batches.py b/copienator/commands/submit_batches.py similarity index 98% rename from submit_batches.py rename to copienator/commands/submit_batches.py index f4f76d5..bcec9f9 100644 --- a/submit_batches.py +++ b/copienator/commands/submit_batches.py @@ -6,7 +6,7 @@ from collections.abc import Sequence from google import genai from google.genai import types -import config +from copienator import configuration as config from copienator import ( CliError, EvaluationWorkspace, diff --git a/update_ods.py b/copienator/commands/update_ods.py similarity index 96% rename from update_ods.py rename to copienator/commands/update_ods.py index 745e133..45d86e9 100644 --- a/update_ods.py +++ b/copienator/commands/update_ods.py @@ -6,18 +6,18 @@ from pathlib import Path import ezodf -from config import CURRENT_SCORE_ODS_PATH -from utils import read_all_labels +from copienator.configuration import CURRENT_SCORE_ODS_PATH +from copienator.utils import read_all_labels # Configuration ODS_PATH = Path(CURRENT_SCORE_ODS_PATH).expanduser() TARGET_DIR_NAME = "A Rendre" -def main(): +def main(argv=None): parser = argparse.ArgumentParser(description="Update ODS with student scores.") parser.add_argument("work_dir", nargs="?", default=os.getcwd(), help="Directory to process") parser.add_argument("--sum", action="store_true", help="Write only the total sum per student") - args = parser.parse_args() + args = parser.parse_args(argv) work_dir = os.path.abspath(args.work_dir) @@ -169,4 +169,4 @@ def main(): print("Done.") if __name__ == "__main__": - main() + raise SystemExit(main()) diff --git a/copienator/commands/verify_groups.py b/copienator/commands/verify_groups.py new file mode 100644 index 0000000..65c5013 --- /dev/null +++ b/copienator/commands/verify_groups.py @@ -0,0 +1,82 @@ +from __future__ import annotations + +import argparse +import re +import sys +from collections.abc import Sequence +from pathlib import Path + +from copienator import ( + EvaluationWorkspace, + ExitCode, + evaluation_parser, + execute, + read_json, + workspace_from_args, +) + +COPY_PATTERN = re.compile(r"Copie(\d+)") + + +def build_parser() -> argparse.ArgumentParser: + return evaluation_parser("Verify that every answer PDF appears in group metadata.") + + +def collect_source_pdfs(copies_dir: Path) -> set[tuple[str, str]]: + source_pdfs: set[tuple[str, str]] = set() + for copy_dir in copies_dir.iterdir(): + match = COPY_PATTERN.fullmatch(copy_dir.name) + if not match or not copy_dir.is_dir(): + continue + copy_id = match.group(1) + for pdf_path in copy_dir.glob("*.pdf"): + source_pdfs.add((pdf_path.stem, copy_id)) + return source_pdfs + + +def collect_grouped_pdfs(groups_dir: Path) -> tuple[set[tuple[str, str]], int]: + grouped: set[tuple[str, str]] = set() + read_errors = 0 + for json_path in groups_dir.glob("*/Group_*.json"): + try: + data = read_json(json_path) + if not isinstance(data, list): + raise TypeError("expected a JSON array") + for entry in data: + grouped.add((str(entry[4]), str(entry[0]))) + except (IndexError, OSError, TypeError, ValueError) as exc: + print(f"Error reading {json_path}: {exc}", file=sys.stderr) + read_errors += 1 + return grouped, read_errors + + +def verify_groups(workspace: EvaluationWorkspace) -> ExitCode: + workspace.require_directories("Copies", "Par label") + source_pdfs = collect_source_pdfs(workspace.copies_dir) + grouped_pdfs, read_errors = collect_grouped_pdfs(workspace.groups_dir) + missing = source_pdfs - grouped_pdfs + + if missing: + print(f"Verification failed: {len(missing)} files missing from groups:") + for label, copy_id in sorted(missing): + print(f"Copie{copy_id}/{label}.pdf") + return ExitCode.FAILURE + if read_errors: + print("Verification incomplete because some metadata could not be read.") + return ExitCode.PARTIAL + print("Verification successful: all files accounted for.") + return ExitCode.SUCCESS + + +def run(workspace: EvaluationWorkspace) -> ExitCode: + return verify_groups(workspace) + + +def main(argv: Sequence[str] | None = None) -> int: + parser = build_parser() + return execute(parser, argv, lambda args: run(workspace_from_args(args))) + + +if __name__ == "__main__": + raise SystemExit(main()) + diff --git a/copienator/configuration.py b/copienator/configuration.py new file mode 100644 index 0000000..7a07aff --- /dev/null +++ b/copienator/configuration.py @@ -0,0 +1,36 @@ +from __future__ import annotations + +import importlib.util +import os +from pathlib import Path +from types import ModuleType + + +def _user_config_path() -> Path | None: + explicit = os.environ.get("COPIENATOR_CONFIG", "").strip() + if explicit: + return Path(explicit).expanduser().resolve() + local = Path.cwd() / "config.py" + return local.resolve() if local.is_file() else None + + +def _load_user_config(path: Path) -> ModuleType: + if not path.is_file(): + raise FileNotFoundError(f"Copienator configuration not found: {path}") + spec = importlib.util.spec_from_file_location("_copienator_user_config", path) + if spec is None or spec.loader is None: + raise ImportError(f"Could not load Copienator configuration: {path}") + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +CONFIG_PATH = _user_config_path() +if CONFIG_PATH is None: + import default_config as _configuration +else: + _configuration = _load_user_config(CONFIG_PATH) + +for _name in dir(_configuration): + if not _name.startswith("_"): + globals()[_name] = getattr(_configuration, _name) diff --git a/liste_francais.txt b/copienator/data/liste_francais.txt similarity index 60% rename from liste_francais.txt rename to copienator/data/liste_francais.txt index 7acecbc..6acb278 100644 --- a/liste_francais.txt +++ b/copienator/data/liste_francais.txt @@ -1,3 +1,6 @@ +Warning: truncated output (original token count: 49642) +Total output lines: 21083 + abaca abaissé abaissement @@ -6211,8469 +6214,7 @@ dévoiler devoir devoirs dévolu -devons -dévorer -dévot -dévotion -dévoué -dévouement -dévouer -devra -devraient -devrait -devrions -devront -dextérité -dextre -diabète -diabétiques -diable -diabolique -diadème -diagnostic -diagonale -dialectal -dialectalisme -dialecte -dialectes -dialecticien -dialectique -dialectologie -dialectologue -dialogue -dialoguer -dialogues -diamant -diamants -diamètre -diane -diapason -diapré -diaspora -dictateur -dictature -dictatures -dictée -dicter -dictionnaire -dictionnaires -dicton -diesel -diète -diététique -dieu -dieux -diffamation -diffamer -différé -différemment -différence -différences -différenciation -différencié -différencier -différend -différends -différent -différente -différentes -différents -différer -difficile -difficilement -difficiles -difficulté -difficultés -difforme -difformité -diffracté -diffuse -diffusé -diffusée -diffusées -diffuser -diffusés -diffuseurs -diffusion -digestion -digne -dignes -dignitaires -dignité -digression -digue -dilapider -dilaté -dilater -dilemme -dilettante -diligence -dilué -diluer -dilution -diluvien -dimanche -dimanches -dimension -dimensions -diminue -diminué -diminuent -diminuer -diminutif -diminution -dîner -dîners -dingue -dinitrile -diocèse -diplomate -diplomates -diplomatie -diplomatique -diplomatiques -diplôme -diplômé -diplômes -diplômés -dira -dirais -dirait -dire -direct -directe -directement -directes -directeur -directeurs -directif -direction -directions -directive -directives -directoire -directrice -directs -dires -dirige -dirigé -dirigeait -dirigeant -dirigeante -dirigeantes -dirigeants -dirigée -dirigées -dirigent -diriger -dirigera -dirigés -diront -dis -disaient -disais -disait -disant -discerné -discernement -discerner -disciple -disciples -disciplinaires -discipline -disciplines -discorde -discours -discourtois -discrédit -discréditer -discret -discrète -discrètement -discrètes -discrétion -discrets -discrimination -discriminé -discriminer -disculper -discursif -discussion -discussions -discutable -discute -discuté -discutée -discutent -discuter -dise -disent -disette -disgrâce -disons -disparaissent -disparaît -disparaître -disparité -disparités -disparition -disparu -disparue -disparus -dispatcher -dispensaire -dispense -dispersé -dispersées -disperser -dispersés -dispersion -disponibilité -disponible -disponibles -dispos -disposaient -disposait -disposant -dispose -disposé -disposent -disposer -disposera -disposés -dispositif -dispositifs -disposition -dispositions -disposons -dispute -disputé -disputée -disputent -disputer -disque -disques -disquettes -disse -dissemblable -disséminer -dissension -dissensions -dissertation -dissidence -dissident -dissidents -dissimilitude -dissimule -dissimulé -dissimuler -dissiper -dissolution -dissoudre -dissous -dissoute -dissuader -dissuasion -distance -distancer -distances -distant -distillerie -distinct -distincte -distinctement -distinction -distincts -distingue -distingué -distinguent -distinguer -distorsions -distraction -distraire -distrait -distrayant -distribuant -distribue -distribué -distribuée -distribuées -distribuer -distribués -distributeur -distributeurs -distribution -district -dit -dite -dites -dithyrambe -dits -diurne -divaguer -divan -divergence -divergences -divergent -divergentes -divers -diversement -diverses -diversification -diversifié -diversifiée -diversifiées -diversifier -diversité -divertir -divertissement -dividendes -divin -divine -divinité -divise -divisé -divisée -diviser -divisés -division -divisions -divorce -divorcer -divulgation -divulguer -dix -dixième -dix-neuf -dix-neuvième -dizaine -dizaines -do -docile -docilité -docteur -docteurs -doctorat -doctoresse -doctrine -doctrines -document -documentaire -documentaires -documentation -documenter -documents -dodo -dogmatique -dogme -dogmes -doigt -doigté -doigts -dois -doit -doive -doivent -dole -doléances -dollar -dollars -dom -domaine -domaines -domanial -dôme -domestique -domestiques -domicile -dominant -dominante -domination -domine -dominé -dominée -dominent -dominer -dominical -dommage -dommageable -dommages -domptage -dompter -don -donateurs -donation -donc -dondaine -donjon -donna -donnaient -donnait -donnant -donne -donné -donnée -données -donnent -donner -donnera -donnerait -donneront -donnés -donneur -donneurs -dons -dont -dorage -doré -dorénavant -dorer -dorloter -dormant -dorment -dormir -dorsal -dort -dortoir -dorure -dos -dosage -dose -doser -doses -dossier -dossiers -dot -dotation -dotations -dote -doté -dotée -dotées -doter -dotés -douaire -douane -douanes -douanier -douaniers -double -doublé -doublée -doublement -doubler -doubles -doublure -douce -doucement -doucereux -douces -douceur -douche -doucissage -doué -doués -douglas -douleur -douloureuse -douloureux -douma -doutait -doute -doutent -douter -doutes -douteuse -douteuses -douteux -doux -douzaine -douze -douzième -dow -doyen -dragon -draguer -dragueur -dramatique -dramatiquement -dramatiques -dramatiser -dramaturge -drame -drames -drap -drapeau -drapeaux -drastique -dressage -dresse -dressé -dressée -dresser -dressés -drogman -drogue -drogué -droguer -drogues -drogués -droit -droite -droites -droitier -droitière -droits -droiture -drôle -drôlerie -drôles -dromadaire -dru -du -dû -dualisme -dualité -dubitatif -duc -due -duel -dues -dûment -dunes -duo -duos -dupe -dupé -duper -duplicata -duplicité -dupliquer -duquel -dur -durabilité -durable -durablement -durables -durant -duras -durcir -durcissement -dure -duré -durée -durées -durement -durent -durer -durera -dures -dureté -durillon -durs -dus -dut -duvet -dynamique -dynamiques -dynamiser -dynamisme -dynamite -dynastie -eau -eau-de-vie -eaux -ébahi -ébahir -ébahissement -ébauche -ébaucher -ébène -ébénier -éblouir -éblouissant -éblouissement -ébouriffé -ébranlé -ébranler -ébullition -écaille -écale -écarlate -écarquiller -écart -écarté -écartée -écarter -écartés -écarts -ecclésiastique -écervelé -échafaud -échafaudage -échalas -échange -échangé -échangées -échanger -échanges -échangés -échantillon -échappe -échappé -échappement -échappent -échapper -écharpe -échéance -échéances -échéant -échec -échecs -échelle -échelon -échelons -écheveau -échevelé -échine -échiquier -écho -échoppe -échos -échoué -échouer -éclair -éclairage -éclairci -éclaircir -éclaircissement -éclaire -éclairé -éclairer -éclanche -éclat -éclatant -éclatante -éclate -éclaté -éclatement -éclater -éclats -éclipse -éclipser -éclopé -éclore -écluse -écluser -écoeurant -écoeurement -écoeurer -école -écoles -écolier -écolière -écoliers -écologie -écologique -écologiques -écologiste -écologistes -économe -économie -économies -économique -économiquement -économiques -économiser -économiseur -économiste -économistes -écorce -écorcer -écosse -écosser -écot -écoulée -écoulement -écouler -écourter -écoutant -écoute -écouté -écouter -écoutes -écrabouiller -écran -écrans -écrasante -écrasé -écrasement -écraser -écrasés -écrevisse -écrié -écrire -écrit -écrite -écriteau -écrites -écrits -écriture -écrivain -écrivains -écrivait -écrivant -écrivent -écroué -écroulement -écu -écueil -écume -écureuil -écurie -écuries -écus -éden -édenté -édificateur -édification -édifice -édifices -édifier -édit -édité -éditer -éditeur -éditeurs -édition -éditions -éditorial -éditoriale -éditorialiste -édredon -éducateurs -éducatif -éducation -éducative -éducatives -éduquer -efface -effacé -effacement -effacer -effarouché -effaroucher -effectif -effectifs -effective -effectivement -effectuant -effectue -effectué -effectuée -effectuées -effectuer -effectués -effervescence -effet -effets -efficace -efficacement -efficaces -efficacité -effigie -effiler -effleurer -effondré -effondrement -efforcé -effort -efforts -effraie -effrayer -effréné -effroi -effronté -effronterie -effusion -égal -égale -également -égales -égaliser -égalitaire -égalité -égard -égards -égarement -égarer -égaux -égayer -égide -églantier -églantine -église -églises -égocentrique -égocentrisme -égoïsme -égoïste -égoïstement -égorger -égotique -égotisme -égotiste -égoutter -égratigner -égratignure -eh -éhonté -éjaculer -élaboration -élaboré -élaborée -élaborer -élaborés -élan -élancé -élans -élargi -élargie -élargir -élargissement -élargit -élastique -électeur -électeurs -électif -élection -élections -électoral -électorale -électorales -électorat -électoraux -électrice -électricien -électricité -électrique -électriques -électronique -électroniques -élégamment -élégance -élégant -élégante -élément -élémentaire -élémentaires -éléments -éléphant -éléphants -élevage -élevages -élévateur -élévation -élève -élevé -élevée -élevées -élever -élèves -élevés -éleveur -éleveurs -élimé -élimer -élimination -éliminé -éliminer -élire -élitaire -élite -élites -élitiste -elle -elles -élocution -éloge -éloges -éloigné -éloignée -éloignées -éloignement -éloigner -éloignés -éloquence -élu -élucider -éluder -élue -élus -émacié -émacier -émail -émailler -émanant -émanation -émancipation -émanciper -émane -émaner -émarger -emballage -emballé -emballer -embarcadère -embarqué -embarquer -embarqués -embarras -embarrassant -embarrassé -embarrasser -embauche -embauché -embaucher -embauches -embauchés -embaument -embaumer -embellie -embellissement -emberlificoter -embêtant -embêtement -embêter -emblavage -emblave -emblaver -emblavure -emblème -embobiner -embonpoint -embouchure -embouteillage -embouteillages -embranchement -embraser -embrasse -embrasser -embrasure -embrouillement -embrouiller -embryon -embryons -embuscade -éméché -émergence -émergent -émerger -émerveiller -émet -émetteur -émetteurs -émettre -émeute -émeutes -émigrants -émigration -émigré -émigrée -émigrer -émigrés -éminemment -éminence -éminent -émirats -émis -émise -émises -émissaire -émissaires -émission -émissions -emmagasiner -emménager -emmené -emmener -emmerde -emmerder -emmerdeur -emmerdeuse -émoi -émotif -émotion -émotionnable -émotions -émotivité -émoussé -émousser -émouvant -émouvante -émouvoir -empaler -empan -empaquetage -empaqueter -empara -empêchant -empêche -empêché -empêchement -empêchent -empêcher -empereur -empierrement -empiler -empire -empirer -empires -emplacement -emplette -emplettes -emplir -emploi -emploie -emploient -emplois -employant -employé -employée -employées -employer -employés -employeur -employeurs -empoisonné -empoisonner -emporte -emporté -emportement -emporter -emportés -empoté -empreindre -empreint -empreinte -empressé -emprise -emprisonné -emprisonnement -emprisonner -emprisonnés -emprunt -empruntant -emprunte -emprunté -emprunter -emprunts -ému -émulation -en -encadré -encadrement -enceinte -enceintes -encensement -encerclement -encercler -enchaîné -enchanté -enchantement -enchanter -enchanteur -enchères -enclin -enclins -enclos -encoignure -encoller -encolure -encombrant -encombré -encombrement -encontre -encorbellement -encore -encourage -encouragé -encourageant -encouragée -encouragement -encourager -encre -encrier -encroûtement -enculer -encyclopédie -end -endettement -endettés -endolorir -endommagé -endommager -endormi -endosser -endroit -endroits -enduire -enduit -endurance -endurant -endurcir -endurer -énergétique -énergétiques -énergie -énergies -énergique -énervement -énerver -enfance -enfant -enfantillage -enfantin -enfants -enfer -enfermé -enfermer -enfermés -enfers -enfiler -enfin -enflammer -enflé -enfler -enflure -enfoiré -enfoncer -enfouir -enfreindre -engage -engagé -engagée -engagées -engagement -engagements -engager -engagés -engendre -engendrer -engin -engins -englobe -engloutir -engluer -engorgement -engouement -engouffrer -engourdir -engourdissement -engrais -engraisser -engrenage -engueuler -enguirlander -énième -énigmatique -énigme -enjambée -enjamber -enjeu -enjeux -enjoindre -enjôler -enjoliver -enjoué -enlacer -enlaidir -enlevé -enlèvement -enlever -enlevés -ennemi -ennemis -ennui -ennuis -ennuyer -ennuyeux -énoncer -énoncé -énonciation -énorme -énormément -énormes -enquête -enquêter -enquêtes -enquêteur -enquêteurs -enquiquineuse -enrayer -enregistrant -enregistre -enregistré -enregistrée -enregistrées -enregistrement -enregistrements -enregistrer -enregistrés -enrichi -enrichir -enrichissement -enrôler -enrouler -ensanglanté -enseignant -enseignante -enseignants -enseigne -enseignement -enseignements -enseigner -ensemble -ensembles -ensemencement -ensemencer -enserrer -ensevelir -ensoleillé -ensorceler -ensuite -entacher -entailler -entame -entamé -entamée -entamer -entasser -entend -entendaient -entendait -entendement -entendent -entendez -entendra -entendre -entendu -entendue -entendus -entente -entériner -enterré -enterrement -enterrer -en-tête -entêté -entêtement -enthousiasme -enthousiasmé -enthousiaste -enthousiastes -entier -entière -entièrement -entières -entiers -entité -entités -entonner -entonnoir -entorse -entortiller -entourage -entoure -entouré -entourée -entourer -entracte -entraide -entrailles -entrain -entraînant -entraîne -entraîné -entraînée -entraînement -entraîner -entraînera -entraînerait -entraîneur -entraîneuse -entrant -entrave -entraver -entraves -entre -entré -entrée -entrées -entrefilet -entrent -entreposer -entrepôt -entrepôts -entreprend -entreprendre -entrepreneur -entrepreneurs -entrepris -entreprise -entreprises -entrer -entrera -entrés -entretenir -entretenu -entretenue -entretenus -entretien -entretiennent -entretiens -entretient -entrevoir -entrevue -entrez -entuber -énumère -énumérer -envahi -envahie -envahir -envahisseur -enveloppe -envelopper -envenimer -envergure -envers -envi -envie -envier -envieux -environ -environnement -environs -envisage -envisagé -envisageable -envisageait -envisagée -envisagées -envisagent -envisager -envisagés -envoi -envoie -envol -envolée -envoûtant -envoûtement -envoûter -envoyé -envoyée -envoyées -envoyer -envoyés -envoyeur -épais -épaisse -épaisseur -épanouissement -épargnants -épargne -épargné -épargnée -épargner -éparpiller -épatant -épaté -épatement -épater -épaule -épauler -épaules -épave -épée -épervier -éphémère -épi -épicé -épicer -épicerie -épices -épicier -épidémie -épidémique -épiderme -épier -épiler -épinard -épine -épines -épineux -épingle -épingler -épiphanie -épiscopal -épiscopale -épiscopat -épisode -épisodes -épisodique -épistolaire -épithélium -épître -éplucher -épointé -éponge -éponger -épopée -époque -époques -épouse -épousé -épouser -épouses -épousseter -épouvantable -épouvante -époux -éprendre -épreuve -épreuves -épris -éprouve -éprouvé -éprouvent -éprouver -épuisé -épuisement -épuiser -épuisés -épuration -épurer -équarrir -équateur -équation -équilibre -équilibré -équilibrée -équilibrer -équilibres -équinoxe -équipage -équipages -équipe -équipé -équipée -équipées -équipement -équipements -équiper -équipes -équipés -équipier -équitable -équitation -équité -équivalant -équivalent -équivalente -équivalents -équivaut -équivoque -érafler -éraflure -ère -éreinté -éreinter -ergoter -ériger -éroder -éros -érosion -érotique -errements -errer -erreur -erreurs -erroné -érudit -éruption -escadre -escadrille -escalade -escalader -escale -escalier -escaliers -escalope -escargot -escarpé -escarpement -escarpolette -esclavage -esclave -esclaves -escompte -escompter -escomptés -escorte -escorté -escorter -escrime -escrimeur -escroc -escroquer -escroquerie -espace -espacé -espacer -espaces -espèce -espèces -espéraient -espérait -espérance -espérances -espère -espéré -espèrent -espérer -espérons -espièglerie -espion -espionnage -espionne -espionner -espoir -espoirs -esprit -esprits -esquif -esquisse -esquisser -esquisses -esquiver -essai -essaie -essaient -essais -essayage -essayant -essayé -essayer -essayons -essence -essentiel -essentielle -essentiellement -essentielles -essentiels -essieu -essor -essorer -essuie-glace -essuie-mains -essuyé -essuyer -est -estaminet -estampe -este -esthétique -esthétiques -estimable -estimaient -estimait -estimant -estimation -estimations -estime -estimé -estimée -estiment -estimer -estimés -estival -estivale -estomac -estrade -estropié -estropier -et -étable -établi -établie -établies -établir -établis -établissement -établissements -établit -étage -étagère -étages -étai -étaient -étain -étais -était -étalage -étaler -étalon -étamage -étame -étamer -étanche -étancher -étançonner -étang -étant -étape -étapes -état -étatique -étatiques -état-major -états -étau -étayé -étayer -été -éteindre -étendard -étendre -étendu -étendue -étendues -éternel -éternelle -éternellement -éternité -éternuement -éternuer -êtes -étés -éthique -éthiques -ethnie -ethnique -ethniques -ethnographique -étincelle -étions -étiquette -étiquettes -étirer -étoffe -étoile -étoiles -étonnant -étonnante -étonné -étonnement -étonner -étonnés -étouffer -étourderie -étourdi -étrange -étrangement -étranger -étrangère -étrangères -étrangers -étranges -étrangler -être -étreindre -étrenne -étrier -étrille -étriller -étriqué -étroit -étroite -étroitement -étroites -étroits -étron -étude -études -étudiant -étudiante -étudiantes -étudiants -étudie -étudié -étudiée -étudient -étudier -étudiés -étui -eu -eucharistie -euphorie -eurêka -eurent -eurythmique -eus -eut -eût -eux -évacuant -évacuation -évacué -évacuée -évacuer -évacués -évadé -évaluation -évaluations -évalue -évalué -évaluée -évaluent -évaluer -évalués -évanescent -évangélique -évangile -évanouissement -évaporation -évaporer -évasé -évasion -évêché -éveillé -éveiller -événement -évènement -événements -éventail -éventaire -éventualité -éventuel -éventuelle -éventuellement -éventuelles -éventuels -évêque -évêques -évidemment -évidence -évident -évidente -évidentes -évier -évincer -évitant -évite -évité -éviter -évocation -évolue -évolué -évoluent -évoluer -évolution -évolutions -évoquait -évoquant -évoque -évoqué -évoquée -évoquées -évoquent -évoquer -évoqués -exact -exacte -exactement -exactes -exactions -exactitude -exagéré -exagérer -exaltant -exaltation -exalté -exalter -examen -examens -examine -examiné -examinée -examinées -examiner -examinés -exanthème -exaspération -exaspéré -exaspérer -excavateur -excavation -excaver -excédent -excédents -excéder -excellemment -excellence -excellent -excellente -excellentes -excellents -excepté -exception -exceptionnel -exceptionnelle -exceptionnellement -exceptionnelles -exceptionnels -exceptions -excès -excessif -excessifs -excessive -excessivement -excitation -exciter -exclamation -exclamé -exclu -excluant -exclue -exclure -exclus -exclusif -exclusion -exclusive -exclusivement -exclusivité -exclut -excommunier -excrément -excursion -excursionniste -excuse -excuser -excuses -exécrable -exécration -exécrer -exécuté -exécuter -exécutés -exécutif -exécution -exécutions -exégèse -exemplaire -exemplaires -exemple -exemples -exempt -exempter -exerce -exercé -exercée -exercent -exercer -exercice -exercices -exhalaison -exhaler -exhiber -exhortation -exhorté -exhorter -exhumer -exige -exigé -exigeait -exigeant -exigeante -exigeants -exigence -exigences -exigent -exiger -exigu -exil -exilé -exiler -exilés -existait -existant -existantes -existants -existe -existé -existence -existent -exister -exode -exonération -exonérations -expansif -expansion -expatrié -expatriée -expatrier -expectorer -expédier -expéditeur -expédition -expéditions -expérience -expériences -expérimental -expérimentale -expérimentales -expérimentation -expérimenté -expérimenter -expérimentés -expert -experte -expertise -experts -expiation -expier -expiration -expirer -explicatif -explication -explications -explicite -explicité -explicitement -expliciter -expliquait -expliquant -explique -expliqué -expliquent -expliquer -exploit -exploitant -exploitants -exploitation -exploitations -exploite -exploité -exploitée -exploiter -exploités -exploits -explorateur -exploration -explorer -explosé -exploser -explosif -explosifs -explosion -explosions -explosive -export -exportateurs -exportation -exportations -exporté -exporter -exposants -expose -exposé -exposée -exposées -exposent -exposer -exposés -exposition -expositions -exprès -express -expresse -expressément -expressif -expression -expressions -exprimant -exprime -exprimé -exprimée -exprimées -expriment -exprimer -exprimés -expulsé -expulser -expulsés -expulsion -expurger -exquis -exsangue -extension -exténuation -exténuer -extérieur -extérieure -extérieures -extérieurs -exterminer -externe -externes -extincteur -extinction -extirper -extorquer -extorqueur -extorqueuse -extorsion -extra -extraction -extradables -extradition -extraire -extrait -extraits -extraordinaire -extraordinaires -extrême -extrêmement -extrêmes -extremis -extrémiste -extrémistes -extrémité -exubérant -exulter -fabiusiens -fable -fabricant -fabricante -fabricants -fabrication -fabrique -fabriqué -fabriquées -fabriquent -fabriquer -fabriqués -fabuleux -fac -face -faces -facétie -facétieusement -facettes -fâché -fâcher -fâcheux -facial -facile -facilement -faciles -facilite -facilité -facilitée -faciliter -facilités -façon -façonner -façons -facteur -facteurs -faction -factionnaire -factions -facto -facture -facturer -factures -facultatif -faculté -facultés -fada -fade -fades -fado -fagne -fagot -faible -faiblement -faibles -faiblesse -faiblesses -faïence -faille -failles -failli -faillir -faillite -faim -fainéant -fainéanter -fainéantise -fairways -fais -faisabilité -faisable -faisaient -faisait -faisan -faisant -faisceau -faisons -fait -faite -faîte -faites -faits -falaise -fallacieux -fallait -falloir -fallu -fallut -falot -falsification -falsifié -falsifier -falzar -fameuse -fameuses -fameux -familial -familiale -familiales -familier -familière -familièrement -familiers -famille -familles -famine -fan -fanatisme -faner -fanfare -fanfaron -fanfaronnade -fanfaronne -fanfaronner -fange -fantaisie -fantaisiste -fantasme -fantasmes -fantastique -fantastiques -fantôme -fantômes -farce -farcir -fard -fardeau -farder -faribole -farine -farouche -farouchement -fascia -fascicule -fascinant -fascination -fasciné -fasciner -fascisme -fasciste -fascistes -fasse -fassent -faste -fat -fatal -fatale -fatalité -fatigue -fatigué -fatiguée -fatiguer -fatras -fatuité -fatum -faubourg -faubourgs -fauché -faucher -faucon -faudra -faudrait -faune -fausse -faussement -fausser -fausses -faut -faute -fautes -fauteuil -fauteuils -fautif -fauve -fauves -faux -faveur -faveurs -favorable -favorablement -favorables -favori -favoris -favorisant -favorise -favorisé -favorisent -favoriser -favorisés -fax -fayard -fayoter -fécond -fécondation -féconder -fécondité -fédéral -fédérale -fédérales -fédération -fédérations -fédéraux -fée -féerie -féerique -fées -feindre -feint -feinte -feinter -fêlé -fêler -félicitation -félicitations -félicite -félicité -féliciter -félon -félonie -félonne -féminin -féminine -féminins -femme -femmes -fendiller -fendre -fenouil -fente -fer -fera -ferai -feraient -ferait -ferme -fermé -fermée -fermées -fermement -ferment -fermentation -fermenter -fermer -fermes -fermés -fermeté -fermeture -fermier -féroce -férocité -ferons -feront -ferrailleur -ferrant -ferré -ferrée -ferrées -ferrer -ferreux -ferroviaire -ferroviaires -ferry -fers -fertile -fertiliser -fertilité -fervent -ferveur -fessée -fesser -fesses -festin -festival -festivals -festivités -festoyer -fête -fêté -fêter -fêtes -feu -feuillage -feuille -feuilles -feuilleter -feuilleton -feuilletons -feuillets -feutre -feux -fève -février -fi -fiabilité -fiable -fiables -fiacre -fiançailles -fiancé -fiancer -fiasco -fiat -fibre -fibres -fibrille -ficelle -ficelles -fiche -ficher -fiches -fichier -fichiers -fichu -fictif -fiction -fictions -fidèle -fidèlement -fidèles -fidéliser -fidélité -fief -fieffé -fiel -fiente -fier -fière -fièrement -fiers -fierté -fièvre -fifties -figaro -figé -figue -figuier -figuraient -figurait -figuration -figure -figuré -figurent -figurer -figures -fil -filament -file -filer -files -filet -filets -filiale -filiales -filière -filières -filigrane -fille -filles -fillette -film -filmé -filmer -films -filon -filou -filouter -fils -filtre -filtrer -fin -final -finale -finalement -finales -finalistes -finalité -finance -financé -financée -financées -financement -financements -financent -financer -finances -financés -financier -financière -financièrement -financières -financiers -finasserie -finaud -fine -finesse -fini -finie -finir -finira -finirait -finis -finissent -finit -finition -fins -firent -firmament -firme -firmes -fis -fisc -fiscal -fiscale -fiscales -fiscalité -fiscaux -fissure -fissurer -fit -fixant -fixation -fixe -fixé -fixée -fixées -fixer -fixes -fixés -flageller -flagorner -flagrant -flair -flairer -flambeau -flambée -flamber -flamboyant -flamboyer -flamme -flammes -flanc -flanelle -flâner -flanquer -flaque -flash -flatter -flatteur -fléau -flèche -fléchir -fléchissement -flegmatique -flegme -flemmard -flemmarder -flemmardise -flemme -fleur -fleurer -fleuri -fleurir -fleurissant -fleurissent -fleuron -fleurs -fleuve -fleuves -flexibilité -flexible -flexueux -flic -flirter -flop -floraison -flore -florence -flores -florins -florissant -flot -flots -flottant -flotte -flottement -flotter -flou -floue -flous -fluctuation -fluctuations -fluctuer -fluide -fluidité -flux -foetus -foi -foie -foin -foire -foires -fois -foison -foisonnement -foisonner -folâtre -folie -folies -folklore -folklorique -folle -folles -fomenter -foncé -foncier -foncière -foncières -fonciers -fonction -fonctionnaire -fonctionnaires -fonctionnant -fonctionne -fonctionné -fonctionnement -fonctionnent -fonctionner -fonctions -fond -fonda -fondamental -fondamentale -fondamentalement -fondamentales -fondamentaux -fondant -fondateur -fondateurs -fondation -fondations -fondatrice -fonde -fondé -fondée -fondées -fondement -fondements -fondent -fonder -fondés -fondre -fonds -font -fontaine -fontaines -fonte -foot -football -footballeur -footballeuse -for -forage -force -forcé -forcée -forcément -forcené -forceps -forcer -forcerie -forces -forcés -forcir -forer -forestier -forestiers -forêt -forêts -forfait -forfaitaire -forge -forgé -forger -forgeron -formalisme -formalité -formalités -format -formateurs -formation -formations -forme -formé -formée -formées -formel -formelle -formellement -formelles -formels -forment -former -formes -formés -formidable -formulaire -formulation -formule -formulé -formulée -formulées -formuler -formules -fornicateur -fort -forte -fortement -forteresse -fortes -fortification -fortifier -fortiori -forts -fortuit -fortune -fortuné -fortunes -fortunés -forum -fosse -fossé -fossile -fossiles -fossiliser -fossoyeur -fou -foudre -foudroyant -fouet -fouetter -fougue -fougueux -fouille -fouiller -fouilles -fouiner -fouineur -fouir -foulard -foulards -foule -foulée -fouler -foules -foultitude -foulure -four -fourbe -fourberie -fourbi -fourche -fourchette -fourguer -fourmi -fourmiller -fourneau -fournée -fourni -fournie -fournier -fournies -fournil -fournir -fournira -fournis -fournissant -fournissent -fournisseur -fournisseurs -fournit -fourniture -fournitures -fourrage -fourrer -fourrés -fourrier -fourrure -fours -fous -foutoir -foutre -foutus -fox -foyer -foyers -fracas -fracasser -fraction -fracture -fracturer -fragile -fragiles -fragilité -fragment -fragmentaire -fragments -fragrance -frai -fraîche -fraîchement -fraîches -fraîcheur -frais -fraise -fraiser -fraiseur -fraiseuse -framboise -framboisier -franc -français -franche -franchement -franchi -franchie -franchir -franchise -franchissant -franchissement -franchit -franciscain -franc-maçon -franc-maçonnerie -franc-maçonnique -franco -francophone -francophones -francophonie -frangin -frangine -frappant -frappante -frappe -frappé -frappée -frappées -frappent -frapper -frappés -fraternité -fratricide -fraude -fraudes -fraudeur -frayeur -frégate -frégates -frein -freinage -freiner -freins -frelater -freluquet -frémir -frémissement -frénésie -frénétique -frénétiquement -fréquemment -fréquence -fréquences -fréquent -fréquentation -fréquente -fréquentent -fréquenter -fréquentes -fréquentés -fréquents -frère -frères -frérot -fresque -fret -fréteur -friable -friand -fric -frictionner -frigidaire -frigo -frigorifié -frigorifier -frileux -frime -frimer -frimeur -frimeuse -fringues -fripon -fripouille -frire -frisé -friser -frisson -frissonner -frivole -frivolité -froc -froid -froide -froidement -froideur -froisser -frôlé -frôler -fromage -fromages -froment -froncer -frondaison -fronde -front -frontalière -frontalières -frontaliers -frontière -frontières -frontispice -fronts -frotter -frottis -froussard -froussarde -frousse -fructiculture -fructueux -frugal -frugalité -fruit -fruits -frustration -frustrations -frustré -frustrer -fugace -fugitif -fui -fuient -fuir -fuit -fuite -fuites -fumée -fumer -fumet -fumeur -fumeuse -fumier -funèbre -funérailles -funéraire -funeste -fur -furent -furet -fureter -fureur -furie -furieux -furtif -furtivement -fus -fusée -fusées -fusil -fusillade -fusiller -fusils -fusion -fusionner -fusions -fustiger -fut -fût -futé -futile -fûts -futur -future -futures -futurs -fuyant -gâcher -gâchette -gâchis -gadget -gadgets -gadoue -gaffe -gage -gager -gages -gageure -gagnage -gagnait -gagnant -gagnants -gagne -gagné -gagnée -gagnent -gagner -gagnera -gai -gaiement -gaieté -gaillard -gain -gaine -gaines -gains -gala -galant -galaxie -galère -galerie -galeries -galette -galle -galopin -galure -galurin -gambader -gambettes -gamelle -gamin -gamins -gamme -gan -gandin -gang -gangster -gangsters -ganse -gant -gants -garage -garagiste -garant -garanti -garantie -garanties -garantir -garantis -garantissant -garantit -garce -garçon -garçons -gardait -gardant -garde -gardé -garde-corps -garde-fou -garde-frontière -garde-manger -gardent -garder -gardera -garde-robe -gardes -gardés -gardien -gardiens -gare -garer -gares -garnement -garnir -garnison -gars -gaspillage -gaspiller -gastronomie -gastronomique -gâté -gâteau -gâter -gauche -gaucher -gauchère -gaucherie -gaufrette -gaullisme -gaulliste -gaullistes -gaulois -gaver -gaz -gaza -gaze -gazera -gazeux -gazole -gazon -géant -géante -géantes -géants -gel -gelé -geler -gélule -géminé -géminer -gémir -gémissement -gémissements -gênant -gendarme -gendarmerie -gendarmes -gendre -gène -gêne -gêné -généalogie -gêner -général -générale -généralement -générales -généralisation -généralisé -généralisée -généraliser -généraliste -généralistes -générateur -génération -générations -généraux -généreuse -généreusement -généreux -générique -générosité -gènes -gênés -genèse -génétique -génétiques -gêneur -gêneuse -genévrier -génial -génie -genièvre -génisse -génocide -génome -genou -genoux -genre -genres -gens -gentil -gentille -gentillesse -gentils -gentiment -gentleman -géochimie -géodésie -géodésique -géographe -géographie -géographique -géographiquement -géographiques -geôle -géologie -géométrie -géophysique -géopolitique -gérant -gerbe -gerber -gère -géré -gérée -gèrent -gérer -gérés -germain -germe -germer -gérondif -gésir -gestapo -gestation -geste -gestes -gesticuler -gestion -gestionnaire -gestionnaires -ghetto -ghettos -giaour -gibet -gibier -gifle -gifler -gigantesque -gigantesques -gigot -gigoter -gigots -gilets -girafe -giron -gironde -girondins -girouette -giscardiens -gisement -gisements -gitan -givre -glace -glacé -glacer -glacial -glacier -glacière -glaçon -glaise -glaive -glande -glander -glandouiller -glanures -glapir -glasnost -glisse -glissé -glissement -glissent -glisser -global -globale -globalement -globales -globalité -globaux -globe -gloire -gloriette -glorieuse -glorieuses -glorieux -glorifier -glose -glosé -gloser -glossaire -glouton -gloutonnerie -gluant -glucide -glue -gobelet -gobelin -gober -godasse -godasses -godelureau -godet -godiche -godille -godillot -godillots -gogo -goinfre -goitre -golden -golf -golfe -gombo -gomme -gommer -gonflé -gonflement -gonfler -gorge -gorgée -gorger -gosier -gosse -gosses -gouaille -gouailleur -goudron -goudronnage -goudronné -goudronner -gouffre -goujat -goujaterie -goulag -goulet -goulot -goulu -gourmand -gourmandise -gousse -goût -goûter -goûts -goutte -goutter -gouttes -gouvernail -gouvernants -gouvernement -gouvernemental -gouvernementale -gouvernementales -gouvernementaux -gouvernements -gouverner -gouverneur -gouverneurs -grâce -grâces -gracier -gracieuseté -gracieux -grade -gradés -gradin -gradins -graduation -graffiti -graffitis -grain -graine -grains -graisse -graisser -graisseux -grammaire -grammatical -grammaticalement -gramme -grammes -gramophone -grand -grande -grandement -grandes -grandeur -grandi -grandiose -grandir -grandissant -grandissante -grand-mère -grand-père -grands -grange -granit -granivore -granulé -granuleux -graphe -graphique -graphiques -graphiste -grappe -gras -grasse -grasses -grasset -gratification -gratin -gratis -gratitude -gratos -gratouiller -gratte-ciel -gratte-papier -gratter -gratuit -gratuite -gratuité -gratuitement -gratuites -grave -gravé -gravement -graver -graves -gravier -gravillon -gravir -gravitation -gravité -gravure -gré -greffe -greffer -greffes -grêle -grelotter -grenade -grenades -grené -grenelle -grenier -grenouille -grenu -grève -grèves -gréviste -grévistes -gribouiller -gribouillis -griefs -grièvement -griffe -griffes -griffonnage -griffonner -gril -grillade -grillage -grille -griller -grilles -grillon -grimace -grimer -grimper -grincer -grippe -grippe-sou -gris -grisaille -grise -griser -grises -grisonnant -grisonner -grive -grogne -grommeler -grondement -gronder -gros -groseille -groseillier -grosse -grosses -grossesse -grosseur -grossier -grossièrement -grossièreté -grossir -grossiste -grosso -grotesque -grotte -grouiller -group -groupe -groupement -groupements -grouper -groupes -groupuscule -grue -gué -guelte -guenille -guenon -guêpe -guère -guérilla -guérilleros -guérir -guerre -guerres -guerrier -guerriers -guerroyer -guet -guet-apens -guette -guetter -gueule -gueuse -gueux -guiboles -guichet -guichets -guide -guider -guides -guidon -guillaume -guilleri -guillotine -guindé -guinée -guirlande -guise -guitare -guitariste -gus -gymnastique -gypaète -gypse -gyroscope -habile -habilement -habileté -habilité -habillement -habiller -habit -habitant -habitants -habitat -habitation -habitations -habite -habité -habitent -habiter -habits -habitude -habitudes -habitué -habituel -habituelle -habituellement -habituelles -habituels -habitués -hâbleur -hache -hacher -hachette -hagiographique -haie -haillon -haine -haineux -haïr -hâle -haleine -haler -hâler -haleter -hall -halle -hallebarde -halles -hallucination -halluciner -halte -haltère -hameau -hampe -han -hanche -handicap -handicapé -handicapés -handicaps -hangar -hanneton -hante -hanté -hantise -happe -happer -harangue -harasser -harceler -hardiesse -hareng -hargneux -haricot -harmonie -harmonieux -harmonisation -harmoniser -harpe -harpiste -has -hasard -hasardeux -hasards -hâte -hâter -hausse -hausser -hausses -haut -hautain -haut-de-forme -haute -hautement -hautes -hauteur -haut-parleur -hauts -havane -havas -have -hâve -havre -havresac -heaume -hebdo -hebdomadaire -hebdomadaires -hébergement -héberger -hébété -hectare -hectares -hégémonie -hégire -hein -hélas -héler -hélianthe -hélice -hélicoptère -hélicoptères -hélium -hémicycle -hémisphère -hémoglobine -hémorragie -hennir -héraut -herbage -herbe -herbes -herbivore -herborisateur -herboriste -hercule -héréditaire -héréditaires -hérésie -hérétique -hérisson -héritage -hérité -hériter -héritier -héritiers -hermétique -hermétiquement -héroïne -héroïque -héroïsme -héron -héros -hersage -hersant -hésitant -hésitation -hésitations -hésite -hésité -hésitent -hésiter -hétéroclite -hétérogène -hétérogénéité -heure -heures -heureuse -heureusement -heureux -heurte -heurté -heurtent -heurter -heurts -hexagone -hibou -hideux -hidjabs -hier -hiérarchie -hiérarchique -hiérarchiques -hiéroglyphe -hindou -hindoue -hindouiste -hippodrome -hippopotame -hirondelle -hirsute -hisser -histoire -histoires -historien -historiens -historique -historiquement -historiques -histrion -hit -hiver -hivernage -hivernal -ho -hoché -hocher -holocauste -homard -homélie -homicide -hommage -hommages -homme -hommes -homogène -homologue -homologues -homonyme -honnête -honnêtement -honnêtes -honnêteté -honneur -honneurs -honnir -honorabilité -honorable -honorablement -honorables -honoraire -honoraires -honoré -honorer -honte -honteux -hôpital -hôpitaux -hoqueter -horaire -horaires -horizon -horizons -horizontal -horloge -hormis -horreur -horreurs -horrible -horripiler -hors -horst -hospitalier -hospitalière -hospitaliers -hospitalisé -hospitalisés -hospitalité -hostellerie -hostie -hostile -hostiles -hostilité -hostilités -hôte -hôtel -hôtelier -hôtelière -hôteliers -hôtellerie -hôtels -hôtes -houille -houle -houlette -houleux -hourra -house -housse -housses -huile -huiler -huilerie -huileux -huis -huissier -huissiers -huit -huitième -huître -huîtres -hulotte -hululer -humain -humaine -humaines -humains -humanisme -humaniste -humanitaire -humanitaires -humanité -humble -humbles -humecté -humecter -humer -humeur -humide -humidifier -humidité -humiliation -humilier -humilité -humoriste -humoristique -humour -hure -hurlement -hurlements -hurler -hurluberlu -hutte -hyacinthe -hybrides -hydraulique -hydravion -hydrocarbures -hydrogène -hyène -hygiène -hymne -hyper -hypermarchés -hypertension -hypertonie -hypnotiser -hypocoristique -hypocrisie -hypocrite -hypodermique -hypothèse -hypothèses -hypothétique -hystérie -hystérique -iceberg -iceux -ici -ici-bas -icône -ictère -idéal -idéale -idéaux -idée -idées -identification -identifié -identifier -identifiés -identique -identiques -identité -identités -idéologie -idéologies -idéologique -idéologiques -idéologues -idiot -idiote -idiotie -idolâtrer -idolâtrie -ignare -ignoble -ignominie -ignominieux -ignorait -ignorance -ignorant -ignore -ignoré -ignorent -ignorer -il -île -îles -illégal -illégale -illégalement -illégales -illégalité -illégaux -illégitime -illégitimité -illettré -illicite -illicites -illimité -illimitée -illisible -illogique -illuminer -illusion -illusionner -illusions -illusoire -illustrant -illustration -illustrations -illustre -illustré -illustrée -illustrent -illustrer -ils -image -imagé -images -imaginaire -imagination -imagine -imaginé -imaginée -imaginer -imaginez -imam -imbattable -imbécile -imbroglio -imide -imitation -imiter -immanquable -immanquablement -immature -immédiat -immédiate -immédiatement -immédiates -immédiats -immense -immenses -immensité -immerger -immeuble -immeubles -immigrants -immigration -immigré -immigrer -immigrés -imminent -imminente -immiscer -immixtion -immobile -immobilier -immobilière -immobilières -immobiliers -immobilisme -immobilité -immodéré -immolation -immoler -immonde -immoral -immortel -immotivé -immuable -immunisé -immuniser -immunité -impact -impair -imparfait -impartial -impartialité -impasse -impassibilité -impassible -impatience -impatient -impeccable -impénitent -impensable -imper -impératif -impératifs -impérativement -impératrice -imperceptible -imperfectif -imperfection -impériale -impérialisme -impérialiste -impérieux -impérissable -impéritie -imperméable -impersonnel -impersonnellement -impertinence -impertinent -imperturbable -impétueux -impie -impiété -impitoyable -implacable -implantation -implantations -implanté -implantée -implantées -implanter -implantés -implications -implicite -implicitement -impliquant -implique -impliqué -impliquer -impliqués -implorant -implorer -impoli -impopulaire -import -importance -important -importante -importantes -importants -importateurs -importation -importations -importe -importé -importées -importer -importés -importun -importuner -importunité -imposable -imposables -imposait -imposant -impose -imposé -imposée -imposées -imposent -imposer -imposés -imposition -impossibilité -impossible -impossibles -imposteur -impôt -impotent -impôts -imprécation -imprécis -imprenable -impression -impressionnable -impressionnant -impressionnante -impressionné -impressionner -imprévisible -imprévisibles -imprévoyant -imprévu -imprimé -imprimer -imprimerie -imprimés -imprimeur -improbable -impropre -improvisation -imprudent -impudence -impudent -impuissance -impuissant -impulsion -impuni -impur -imputable -imputer -inabordable -inacceptable -inacceptables -inaccessible -inaccoutumé -inachevé -inactif -inaction -inadmissible -inadvertance -inaltérable -inamical -inanimé -inapplicable -inapproprié -inapte -inassouvi -inattendu -inattendue -inattendus -inattentif -inattention -inaugural -inauguration -inaugure -inauguré -inaugurée -inaugurer -incandescent -incapable -incapables -incapacité -incarcéré -incarcérés -incarnat -incarne -incarné -incarner -incendie -incendier -incendies -incertain -incertaine -incertaines -incertitude -incertitudes -incessant -inchangé -inchangée -incident -incidents -incinération -incinérer -incisive -incisives -incitation -incite -incité -incitent -inciter -incivil -inclément -inclinaison -inclination -incliné -incliner -incluant -inclure -inclus -inclusivement -incohérent -incollable -incolore -incombe -incommode -incommodité -incomparable -incompatibilité -incompatible -incompatibles -incompétent -incomplet -incomplétude -incompréhensible -incompréhension -inconcevable -inconciliable -inconditionnel -inconfort -inconfortable -incongru -incongruité -inconnaissance -inconnu -inconnue -inconnues -inconnus -inconscience -inconscient -inconséquent -inconsidéré -inconsidérément -inconsistant -inconsolable -inconstance -inconstant -inconstitutionnel -incontestable -incontestablement -incontournable -inconvenance -inconvenant -inconvénient -inconvénients -incorporation -incorrect -incorrigible -incorruptible -incrédule -increvable -incrimination -incriminer -incroyable -incroyant -inculpation -inculpations -inculpé -inculpée -inculper -inculpés -inculte -inculture -incurable -incurie -incursion -incurver -indécence -indécent -indéchiffrable -indécis -indécision -indéfini -indéfiniment -indélébile -indélicat -indélicatesse -indemnisation -indemniser -indemnitaire -indemnité -indemnités -indéniable -indéniablement -indépendamment -indépendance -indépendant -indépendante -indépendantes -indépendantiste -indépendantistes -indépendants -indésirable -indéterminé -indéterminée -index -indic -indicateur -indicateurs -indicatif -indication -indications -indice -indices -indiciaire -indifféremment -indifférence -indifférent -indifférents -indigence -indigène -indigènes -indignation -indigne -indigner -indiquait -indiquant -indique -indiqué -indiquée -indiquent -indiquer -indirect -indirecte -indirectement -indirects -indiscernable -indiscret -indiscrétion -indiscutable -indispensable -indispensables -indisposition -indissoluble -individu -individualiste -individuel -individuelle -individuellement -individuelles -individuels -individus -indivis -indivisibilité -indivisible -indolemment -indolence -indolent -indomptable -indubitable -induire -induit -indulgence -industrialisation -industrialisés -industrie -industriel -industrielle -industrielles -industriels -industries -inédit -inédite -inédits -ineffable -inefficace -inégal -inégalé -inégalité -inégalités -inélégant -inéluctable -inepte -ineptie -inépuisable -inéquitable -inerte -inertie -inestimable -inévitable -inévitablement -inévitables -inexact -inexercé -inexhaustible -inexpérience -inexpérimenté -inexpert -inexpugnable -infaillible -infaisable -infâme -infamie -infanterie -infantile -infatigable -infatuation -infécond -infect -infecte -infecter -infectieux -infection -inféodé -inférieur -inférieure -inférieures -inférieurs -infernal -infernale -infichu -infidèle -infidélité -infime -infini -infinie -infiniment -infinité -infirme -infirmerie -infirmier -infirmière -infirmières -infirmiers -infirmité -inflammation -inflation -inflationniste -inflationnistes -infléchir -inflexible -infligé -infliger -influence -influencé -influencer -influences -influent -influer -info -infondé -informaticiens -information -informations -informatique -informatiques -informatisé -informé -informée -informées -informelle -informer -informés -infortune -infortuné -infoutu -infraction -infractions -infrastructure -infrastructures -infructueux -ingénierie -ingénieur -ingénieurs -ingénieux -ingénu -ingénuité -ingérence -ingrat -ingratitude -ingrédients -inguérissable -ingurgiter -inhabileté -inhabitable -inhabité -inhabituel -inhabituelle -inhaler -inhérent -inhiber -inhumain -inhumanité -inhumation -inhumer -inimaginable -inimitié -inintelligible -ininterrompu -inique -iniquité -initial -initiale -initialement -initiales -initiateur -initiation -initiatique -initiative -initiatives -initié -initier -initiés -injecter -injection -injure -injures -injurier -injurieusement -injurieux -injuste -injustement -injustice -injustices -injustifié -inlassable -inlassablement -inné -innocence -innocent -innocenter -innombrable -innombrables -innovation -innovations -inoccupé -inoffensif -inondation -inondations -inonder -inopérant -inopiné -inopportun -inoubliable -inouï -inoxydable -inquiet -inquiétant -inquiétante -inquiétantes -inquiétants -inquiète -inquiété -inquiéter -inquiétés -inquiets -inquiétude -inquiétudes -inquisition -insalubre -insatiable -insatisfaction -insatisfait -insaturé -inscription -inscriptions -inscrire -inscrit -inscrite -inscrites -inscrits -insecte -insécurité -insensé -insensibilité -insensible -insensibles -inséré -insérer -insertion -insidieux -insigne -insignifiant -insinuation -insinuer -insipide -insistance -insistant -insiste -insisté -insistent -insister -insociable -insolence -insolent -insolite -insolvable -insomnie -insouciance -insouciant -insoucieux -inspecter -inspecteur -inspecteurs -inspection -inspectorat -inspiration -inspire -inspiré -inspirée -inspirées -inspirer -inspirés -instabilité -instable -installation -installations -installé -installée -installées -installer -installés -instance -instances -instant -instantané -instantanément -instants -instar -instauration -instauré -instaurer -instigateur -instiguer -instinct -instinctif -instituant -institué -instituer -institut -instituteur -instituteurs -institution -institutionnel -institutionnelle -institutionnelles -institutionnels -institutions -institutrice -instituts -instructeur -instruction -instructions -instruire -instruit -instrument -instruments -insu -insuccès -insuffisamment -insuffisance -insuffisances -insuffisant -insuffisante -insuffisantes -insuffisants -insulaire -insuline -insultant -insultante -insulte -insulter -insupportable -insupportables -insurgés -insurmontable -insurrection -intact -intacte -intarissable -intégral -intégrale -intégralement -intégralité -intégrant -intégration -intègre -intégré -intégrée -intégrées -intégrer -intégrés -intégrisme -intégrismes -intégriste -intégristes -intégrité -intellect -intellectuel -intellectuelle -intellectuellement -intellectuelles -intellectuels -intelligence -intelligent -intelligente -intelligentsia -intempérant -intempestif -intenable -intendance -intendant -intense -intensément -intenses -intensif -intensification -intensifier -intensité -intensive -intention -intentionnel -intentions -inter -intercesseur -interdépendant -interdiction -interdire -interdisant -interdisent -interdit -interdite -interdites -interdits -intéressant -intéressante -intéressantes -intéressants -intéresse -intéressé -intéressées -intéressement -intéressent -intéresser -intéressés -intérêt -intérêts -intergouvernementale -intergroupe -intérieur -intérieure -intérieures -intérieurs -intérim -intérimaire -intérimaires -interjection -interlinéaire -interlocuteur -interlocuteurs -interloqué -intermédiaire -intermédiaires -interminable -interminables -interministériel -interministérielle -international -internationale -internationales -internationalisation -internationaux -interne -interné -interner -internes -interpellation -interpellé -interpellées -interpeller -interpellés -interprétatif -interprétation -interprétations -interprète -interprété -interprétée -interpréter -interprètes -interrégional -interrogateur -interrogatif -interrogation -interrogations -interrogatoire -interroge -interrogé -interrogées -interroger -interrogés -interrompre -interrompu -interrompue -interrompues -interrupteur -interruption -intersection -interstice -interstitiel -intersyndicale -intertropical -interurbain -intervallaire -intervalle -intervalles -intervenant -intervenants -intervenir -intervention -interventions -intervenu -intervenue -intervenues -intervenus -intervienne -interviennent -intervient -interview -interviews -intestin -intime -intimement -intimes -intimidé -intimider -intimité -intitulé -intitulée -intolérable -intolérance -intoxiqué -intoxiquer -intra -intraitable -intransigeant -intransitif -intrépide -intrication -intrigant -intrigue -intriguer -intrigues -introductif -introduction -introduire -introduisant -introduit -introduite -introuvable -intrus -intruse -intrusion -intuition -inusable -inutile -inutiles -inutilisable -invalide -invalides -invalidité -invariabilité -invariable -invariablement -invasion -invectiver -inventaire -invente -inventé -inventée -inventer -inventeur -inventeurs -inventif -invention -inventions -inventorier -inverse -inversement -invertébré -investi -investies -investigateur -investigation -investigations -investiguer -investir -investis -investissement -investissements -investissent -investisseurs -investit -investiture -invincible -invisible -invisibles -invitant -invitation -invite -invité -invitée -invitées -inviter -invités -involontaire -invoquant -invoque -invoqué -invraisemblable -invulnérable -iode -iodure -ion -ira -irait -irascible -irénique -iris -ironie -ironique -ironiquement -ironise -ironisé -iront -irradiation -irradier -irrationnel -irréalisable -irréaliste -irrecevable -irréductible -irréductibles -irréel -irréfléchi -irréfutable -irrégularité -irrégularités -irrégulier -irréligion -irrémédiable -irremplaçable -irréparable -irrépressible -irréprochable -irrésistible -irrésolu -irrésolution -irresponsabilité -irresponsable -irresponsables -irrévérence -irrévérencieux -irréversible -irrévocable -irriguer -irritable -irritation -irrité -irriter -irruption -isolé -isolée -isolées -isolement -isoler -isolés -issu -issue -issues -issus -itinéraire -itinéraires -itinérant -ivoire -ivoiriens -ivre -ivrogne -jacasser -jachère -jacinthe -jack -jade -jadéite -jadis -jaguar -jaillir -jaillissement -jalousement -jalouser -jalousie -jaloux -jamais -jambe -jambes -jambon -jambons -janvier -japper -jaquette -jardin -jardinier -jardins -jargon -jarousse -jarret -jars -jas -jaser -jaseuse -jauge -jauger -jaune -jaunes -jaunir -jaunisse -jaunissement -javel -javelot -jazz -je -jean -jeans -jet -jetait -jetant -jeté -jetée -jeter -jetés -jeton -jetons -jette -jettent -jeu -jeudi -jeun -jeune -jeûne -jeunes -jeunesse -jeunesses -jeux -job -jogging -joie -joies -joindre -joint -joints -jointure -joker -joli -jolie -joliment -jolis -jonc -jonction -joua -jouaient -jouait -jouant -joue -joué -jouée -jouées -jouent -jouer -jouera -jouet -jouets -joueur -joueurs -joug -jouir -jouissance -jouit -joujou -jour -journal -journalier -journalisme -journaliste -journalistes -journalistique -journaux -journée -journées -jours -jovial -joyeuse -joyeusement -joyeux -jubilation -jubilé -jubiler -judiciaire -judiciaires -judicieux -judo -juge -jugé -jugeaient -jugeait -jugeant -jugée -jugées -jugement -jugements -jugent -juger -juges -jugés -juif -Juif -juifs -juillet -juin -juive -Juive -juives -jules -julien -Juliette -Jullian -jumeau -jumelle -jument -jungle -junte -jupe -jupes -Jupiter -jupon -Juppé -jura -jure -juré -jurer -jurés -juridiction -juridictions -juridique -juridiquement -juridiques -jurisconsulte -jurisprudence -juriste -juristes -juron -jury -jurys -jus -jusant -jusque -juste -justement -justes -justesse -justice -justiciable -justicier -justifiait -justifiant -justification -justifie -justifié -justifiée -justifiées -justifient -justifier -jute -juteux -juvénile -juxtaposition -Kaboul -Kadar -Kadhafi -Kafka -kafkaïenne -Kahn -kanak -Karabakh -Karajan -Karl -Karpov -karstique -Kaspar -Kasparov -Kazan -Kelly -Kennedy -Kenya -kenyan -khan -Kharg -Khartoum -khmers -Khrouchtchev -kidnapper -Kiev -kilo -kilomètre -kilomètres -kilos -kilt -kiosque -klaxon -koch -konzern -krach -kremlin -kreuzer -kyste -la -là -là-bas -label -labeur -laboratoire -laboratoires -laborieuse -laborieusement -laborieuses -laborieux -labour -labourer -labyrinthe -lac -lacérer -lacet -lacez -lâche -lâché -lâcher -lâcheté -laconique -Lacoste -Lacroix -lacs -lacté -lactifère -lactique -lacunaire -lacune -lacunes -lacustre -Lada -ladite -Laffitte -Laffont -lagune -laïc -laïcité -laïcs -laid -laideron -laideur -Laignel -laine -lainé -laineux -lainier -laïque -laïques -laissa -laissaient -laissait -laissant -laisse -laissé -laissée -laissées -laissent -laisser -laissera -laisserait -laisser-aller -laissés -laissez -laissez-passer -laissons -lait -laiterie -laiteux -laitier -laiton -laitue -laïus -lama -lambin -lambris -lame -lamelle -lamentable -lamie -laminage -lampe -lamper -lampyre -lance -lancé -lancée -lancées -lancement -lancent -lancer -lancés -lanceur -lancinant -lancinante -lanciner -land -landes -langage -langages -lange -langes -langouste -langue -Languedoc -langues -languette -languir -lanière -lanterne -lapereau -lapin -lapins -laps -lapsus -laquais -laque -laquelle -laquer -Lara -larcin -lard -large -largement -larges -largesse -largeur -larme -larmes -larmoyer -Larousse -larynx -las -lascif -lasciveté -laser -lassant -lasse -lasser -lassitude -latéral -latin -latine -latino -latitude -latte -laure -lauréat -lauréats -Laurence -Laurent -Lausanne -lavabo -Laval -lavé -lave-auto -laver -lavette -Lawrence -laxatif -laxisme -Lay -laye -layette -Lazare -le -leader -leaders -leadership -leasing -lecanium -Lecanuet -Lech -lécher -lèche-vitrines -Leclerc -leçon -leçons -lecteur -lecteurs -lectrice -lecture -lectures -Ledoux -Lee -Leeds -Lefebvre -légal -légale -légalement -légales -légalisation -légaliser -légalité -légataire -légation -légaux -légendaire -légende -légendes -léger -légère -légèrement -légères -légèreté -légers -légion -législateur -législatif -législation -législations -législative -législatives -législature -légitime -légitimement -légitimer -légitimes -légitimité -legs -léguer -légume -légumes -Leipzig -leitmotiv -Lemire -Lemond -lendemain -lendemains -Lendl -Lénine -Leningrad -léninisme -léniniste -Lenoir -lent -lente -lentement -lenteur -lenteurs -lentille -lents -Léon -Léopold -Léotard -lequel -Leroy -les -lès -léser -lésiner -lésion -lesquelles -lesquels -lessive -lessiver -lest -lester -létal -léthargie -lettre -lettré -lettres -leur -leurre -leurrer -leurs -lev -levain -levant -lève -levé -levée -levées -lèvent -lever -levés -lève-tôt -levier -lèvre -lèvres -levure -Lévy -Lewis -lexical -lexicographe -lexicographie -lexicographique -lexique -lexiques -lézard -lézarde -liaison -liaisons -liant -liasse -Liban -libanais -libanaise -libanaises -libeller -libéral -libérale -libérales -libéralisation -libéralisme -libéralité -libération -libérations -libéraux -libère -libéré -libérée -libérer -libérés -Libéria -libérien -liberté -libertés -libertin -Libourne -libraire -libraires -librairie -librairies -libre -librement -libres -Libye -libyen -libyenne -libyens -lice -licence -licences -licencié -licenciement -licenciements -licencier -licenciés -licencieux -lichen -licite -licou -lie -lié -liée -liées -liège -lien -Lienemann -liens -lier -liés -liesse -lieu -lieu-dit -lieutenant -lieux -lièvre -life -ligament -ligaturer -lignage -ligne -lignée -lignées -lignes -ligoter -ligue -Likoud -lilas -Lille -lima -Lima -limaçon -lime -limer -liminaire -limitant -limitation -limitations -limite -limité -limitée -limitées -limitent -limiter -limites -limités -limogeage -limoger -limoges -limonade -limousin -limousine -limpide -lin -Linda -Linder -line -linéaire -linéament -linge -lingual -linguiste -linguistes -linguistique -linguistiques -linoléum -lion -Lionel -lionne -lions -liquidation -liquide -liquider -liquides -liquidité -liquidités -lire -lires -lis -lisant -Lisbonne -lisent -liseré -liseur -lisible -lisière -lisse -lisser -liste -listes -Liszt -lit -litige -litre -litres -lits -littéraire -littéraires -littéral -littéralement -littérature -littératures -littoral -Lituanie -lituanien -lituaniens -liturgie -Liverpool -living-room -livraison -livraisons -livrant -livre -livré -livrée -livrées -livrent -livrer -livres -livrés -livresque -livret -livreur -Ljubljana -lobby -local -locale -localement -locales -localisation -localité -localités -locataire -locataires -location -locaux -locomotive -locution -Lodz -loge -logement -logements -loger -loges -logés -logeur -logiciel -logiciels -logique -logiquement -logiques -logis -logistique -logo -loi -loin -lointain -lointaine -lointaines -lointains -loir -Loire -lois -loisir -loisirs -lombard -long -longitude -longrine -longs -longtemps -longue -longuement -longues -longuet -longueur -longueurs -longue-vue -look -lopin -loquace -loque -lord -lorgner -loriot -lorraine -lors -lorsque -lot -loterie -lotissement -loto -lots -louange -louche -loucheur -loue -loué -louer -loueur -loufoque -louis -loup -loupé -louper -loupiot -loups -lourd -lourdaud -lourde -lourdement -lourdes -lourdeur -lourds -louvoyer -Louvre -loyal -loyauté -loyer -loyers -lu -lubricité -lubrifier -lubrique -lucide -lucidité -luciole -lue -luette -lueur -lugubre -lui -lui-même -luire -luis -luisant -lumière -lumières -lumineuse -lumineux -lunatique -lundi -lune -lunette -lunettes -lustrage -lustre -lustres -lutrin -lutte -lutter -luttes -lutteur -luxation -luxe -luxer -luxueusement -luxueux -luxuriant -luxurieux -lycée -lycéen -lycéenne -lycéens -lycées -lyrique -lyriques -lyrisme -lys -lysée -ma -maboul -mac -macaroni -macédoine -macérer -mâcher -machin -machinal -machinalement -machination -machine -machines -mâchoire -mâchonner -macintosh -maçon -maçonnerie -maçonnique -maçons -macro -madame -made -madeleine -mademoiselle -madré -madrier -mafia -magasin -magasins -magazine -magazines -Maghreb -maghrébine -maghrébins -magicien -magie -magique -magiquement -magistrat -magistrats -magistrature -magnanime -magnanimité -magnat -magnétique -magnificence -magnifique -magnifiquement -magnifiques -magnitude -magouille -magouilleur -mahométan -mai -maigre -maigres -maigrir -maille -maillechort -maillet -maillon -maillot -main -mainmise -mains -maintenait -maintenance -maintenant -maintenir -maintenu -maintenue -maintenus -maintes -maintien -maintiennent -maintient -maints -maïolique -maire -maires -mairesse -mairie -mairies -mais -maïs -maison -maisonnée -maisons -maître -maîtres -maîtresse -maîtrise -maîtrisé -maîtrisée -maîtriser -majesté -majestueux -majeur -majeure -majeures -majeurs -majolique -major -majoration -majoré -majorer -majoritaire -majoritairement -majoritaires -majorité -majors -majuscule -mal -malade -malades -maladie -maladies -maladresse -maladresses -maladroit -maladroite -malaise -malaisé -malaisément -malappris -malavisé -malchance -maldonne -mâle -malédiction -malencontreux -malentendant -malentendu -malentendus -malfaçon -malfaiteur -malfaiteurs -malgré -malhabile -malheur -malheureuse -malheureusement -malheureux -malheurs -malhonnête -mali -malice -malicieux -malignité -malin -malingre -malintentionné -malle -malmener -malotru -malouines -malpropre -Malraux -malsain -malséant -maltais -malte -malveillance -malveillant -malvenu -maman -mammifère -management -manager -managers -Managua -mancelle -manche -manches -Manchester -manchette -mandarine -mandarinier -mandat -mandataire -mandats -Mandela -mander -mandibule -Manet -Manfred -mange -mangeoire -manger -Manhattan -maniable -manie -maniement -manier -manière -maniéré -manifestaient -manifestant -manifestants -manifestation -manifestations -manifeste -manifesté -manifestée -manifestement -manifestent -manifester -manigance -manigancer -manille -manipulation -manipulations -manipuler -Mann -manne -mannequin -mannequins -manoeuvre -manoeuvres -manouche -manquaient -manquait -manque -manqué -manquent -manquer -manquera -manqueront -Mans -manteau -manu -manuel -manuelle -manuels -manufacture -manufacturé -manufacturés -manuscrit -manuscrits -mao -maquereau -maquette -maquettes -maquillage -maquiller -maquis -maquisards -marais -marasme -marathon -marbre -marc -marchais -marchait -marchand -marchande -marchandise -marchandises -marchands -marche -marché -marchent -marchepied -marcher -marches -marchés -Marcos -mardi -mare -marécage -maréchal -maréchal-ferrant -marée -marées -Margaret -Margarita -marge -marges -marginal -marginalisation -marginaux -margotins -marguerite -mari -maria -mariage -mariages -Marian -Marianne -marie -marié -mariée -marier -mariés -marin -marina -marine -mariner -marines -marins -Mario -Marion -marionnette -marionnettes -maritime -maritimes -mark -marketing -marks -marlou -marmelade -marmite -marmonner -marmot -marmots -marne -marner -Maroc -marocain -marocaine -marocaines -marocains -maronite -marotte -marquait -marquant -marque -marqué -marquée -marquées -marquent -marquer -marquera -marques -marqués -marquis -marquise -marraine -Marrakech -marrant -marre -marrer -marron -marronnier -mars -marseillais -marseillaise -Marseille -Marshall -marteau -marteler -martial -martiale -martin -martine -martinez -martini -Martinique -martin-pêcheur -martyr -martyre -martyriser -martyrs -Marx -marxisme -marxiste -mary -mas -masculin -masculine -masculinité -masculins -masque -masqué -masquer -masques -masqués -massacre -massacrer -massacres -masse -masses -massif -massifs -massive -massivement -massives -mastic -mastiquer -mastodonte -masure -mât -match -matches -matelas -matelot -mater -matériau -matériaux -matériel -matérielle -matériellement -matérielles -matériels -maternel -maternelle -maternelles -maternité -mathématicien -mathématique -mathématiquement -mathématiques -maths -matière -matières -Matif -Matignon -matin -matinal -matinée -matineux -matins -matité -Matra -matraque -matrice -matrimonial -maturité -maudire -maudit -Maugham -Maurice -Mauritanie -Mauroy -maussade -mauvais -mauvaise -mauvaises -mauve -maux -Max -maxi -maxillaire -maximal -maximale -maxime -maximum -maxwell -mayas -mec -mécanicien -mécaniciens -mécanique -mécaniquement -mécaniques -mécanisme -mécanismes -mécano -mécénat -mécènes -méchamment -méchanceté -méchant -méchants -mèche -méconnaissance -méconnaître -méconnu -méconnus -mécontent -mécontentement -mécontents -Mecque -mécréant -mecs -médaille -médailler -médailles -médecin -médecine -médecins -Medellin -media -média -médian -médias -médiateur -médiateurs -médiation -médiatique -médiatiques -médiatisation -médical -médicale -médicalement -médicales -médicament -médicaments -médicaux -médicinal -Médicis -médiéval -médiocre -médiocres -médiocrité -médire -médisance -méditatif -méditation -méditer -méditerranée -méditerranéen -meeting -meetings -méfiance -méfiant -méfie -méfier -mégalo -mégalomane -mégère -mégoter -méhari -meilleur -meilleure -meilleures -meilleurs -mélancolie -mélancolique -mélancoliquement -mélange -mélanger -mêlant -mêle -mêlé -mêlée -mêlent -mêler -mêlés -mélodie -mélodies -mélodieux -mélodique -melon -membrane -membre -membres -même -mémé -mémento -mêmes -mémoire -mémoires -mémorable -mémorial -mémorisation -mémoriser -menace -menacé -menacée -menacées -menacent -menacer -menaces -menacés -ménage -ménagé -ménagement -ménager -ménagère -ménagères -ménages -menait -menant -mendiant -mendiante -mendier -mendigot -mendigote -mène -mené -menée -menées -mènent -mener -menés -meneur -menotte -menottes -mensonge -mensonger -mensonges -menstruation -menstrues -mensuel -mensuelle -mensuelles -mensuels -mental -mentale -mentales -mentalité -mentalités -mentaux -menteur -menthe -mention -mentionné -mentionner -mentions -mentir -menton -menu -menuisier -menus -mépris -méprisable -méprisant -méprise -mépriser -mer -mercenaire -mercenaires -mercerie -merci -mercredi -mercure -merde -mère -mères -merguez -méridien -méridional -meringue -méritait -mérite -mérité -méritent -mériter -mérites -merle -merlin -merrain -mers -merveille -merveilles -merveilleux -mes -mésaventure -mésaventures -mésentente -mésestimer -mésintelligence -mesquin -mesquinerie -message -messager -messagère -messages -messe -messie -messieurs -mestre -mesure -mesuré -mesurée -mesurer -mesures -met -métal -métallique -métalliques -métallurgie -métallurgiques -métamorphose -métamorphoser -métamorphoses -métaphore -métaphores -métaphorique -métaphoriquement -métaphysique -métaux -métayer -météo -météorite -météorites -météorologie -météorologiques -méthode -méthodes -méthodologie -métier -métiers -métis -métisser -métrage -métrages -mètre -métrer -mètres -métro -métrologie -métropole -métropoles -métropolitain -mets -mettaient -mettait -mettant -mette -mettent -metteur -metteurs -mettons -mettra -mettrait -mettre -Metz -meuble -meubler -meubles -meuf -meunerie -meunier -meurent -meurt -Meurthe -meurtre -meurtres -meurtrier -meurtrière -meurtriers -meurtrir -Meuse -mexicain -mexicaine -mexicains -Mexico -Mexique -Meyer -mi -Miami -Michael -Michel -Michèle -Michelet -Michelin -mickey -micmac -micro -micro- -microbe -microgrenu -micro-ordinateur -micro-organisme -microphone -micros -midi -midinette -mie -miel -miellé -mielleux -mien -mienne -miennes -miens -miette -miettes -mieux -mignard -migration -migrations -mikado -Mike -mil -milan -Milan -milice -milices -miliciens -milieu -milieux -militaire -militairement -militaires -militant -militante -militantisme -militants -militer -Millau -mille -millénaire -millénaires -Miller -milles -millésime -milliard -milliardaire -milliards -millier -milliers -millimètre -millimètres -million -millionnaire -millions -Millon -mimi -min -minable -minauder -mince -minces -mine -minerai -minéralogie -mines -minet -mineur -mineurs -mini -minier -minière -minières -minimal -minimale -minime -minimiser -minimum -ministère -ministères -ministériel -ministérielle -ministériels -ministre -ministres -minitel -minoritaire -minoritaires -minorité -minorités -minoterie -minotier -minou -minuit -minuscule -minuscules -minute -minutes -minutie -minutieuse -minutieusement -mioche -mioches -mir -miracle -miracles -miraculeusement -mirage -Mireille -mirettes -miroir -miroirs -mis -mise -miser -misérable -misérables -misère -miséricorde -miséricordieux -mises -misogyne -missile -missiles -mission -missionnaires -missions -missive -mistigri -mistral -mit -mitaine -Mitchell -mi-temps -mitigé -mitoyen -mitraillette -mitre -Mitsotakis -Mitsubishi -Mitterrand -mitterrandiste -mitterrandistes -mixte -mixtes -mlle -moabite -mobile -mobiles -mobilier -mobilières -mobilisation -mobilise -mobilisé -mobilisent -mobiliser -mobilisés -mobilité -Mobutu -moche -mocheté -modalités -mode -modèle -modeler -modèles -modération -modéré -modérée -modérer -modérés -moderne -modernes -modernisation -moderniser -modernisme -moderniste -modernité -modes -modeste -modestement -modestes -modestie -modifiant -modification -modifications -modifie -modifié -modifiée -modifient -modifier -modifiés -modo -module -moelle -moelleux -moeurs -Mogadiscio -Mohamed -Mohammed -moi -moi-même -moindre -moindres -moine -moineau -moines -moins -mois -moise -moisi -moisissure -moisson -moissonner -moissonneur -moissonneuse -moissonneuse-batteuse -moite -moitié -molaire -moldave -Moldavie -môle -moléculaire -molécule -molécules -Molière -mollesse -mollet -mollusque -Molotov -moment -momentané -momentanément -moments -mon -monacal -Monaco -monarchie -monarchique -monarque -monastère -monastique -monceau -mondain -monde -mondes -mondial -mondiale -mondiales -mondiaux -monétaire -monétaires -Mongolie -Monique -moniteurs -monnaie -monnaies -Monnet -mono- -monologue -monôme -monopole -monopoles -Monory -monotone -monotonie -monsieur -monstre -monstres -monstrueux -mont -montage -montagnard -montagne -montagnes -montagneux -Montaigne -montait -Montalembert -Montana -montant -montante -montants -Montbéliard -monte -monté -montée -montées -montent -monter -montés -Montesquieu -monteur -monteurs -Montfermeil -monticule -Montmartre -montoir -Montparnasse -Montpellier -montrait -montrant -montre -montré -Montréal -montrée -montrent -montrer -montrés -Montreuil -monture -monument -monumental -monumentale -monuments -Moore -moque -moquerie -moquette -moqueur -moral -morale -moralement -morales -moralisation -moralité -moratoire -moraux -Morbihan -morceau -morceaux -mordancer -mordant -mordre -moreau -Morgan -morgue -moribond -Morin -morne -mornifle -morose -morosité -morphinomane -Morris -morsure -mort -mortalité -morte -mortel -mortelle -mortes -mortier -mortification -mortifier -morts -mortuaire -morue -morve -mosaïque -Moscou -moscovites -Moselle -mosquée -mosquées -mot -motard -motards -mot-clef -moteur -moteurs -motif -motifs -motion -motions -motivation -motivations -motivé -motivée -motiver -motivés -moto -motocyclette -motos -motrice -mots -mou -mouchard -moucharder -mouche -mouchoir -moue -mouette -moufle -mouillé -mouiller -moule -mouler -moules -moulin -moulins -mouloud -mourir -mourut -moussa -mousse -mousseux -moustache -moustaches -moustachu -moustique -moutard -moutarde -mouton -mouvement -mouvementé -mouvements -mouvoir -moyen -moyennant -moyenne -moyennes -moyens -mucoviscidose -muet -muets -muette -mufle -muflerie -mugissement -mule -mules -multicolore -multicolores -multiforme -multimédia -multimédias -multinationale -multinationales -multipartisme -multiple -multiples -multipliant -multiplication -multiplicité -multiplie -multiplié -multipliées -multiplient -multiplier -multipliés -multitude -muni -Munich -municipal -municipale -municipales -municipalité -municipalités -municipaux -munir -munis -munitions -muqueuse -mur -mûr -muraille -Murdoch -mûres -muret -Muriel -mûrir -murmure -murmurer -murs -mûrs -musarder -muscle -muscles -musée -musées -muséum -music -musical -musicale -musicales -musicaux -musicien -musicienne -musiciens -musique -musiques -Musset -musulman -musulmane -musulmanes -musulmans -mutation -mutations -mutilé -mutiler -mutinerie -mutisme -mutuel -mutuelle -mutuellement -mutuelles -Myanmar -myope -myopie -Myriam -mystère -mystères -mystérieuse -mystérieux -mystifier -mystique -mythe -mythes -mythique -mythologie -mythomane -nabot -Nagasaki -nage -nageoire -nager -naguère -Nagy -naïadacée -naïf -nain -naissance -naissances -naisse -naissent -naît -naître -naïveté -Nakhitchevan -Nallet -Namibie -Nancy -Nanterre -Nantes -nantis -naphte -nappe -nappes -naquit -narcissique -narcissisme -narcodollars -narcose -narcotique -narine -narrateur -narration -narrer -nase -naseau -natal -natale -natation -natif -nation -national -nationale -nationales -nationalisation -nationalisé -nationalisées -nationalisme -nationaliste -nationalistes -nationalité -nationalités -nationaux -nations -natte -natter -naturaliste -nature -naturel -naturelle -naturellement -naturelles -naturels -naturiste -naufrage -nausée -naval -navale -navales -navals -navet -navette -navettes -navigants -navigateur -navigation -navigue -naviguer -navire -navires -Navratilova -navrer -nazi -nazie -nazis -nazisme -ne -né -néanmoins -néant -nébuleuse -nec -nécessaire -nécessairement -nécessaires -nécessitant -nécessite -nécessité -nécessitent -nécessiter -nécessités -née -néerlandais -néerlandaise -néerlandaises -nées -nef -néfaste -négatif -négatifs -négation -négative -négativement -négatives -négligé -négligeable -négligeables -négligeant -négligence -négliger -négoce -négociables -négociant -négociants -négociateur -négociateurs -négociation -négociations -négocie -négocié -négociée -négociées -négocient -négocier -négociés -nègre -négresses -neige -neiges -néologisme -néon -néphrite -néphropathie -nerf -nerfs -nerveuse -nerveux -nervi -nervosité -nervure -nés -nets -nette -nettement -nettes -netteté -nettoiement -nettoyage -nettoyé -nettoyer -nettoyeur -nettoyeuse -neuf -neufs -neural -neutraliser -neutralité -neutre -neutron -neuve -neuves -neuvième -neveu -Newman -nez -ni -niais -niant -Nicaragua -Nice -nicher -nichons -nickel -Nicola -nicolaïte -Nicolas -Nicole -nid -nie -nié -nièce -nier -Nietzsche -nigaud -Nigel -Niger -Nil -nimber -Nîmes -Nina -nipper -nippes -nippon -nippone -nippones -nippons -niquer -niveau -niveaux -niveler -Nixdorf -Noah -Nobel -noble -nobles -noblesse -noce -noces -nocturne -nocturnes -Noël -Noëlle -noeud -noeuds -noir -noire -noires -noirs -noisetier -noisette -noix -nolis -nom -nomade -nomades -nombre -nombreuse -nombreuses -nombreux -nombril -nombrilisme -nombriliste -nomenclature -nomenklatura -nominal -nominatif -nomination -nominations -nominés -nomme -nommé -nommée -nommément -nomment -nommer -nommés -noms -non -nonante -nonce -nonchalance -nonchalant -nonciature -non-engagé -non-immixtion -non-ingérence -non-intervention -nonne -nonobstant -non-sens -non-sismique -non-stop -non-valable -non-voyant -Nord -nordique -Noriega -normal -normale -normalement -normales -normalisation -normatif -normaux -norme -normes -nos -nostalgie -nostalgique -nostalgiques -not -notable -notablement -notables -notaire -notait -notamment -notant -notation -note -noté -notent -noter -notera -notes -notice -notification -notion -notions -notoire -notoirement -notons -notoriété -notre -nôtre -nôtres -noué -nouer -nouilles -Nouméa -nounou -nounours -nourri -nourrice -nourrie -nourrir -nourrissant -nourrissent -nourrisson -nourrit -nourriture -nous -nouveau -nouveau-né -nouveauté -nouveautés -nouveaux -nouvel -nouvelle -nouvellement -nouvelles -novembre -novice -noyau -noyé -noyer -nu -nuage -nuages -nuance -nuancé -nuances -nucléaire -nucléaires -nudiste -nudité -nue -nuée -nues -nuire -nuisance -nuisances -nuisible -nuit -nuits -nul -nulle -nullement -nullité -nuls -numéral -numérique -numériques -numéro -numéros -numéroter -nunuche -nu-pieds -nuptial -nuque -nurse -nus -nutritif -nutrition -oasis -obédience -obéir -obéissance -obéissant -obèse -obésité -objecter -objectif -objectifs -objection -objections -objective -objet -objets -oblation -obligataire -obligataires -obligation -obligations -obligatoire -obligatoirement -obligatoires -oblige -obligé -obligeant -obligée -obligées -obligent -obliger -obligés -oblique -obliquement -oblitérer -obscène -obscénité -obscur -obscurcir -obscure -obscures -obscurité -obsédant -obséder -obsèques -observait -observant -observateur -observateurs -observation -observations -observatoire -observe -observé -observée -observées -observent -observer -obsession -obsolète -obstacle -obstacles -obstétrical -obstétrique -obstination -obstiné -obstinément -obstruction -obstruer -obtenant -obtenir -obtention -obtenu -obtenue -obtenues -obtenus -obtiendra -obtiennent -obtient -obtus -obus -oc -occasion -occasionner -occasions -occident -occidental -occidentale -occidentales -occidentaux -occiput -occultation -occulte -occupaient -occupait -occupant -occupants -occupation -occupe -occupé -occupée -occupées -occupent -occuper -occupés -occurrence -océan -océaniques -octante -octobre -octroi -octroyer -odéon -odeur -odeurs -Odile -odorant -odorat -oeil -oeillère -oesophage -oeuf -oeufs -oeuvre -oeuvrer -oeuvres -offensant -offense -offenser -offensive -offensives -offert -offerte -offertes -offerts -office -offices -officiel -officielle -officiellement -officielles -officiels -officier -officiers -offrait -offrande -offrant -offre -offrent -offres -offrir -ogre -ogresse -oh -oie -oignon -oindre -oiseau -oiseau-mouche -oiseaux -oiseux -oisif -ok -oléagineux -oléoduc -olfaction -olive -olivier -olympique -olympiques -ombilic -ombrageux -ombre -ombrelle -ombres -omettre -omis -omission -omnipotent -omniprésent -omoplate -on -once -oncle -oncogènes -onctueux -onde -ondes -on-dit -ondoyer -onduler -onduleux -one -onéreux -ongle -ongles -onguent -onomatopée -onomatopéique -ont -onze -onzième -opacité -opaque -open -opéra -opérant -opéras -opérateur -opérateurs -opération -opérationnel -opérationnelle -opérationnelles -opérations -opère -opéré -opérée -opérées -opérer -opérés -opiniâtre -opinion -opinions -opiomane -opportun -opportunément -opportunité -opposait -opposant -opposants -oppose -opposé -opposée -opposées -opposent -opposer -opposés -opposition -oppositions -oppressant -oppresser -oppression -opprimer -opprobre -opté -optimisme -optimiste -optimistes -option -options -optique -optiques -opulence -opulent -or -orage -orages -orageux -oraison -oral -orale -orange -oranger -orateur -orateurs -oratoire -oratrice -orbite -orchestre -orchestrée -orchestres -ordinaire -ordinaires -ordinal -ordinateur -ordinateurs -ordonnance -ordonne -ordonné -ordonnée -ordonner -ordre -ordres -ordure -ordures -oreille -oreiller -oreilles -oreillons -ores -organe -organes -organique -organisait -organisant -organisateur -organisateurs -organisation -organisations -organise -organisé -organisée -organisées -organisent -organiser -organisés -organisme -organismes -orge -orgelet -orgue -orgueil -orgueilleux -orient -Orient -oriental -Oriental -orientale -Orientale -orientales -orientation -orientations -orienté -orientée -orienter -orifice -originaire -originaires -original -originale -originales -originalité -originaux -origine -originel -origines -oriolidé -orné -ornement -ornemental -orner -ornière -orphelin -orphelinat -orphéon -orteil -orthodoxe -orthodoxes -orthodoxie -orthographe -ortie -os -oscar -oscillation -osciller -ose -osé -osent -oser -ossature -osselet -ossements -osseux -ostensiblement -ostentatoire -ostraciser -ostracisme -otage -otages -ôter -ou -où -ouate -oubli -oubliant -oublie -oublié -oubliée -oublier -oubliés -oublions -ouest -ouf -oui -ouïe -ouïes -ouïr -oukase -ouragan -ourdir -ourlet -ours -ourse -oursin -ourson -out -outil -outillage -outils -outrage -outrager -outre -outrepasser -outsider -ouvert -ouverte -ouvertement -ouvertes -ouverts -ouverture -ouvertures -ouvrable -ouvrage -ouvrages -ouvrait -ouvrant -ouvre -ouvrent -ouvrier -ouvrière -ouvrières -ouvriers -ouvrir -ouvrira -ovaire -ovationner -ovule -oxyde -oxyder -oxygène -ozalid -Pablo -pacage -pachyderme -pacifier -pacifique -pacifiques -pacifiste -pacifistes -Pacino -pacte -pactole -paf -pagaille -paganisme -page -pages -paginer -paie -paiement -paiements -païen -paient -paillasson -paille -paillettes -pain -pair -paire -paires -pairs -paisible -paix -pal -palace -palais -pâle -paléographie -paléontologie -Palestine -palestinien -palestinienne -palestiniennes -palestiniens -paletot -palette -palier -pâlir -palis -palissade -pallier -palmarès -palme -palmier -palper -palpiter -paluche -pan -panacée -panache -panacher -panama -Panama -panaméen -panaméenne -panaméennes -panaméens -pancarte -pancartes -pandémonium -panégyrique -panier -panique -paniquer -panne -panneau -panneaux -pannes -panoplie -panorama -pans -pansement -panser -pantalon -pantalons -panthéon -pantin -pantoufle -pantoufles -papa -pape -papelard -paperasse -paperassier -papeterie -papetier -papier -papiers -papillon -papillons -papoter -Papouasie -paprika -papule -papy -paquebot -pâques -paquet -paquets -par -parabellum -parachever -parachutistes -parade -paradis -paradoxal -paradoxale -paradoxalement -paradoxe -paragraphe -paraissaient -paraissait -paraisse -paraissent -parait -paraît -paraître -parallèle -parallèlement -parallèles -paralysé -paralysée -paralyser -paralysie -paramètres -parapet -parapher -parapluie -parasol -parc -parce -parcelle -parcelles -parcimonieusement -parcimonieux -parcourir -parcours -parcourt -parcouru -parcs -par-derrière -pardessus -par-dessus -pardon -pardonner -pare -paré -pare-brise -pareil -pareille -pareils -parent -parente -parenté -parenthèse -parents -parer -paresse -paresser -paresseux -parfait -parfaite -parfaitement -parfois -parfum -parfumé -parfumer -parfumerie -parfums -pari -Paribas -parier -paris -Paris -parisien -parisienne -parisiennes -parisiens -paritaire -parité -parités -Parizeau -parjure -Park -parking -parkings -parlaient -parlait -parlant -parle -parlé -parlée -parlement -parlementaire -parlementaires -parlementer -parlements -parlent -parler -parlera -parlez -parloirs -parlons -parmi -parodie -parodier -paroi -parois -paroisse -parole -paroles -paroxysme -parquet -parrain -parrainage -parraineur -parrains -part -partage -partagé -partagée -partagées -partagent -partager -partagés -partant -partenaire -partenaires -partenariat -partent -parterre -parti -partial -partialité -participaient -participait -participant -participants -participation -participations -participe -participé -participent -participer -participera -participeront -particularité -particularités -particule -particules -particulier -particulière -particulièrement -particulières -particuliers -partie -partiel -partielle -partiellement -partielles -parties -partir -partis -partisan -partisans -partition -partitions -partout -parts -paru -parue -parure -parus -parut -parution -parvenaient -parvenait -parvenir -parvenu -parvenue -parvenues -parvenus -parviendra -parviennent -parvient -pas -pascal -Pasqua -passa -passablement -passage -passager -passagers -passages -passaient -passait -passant -passants -passe -passé -passée -passées -passéiste -passent -passe-partout -passeport -passeports -passer -passera -passerait -passerelle -passerelles -passeront -passés -passible -passif -passion -passionnant -passionnante -passionne -passionné -passionnément -passionner -passionnés -passions -passivité -passoire -passons -pastèque -pasteur -pastiche -pasticher -pastorale -pastoureau -patate -patates -patauger -pâte -pâté -pâtée -patelin -pateliner -patent -patente -patère -paternel -paternelle -paternité -pâtes -pathétique -patiemment -patience -patient -patiente -patienter -patients -patiner -pâtir -pâtisserie -patois -patoisant -pâtre -patriarche -patrice -Patricia -Patricio -Patrick -patrie -patrimoine -patrimoines -patriote -patriotique -patriotisme -patron -patronage -patronale -patronales -patronat -patronne -patrons -patronyme -patrouille -patte -pattes -pâturage -Pau -Paul -Paulhan -paume -paumer -paupière -pause -pauvre -pauvres -pauvreté -pavage -pavé -pavillon -pavillons -payait -payant -payante -paye -payé -payée -payées -payer -Payerne -payés -Payot -pays -paysage -paysages -paysan -paysanne -paysans -péage -peau -peaufiner -peau-rouge -pébroc -pêche -péché -pécher -pêcher -pécheresse -pécheur -pêcheur -pêcheurs -pécuniaire -pédagogie -pédagogique -pédagogiques -pédagogues -Pedro -pègre -peigne -peigner -peignoir -peindre -peine -peiné -peiner -peines -peint -peintre -peintres -peinture -peintures -péjoratif -péjorative -péjorativement -pékin -pelage -pelé -peler -pèlerinage -pèlerins -pelisse -pelle -pelletée -pelletier -pellicule -pelote -peloter -peloton -pelouse -Peltier -pelure -pénal -pénale -pénales -pénaliser -pénalité -penalty -penaud -pence -penchant -penche -penché -penchent -pencher -pendant -pendre -pendu -pendule -pêne -pénétrant -pénétration -pénètre -pénétré -pénétrer -pénible -péniblement -péniche -péninsule -pénis -pénitence -pénitentiaire -pénitentiaires -penne -pensaient -pensait -pensant -pense -pensé -pensée -pensées -pensent -penser -penseur -penseurs -pensez -pensif -pension -pensionnaires -pensionné -pensions -pensons -pentagone -pente -pentes -pentu -pénurie -pénuries -people -pépé -pépin -percée -percepteur -perceptible -perception -percer -percevoir -perche -percher -perçoit -perçoivent -perçu -perçue -perçus -percussions -perd -perdait -perdant -perdent -perdition -perdrait -perdre -perdrix -perdu -perdue -perdues -perdus -père -Perec -péremptoire -pérennité -péréquation -pères -Pérès -perestroïka -perfectif -perfection -perfectionnement -perfectionner -perfide -perfidie -perforer -performance -performances -performant -performantes -performants -péri -péricliter -périgueux -péril -périlleux -périls -périmé -périmètre -période -périodes -périodique -périodiquement -périodiques -péripétie -péripéties -périphérie -périphérique -périphériques -périple -périr +d…19642 tokens truncated…r perle perles perm @@ -21081,3 +12622,4 @@ zones zoologie zozoter zygote + diff --git a/copienator/dispatcher.py b/copienator/dispatcher.py new file mode 100644 index 0000000..c9ca9df --- /dev/null +++ b/copienator/dispatcher.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +import importlib +import sys +from collections.abc import Sequence +from dataclasses import dataclass + + +@dataclass(frozen=True, slots=True) +class Command: + module: str + description: str + + +COMMANDS: dict[str, Command] = { + "statement": Command("gemini_for_enonce", "Analyse the exam statement with Gemini"), + "statement-personal": Command("enonce_info", "Generate personal statement metadata"), + "copies": Command("copies_tools", "Rotate or rename scanned copies"), + "page-split": Command("page_splitter", "Split and reorder scanned PDF pages"), + "crop-labels": Command("cutleft", "Crop the label margin from copies"), + "labels": Command("gemini_for_labels", "Detect question labels with Gemini"), + "review-labels": Command("plotting", "Review detected labels interactively"), + "split-answers": Command("splitting_int", "Split copies into answers"), + "group-answers": Command("grouping", "Group answers by question"), + "verify-groups": Command("verify_groups", "Verify grouped answer metadata"), + "correct": Command("correction", "Generate or integrate corrections"), + "batch-submit": Command("submit_batches", "Submit Gemini batch jobs"), + "batch-status": Command("batch_status", "Inspect Gemini batch jobs"), + "batch-fetch": Command("fetch_batched_results", "Fetch Gemini batch results"), + "post-correction": Command("post_correction", "Clean generated correction text"), + "resolve-manual": Command("resolve_manual", "Resolve manual label conflicts"), + "annotate-simple": Command("annotating", "Generate simple annotations"), + "annotate-checks": Command("annotating_with_checks", "Generate checkable annotations"), + "annotate-grouped": Command("annotating_by_label", "Generate grouped annotations"), + "export": Command("export", "Export annotations"), + "import": Command("import_annotations", "Import handwritten annotations"), + "read-annotations": Command("reading_annotations", "Read checkable annotations"), + "read-grouped": Command("reading_grouped_annotations", "Read grouped annotations"), + "giving-names": Command("giving_names", "Name copies and prepare A Rendre"), + "update-ods": Command("update_ods", "Update the configured score spreadsheet"), + "add-final-score": Command("add_final_score", "Stamp final scores on copies"), + "gui": Command("@gui", "Launch the graphical workflow assistant"), +} + + +def _print_help() -> None: + print("Usage: copienator COMMAND [ARGUMENTS]") + print(" python -m copienator COMMAND [ARGUMENTS]") + print("\nCommands:") + width = max(len(name) for name in COMMANDS) + for name, command in COMMANDS.items(): + print(f" {name:<{width}} {command.description}") + print("\nUse 'copienator COMMAND --help' for command-specific help.") + + +def main(argv: Sequence[str] | None = None) -> int: + arguments = list(sys.argv[1:] if argv is None else argv) + if not arguments or arguments[0] in {"-h", "--help"}: + _print_help() + return 0 + + command_name = arguments.pop(0) + command = COMMANDS.get(command_name) + if command is None: + print(f"Unknown command: {command_name}", file=sys.stderr) + print("Use 'copienator --help' to list commands.", file=sys.stderr) + return 2 + + module_name = ( + "copienator_gui.__main__" + if command.module == "@gui" + else f"copienator.commands.{command.module}" + ) + module = importlib.import_module(module_name) + result = module.main(arguments) + return int(result or 0) diff --git a/platform_utils.py b/copienator/platform.py similarity index 99% rename from platform_utils.py rename to copienator/platform.py index 8746e90..2c01830 100644 --- a/platform_utils.py +++ b/copienator/platform.py @@ -118,3 +118,4 @@ def replace_with_link_or_copy( shutil.copy2(source_path, destination_path) return "copy" + diff --git a/prompting.py b/copienator/prompting.py similarity index 99% rename from prompting.py rename to copienator/prompting.py index 6037e9b..c6999e9 100644 --- a/prompting.py +++ b/copienator/prompting.py @@ -1,6 +1,6 @@ from pathlib import Path import io -import utils +from . import utils main_prompt = """I'm giving you an image of several written answers to an exam. @@ -86,7 +86,7 @@ Here is a possible correct answer : You are asked to score the question or exercice labeled `<