Commit 974b1ae48c01746c87545632b597356e73088ec4
1 parent
73e92d24
ajout des fichiers du projet.
Showing
19 changed files
with
479 additions
and
538 deletions
Show diff stats
README.md deleted
... | ... | @@ -1,33 +0,0 @@ |
1 | -# Programmation Avancée | |
2 | - | |
3 | -> Réalisation d’un correcteur orthographique | |
4 | - | |
5 | -## Objectif | |
6 | - | |
7 | -L’objectif de ce projet est de réaliser un programme qui permet de détecter dans un texte tous les mots mal orthographiés. Pour cela on utilisera un dictionnaire qui sera construit à partir d’un texte ou d’un ensemble de mots de référence. | |
8 | - | |
9 | -## Principe | |
10 | - | |
11 | -Afin de minimiser l’espace mémoire nécessaire au stockage du dictionnaire tout en fournissant un temps de recherche bas, la structure de données que vous utiliserez sera un arbre préfixe (encore appelé trie). Il s’agit d’une structure arborescente pour laquelle des mots ayant des préfixes communs sont factorisés: chaque noeud de l’arbre est une lettre qui peut être terminale (i.e. dernière lettre d’un mot) ou pas. | |
12 | - | |
13 | -Considérons les mots: were et will. L’arbre (ou [trie](https://en.wikipedia.org/wiki/Trie) ) correspondant est affiché ci-dessous à gauche. Si on ajoute les mots `we`, `wet` et `weave` l’arbre est affiché à droite; les noeuds colorés représentant des lettres terminales. | |
14 | - | |
15 | - ![](img/exemple_trie.png) | |
16 | - | |
17 | -## Cahier des charges | |
18 | - | |
19 | -Le travail que vous devez réaliser est le suivant: | |
20 | - | |
21 | -- Définir et implémenter une structure de données permettant de stocker et de manipuler un dictionnaire sous forme d’arbre préfixe / trie. | |
22 | -- Charger un dictionnaire à partir d’un fichier texte de données. Ce fichier texte pouvant être un texte court, un roman ou une liste de mots. Par exemple le fichier `/etc/dictionaries-common/words` est un dictionnaire de langue anglaise. | |
23 | -- Analyser l’orthographe d’une phrase ou d’un texte en indiquant les nombres de mots qui ne sont pas reconnus par le dictionnaire. | |
24 | - | |
25 | -Vous accorderez un soin particulier à l’ergonomie de votre programme (choix du dictionnaire, choix du texte à analyser). | |
26 | - | |
27 | -## Déliverables | |
28 | - | |
29 | -Pour le dimanche 5 mai 23:59 (CEST) vous devrez remettre à votre tuteur un accès à votre dépôt GIT qui contiendra: | |
30 | -- un rapport de moins de 10 pages au format PDF contenant l’analyse de votre projet (structures de données, structuration de votre programme), les explications concernant les algorithmes principaux, le respect du cahier des charges et/ou les limitations de votre programme. | |
31 | -- le code source de votre projet ainsi que le Makefile permettant de le compiler automatiquement. | |
32 | -- un fichier README qui contiendra une description rapide de votre programme ainsi qu’un mode d’emploi. | |
33 | -- des fichiers de tests éventuels |
a.out deleted
No preview for this file type
... | ... | @@ -0,0 +1,73 @@ |
1 | +#include <stdio.h> | |
2 | +#include <stdlib.h> | |
3 | +#include <string.h> | |
4 | +#include <stdbool.h> | |
5 | +#include "tree.h" | |
6 | + | |
7 | +bool caractere_stop(char c) | |
8 | +{ | |
9 | + return(c==',' || c=='.' || c=='!' || c=='?'||c==':'|| c== 39); | |
10 | +} | |
11 | + | |
12 | + | |
13 | +void compare(cell *pliste1,char mot[],int *fautes){ | |
14 | + cell *pliste; | |
15 | + int lettre,i=0; | |
16 | + bool fin_mot; | |
17 | + pliste = pliste1; | |
18 | + | |
19 | + if(pliste == NULL){ | |
20 | + printf("\nL'arbre est vide\n"); | |
21 | + return;//si l'arbre est vide, la comparaison s'arrête. | |
22 | + } | |
23 | + | |
24 | + while(mot[i]!='\0'){ | |
25 | + lettre = mot[i]; | |
26 | + while(pliste != NULL && pliste->lettre != lettre){//tant que la lettre n'est pas trouvée dans la liste correspondant à sont rang, on continue l'analyse dans la liste. | |
27 | + pliste=pliste->suivant; | |
28 | + } | |
29 | + | |
30 | + if(pliste == NULL){ | |
31 | + printf("\nErreur : %s",mot); | |
32 | + (*fautes)++;//si la lettre n'est pas trouvée dans la liste, on affiche une erreur sur le mot analysé | |
33 | + break; | |
34 | + } | |
35 | + | |
36 | + fin_mot = pliste->fin_mot; | |
37 | + pliste = pliste->fils; | |
38 | + i++; | |
39 | + | |
40 | + } | |
41 | + | |
42 | + if(!fin_mot && (mot[i]=='\0')){ | |
43 | + printf("\nErreur : %s",mot);//si le mot analysé est trop court par rapport aux mots correspondant dans le dictionnaire, on affiche une erreur. | |
44 | + (*fautes)++; | |
45 | + return; | |
46 | + | |
47 | + } | |
48 | + | |
49 | +} | |
50 | + | |
51 | + | |
52 | + | |
53 | +void lecture_mot(cell *pliste,FILE *fichier,int *fautes) | |
54 | +{ | |
55 | + char mot[MAX]; | |
56 | + int longueur; | |
57 | + while(1) | |
58 | + { | |
59 | + if(fscanf(fichier, "%s", mot)!=1) | |
60 | + break; | |
61 | + longueur=strlen(mot); | |
62 | + for(int i=0; i<longueur; i++)//récupération de chaque caractère d'un mot dans un tableau. | |
63 | + { | |
64 | + if(caractere_stop(mot[i])) | |
65 | + { | |
66 | + mot[i] = '\0'; | |
67 | + break; | |
68 | + } | |
69 | + } | |
70 | + compare(pliste, mot,fautes);//comparaison du mot récupéré par rapport au dictionnaire | |
71 | + } | |
72 | +} | |
73 | + | ... | ... |
conv-accents.sh deleted
dico deleted
No preview for this file type
... | ... | @@ -2,52 +2,46 @@ |
2 | 2 | #include <stdlib.h> |
3 | 3 | #include <stdbool.h> |
4 | 4 | #include <string.h> |
5 | +#include "tree.h" | |
5 | 6 | |
6 | 7 | |
7 | -typedef struct cell* ptarbre; | |
8 | -typedef struct cell* ptcellule; | |
9 | 8 | |
10 | -typedef struct cell { | |
11 | - char lettre; | |
12 | - ptarbre fils; // Descend d'un étage dans le mot (lettre suivante du mot) | |
13 | - ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position) | |
14 | - bool fin_mot; | |
15 | -} cell; | |
16 | - | |
17 | -/* Pas utile | |
18 | -void init_dico() | |
19 | -{ | |
20 | - ptarbre arbre; | |
21 | - arbre=NULL; | |
22 | -} | |
23 | -*/ | |
24 | 9 | ptarbre rech(ptarbre arbre, char lettre) |
25 | -// recherche une lettre en ième position (correspondant à arbre) | |
26 | -// Retourne l'adresse de l'arbre contenant la lettre à cette position | |
10 | +// Fonction qui cherche une lettre passée en paramètre à partir d'une cellule à l'adresse arbre et qui retourne l'adresse d'une cellule, soit parce qu'il n'y a plus de cellules après, soit car c'est la cellule où se trouve la lettre passée en paramètre. | |
27 | 11 | { |
28 | 12 | if (arbre!=NULL) |
29 | 13 | { |
30 | - printf("arbre lettre %c \n", arbre->lettre); | |
31 | 14 | while ((arbre->suivant!=NULL) && (arbre->lettre != lettre)) |
32 | 15 | { |
33 | - printf("lettre : %c lettre cherchee : %c adr arbre %p \n", arbre->lettre,lettre, arbre); | |
34 | 16 | arbre=(arbre->suivant); |
35 | 17 | } |
36 | 18 | } |
37 | 19 | return arbre; |
38 | 20 | } |
39 | -void init_dico(ptarbre *parbre, char lettre) | |
21 | + | |
22 | +void init_dico(ptarbre* parbre, char lettre) | |
23 | +// Action qui initialise une cellule de type cell à l'adresse (*parbre) et qui ajoute à cette cellule la première lettre du texte, alloue de la mémoire pour le fils . | |
40 | 24 | { |
41 | 25 | (*parbre)=malloc(sizeof(cell)); |
42 | 26 | (*parbre)->fils=malloc(sizeof(cell)); |
27 | + (*parbre)->fils->lettre= '\0'; // Permet de savoir qu'il n'y a pas de lettre dans l'étage en dessous. Par exemple, si on est en train de construire le mot voir, avec 'v' et 'o' déjà dans l'arbre, arpès la lettre 'o' on met '\0' pour différencier s'il faut utiliser ajout tete ou ajout dico pour ajouter le 'i'. | |
28 | + (*parbre)->suivant=NULL; | |
29 | + (*parbre)->lettre=lettre; | |
30 | + (*parbre)->fin_mot=false; | |
31 | +} | |
32 | + | |
33 | +void ajout_dico_tete(ptarbre *parbre, char lettre) | |
34 | +// Action qui ajoute la première cellule d'un étage, utile pour le premier mot et pour les mots suivants qui sont plus longs que les précédents. Pour le premier mot 'voir', on utilise init_dico et pour les 3 autres lettres on utilise ajout_dico_tete. Ensuite, pour voile, on utilise ajout_dico pour 'v','o','i','l' et ajout_dico pour 'e'. | |
35 | +{ | |
36 | + (*parbre)->fils=malloc(sizeof(cell)); | |
43 | 37 | (*parbre)->fils->suivant=NULL; |
44 | 38 | (*parbre)->suivant=NULL; |
45 | 39 | (*parbre)->lettre=lettre; |
46 | 40 | (*parbre)->fin_mot=false; |
47 | - printf("init dico\n"); | |
48 | 41 | } |
49 | 42 | |
50 | 43 | void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre) |
44 | +// Action qui ajoute une lettre dans un étage existant, en faisant le lien entre la cellule d'avant à l'adresse *parbre et la nouvelle cellule à l'adresse *parbresuiv en ajoutant la lettre passée en paramètre à la nouvelle cellule. | |
51 | 45 | { |
52 | 46 | *parbresuiv=malloc(sizeof(cell)); |
53 | 47 | (*parbre)->suivant=*parbresuiv; // On relie la nouvelle lettre à l'avant dernière lettre |
... | ... | @@ -56,11 +50,10 @@ void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre) |
56 | 50 | (*parbresuiv)->suivant=NULL; |
57 | 51 | (*parbresuiv)->fin_mot=false; |
58 | 52 | (*parbresuiv)->lettre=lettre; |
59 | - printf("ajout lettre : %c à %p \n",(*parbresuiv)->lettre, parbresuiv); | |
60 | 53 | } |
61 | 54 | |
62 | 55 | void affiche_dico(ptarbre arbre, int n_lettre, char mot[]) |
63 | -// affiche tout le dictionnaire à partir de l'arbre (donc le numéro de lettre) sélectionné | |
56 | +// Action qui affiche tout le dictionnaire à partir de arbre (donc le numéro de lettre) sélectionné en stockant le début du mot qui est commun à tous les suivants dans mot initialisé à vide et le numéro de la lettre dans n_lettre initialisé à 0. | |
64 | 57 | { |
65 | 58 | if(arbre == NULL) |
66 | 59 | { |
... | ... | @@ -70,27 +63,33 @@ void affiche_dico(ptarbre arbre, int n_lettre, char mot[]) |
70 | 63 | { |
71 | 64 | if (arbre->fils != NULL) |
72 | 65 | { |
73 | - printf("%c",arbre->lettre); | |
74 | 66 | mot[n_lettre]=arbre->lettre; |
75 | 67 | n_lettre++; |
76 | - affiche_dico(arbre->fils,n_lettre,mot); | |
77 | 68 | } |
78 | - printf("\n"); | |
69 | + if (arbre->fin_mot) | |
70 | + { | |
71 | + printf("%s",mot); | |
72 | + printf("\n"); | |
73 | + } | |
74 | + | |
75 | + affiche_dico(arbre->fils,n_lettre,mot); | |
79 | 76 | if (arbre->suivant != NULL) |
80 | 77 | { |
81 | - printf("%s",mot); | |
82 | - affiche_dico(arbre->suivant, n_lettre, mot); | |
78 | + n_lettre--; | |
79 | + mot[n_lettre]='\0'; | |
83 | 80 | } |
84 | - mot[n_lettre]=0; | |
81 | + affiche_dico(arbre->suivant, n_lettre, mot); | |
85 | 82 | n_lettre--; |
83 | + mot[n_lettre]='\0'; | |
86 | 84 | |
87 | - } | |
85 | + } | |
88 | 86 | |
89 | 87 | } |
90 | 88 | |
91 | 89 | void free_tree(cell **ptr_tree) |
90 | +// Action qui libère la mémoire allouée pour stockée les données du dictionnaire *(*ptr_tree). | |
92 | 91 | { |
93 | - if ((*ptr_tree)==NULL) | |
92 | + if ((*ptr_tree)==NULL) | |
94 | 93 | printf("L'arbre est vide\n"); |
95 | 94 | else |
96 | 95 | { |
... | ... | @@ -102,82 +101,65 @@ void free_tree(cell **ptr_tree) |
102 | 101 | } |
103 | 102 | } |
104 | 103 | |
105 | - | |
106 | -int main() | |
104 | +void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec, FILE* fp) | |
105 | +// Action qui construit entièrement l'arbre, à partir du fichier fp, en partant de l'adresse parbre_originel qui correspond à la première cellule, parbre qui est la copie de l'arbre originel qui va nous permettre de nous balader entre les différentes lettres de chaque mot et de revenir à la première cellule à la fin de chaque mot. | |
107 | 106 | { |
108 | - ptarbre arbre_originel,arbre,arbre_prec; | |
109 | - arbre_originel=NULL; | |
110 | - arbre=NULL; | |
111 | - char c,t, mot[30]; | |
112 | - int n_lettre=0; | |
107 | + char c; | |
113 | 108 | ptarbre rec; |
114 | - // Ouvrir fichier | |
115 | - FILE *fp = fopen("words1.txt","r"); | |
116 | - if (fp==NULL) | |
117 | - printf("words1 inaccessible \n",fp); | |
118 | - else | |
119 | - printf("words1 accessible \n",fp); | |
120 | - | |
121 | - while (fscanf(fp,"%c",&c)!= EOF) // lecture de tout le fichier | |
109 | + while (fscanf(fp,"%c",&c)!= EOF) // Lecture de tout le fichier fp. | |
122 | 110 | { |
123 | 111 | if (c != '\n') |
124 | 112 | { |
125 | - if (arbre_originel==NULL) // Cas où c'est le premier mot | |
113 | + if ((*parbre_originel)==NULL) // Cas où c'est le premier mot et premiere lettre du dictionnaire. | |
126 | 114 | { |
127 | - printf("arbre =NULL \n"); | |
128 | - init_dico(&arbre_originel,c); | |
129 | - printf("lettre arbre :%c \n",arbre_originel->lettre); | |
130 | - arbre_prec=arbre_originel; | |
131 | - arbre=arbre_originel->fils; | |
132 | - } | |
115 | + init_dico(parbre_originel,c); | |
116 | + (*parbre_prec)=(*parbre_originel); // On sauvegarde l'adresse de la lettre précédente. | |
117 | + (*parbre)=(*parbre_originel)->fils; // On passe à l'adresse de la cellule qui contiendra la prochaine lettre du même mot. | |
118 | + } | |
119 | + else if ((*parbre)==NULL) // Cas où c'est le premier mot de l'arbre mais pas la première lettre. | |
120 | + { | |
121 | + init_dico(parbre,c); | |
122 | + (*parbre_prec)=(*parbre); | |
123 | + (*parbre)=(*parbre)->fils; | |
124 | + } | |
133 | 125 | |
134 | - else // Cas où le dico n'est pas vide | |
126 | + else // Cas où ce n'est pas le premier mot, il faut faire une recherche parmi les lettres de même indice (donc à l'étage '(*parbre)') déjà enregistrées dans l'arbre. | |
135 | 127 | { |
136 | - printf("lettre arbre :%c \n",arbre->lettre); | |
137 | - printf(" c: %c\n", c); | |
138 | - rec=rech(arbre,c); | |
139 | - | |
140 | - if (rec->suivant==NULL && rec->lettre!=c) | |
128 | + rec=rech((*parbre),c); | |
129 | + if (rec->lettre!=c) // Cas où la lettre présente dans la cellule à l'adresse renvoyée par rech((*parbre),c) n'est pas la lettre recherchée. | |
141 | 130 | { |
142 | - | |
143 | - printf("rech suiv = NUll \n"); | |
144 | - ajout_dico(&(arbre),&(rec->suivant),c); | |
145 | - // printf("ajout de : %c à %p et fils :%p\n", rec->lettre, rec, rec->fils); | |
146 | - arbre_prec=arbre; | |
147 | - arbre=rec->suivant->fils; | |
131 | + | |
132 | + if (rec==(*parbre) && rec->lettre=='\0') // Cas où il n'y a pas de lettres à l'indice *parbre donc la recherche renvoie l'adresse de la première cellule qui est vide. | |
133 | + { | |
134 | + ajout_dico_tete(parbre,c); | |
135 | + (*parbre_prec)=(*parbre); | |
136 | + (*parbre)=(*parbre)->fils; | |
137 | + } | |
138 | + | |
139 | + else if (rec->suivant==NULL && rec->lettre!='\0') // Cas où il y a qu'une lettre à l'indice *parbre donc la recherche renvoie l'adresse de la première cellule qui ne contient pas la lettre recherchée. | |
140 | + { | |
141 | + ajout_dico(&(rec),&(rec->suivant),c); | |
142 | + (*parbre_prec)=rec->suivant; | |
143 | + (*parbre)=rec->suivant->fils; | |
144 | + } | |
148 | 145 | } |
149 | - | |
150 | 146 | |
151 | 147 | else |
152 | - {// Cas où le début du mot existe déjà et qu'on le complète | |
153 | - printf("rech suiv pas null rec lettre %c\n", rec->lettre); | |
154 | - arbre_prec=arbre; | |
155 | - arbre=rec->fils; // On va à l'étage d'après pour former le mot dans l'arbre | |
156 | - // | |
148 | + {// Cas où la recherche renvoie l'adresse d'une cellule dont la lettre est la lettre recherchée donc le début du mot existe déjà et on le complète. | |
149 | + (*parbre_prec)=rec; | |
150 | + (*parbre)=rec->fils; // On va à l'étage d'après pour former le mot dans l'arbre. | |
151 | + | |
157 | 152 | } |
158 | 153 | |
159 | 154 | |
160 | 155 | } |
161 | 156 | } |
162 | - else { | |
163 | - printf("else\n"); | |
164 | - if (arbre_originel!=NULL) | |
157 | + else { // Cas où c==\n donc le mot est terminé, il faut retourner en haut de l'arbre pour ajouter le prochain mot. | |
158 | + if ((*parbre_originel)!=NULL) | |
165 | 159 | { |
166 | - printf("%c \n", arbre_prec->lettre); | |
167 | - arbre_prec->fin_mot=true; // Cette lettre est la dernière du mot | |
160 | + (*parbre_prec)->fin_mot=true; // Cette lettre est la dernière du mot. | |
168 | 161 | } |
169 | - | |
170 | - affiche_dico(arbre_originel,n_lettre,mot); | |
171 | - printf("remise à 0\n"); | |
172 | - arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot | |
162 | + (*parbre)=(*parbre_originel); // On revient en haut de l'arbre pour commencer un nouveau mot. | |
173 | 163 | } |
174 | - //arbre=arbre_originel; | |
175 | 164 | } |
176 | - printf("arbre originel lettre %c \n", arbre_originel->fils->lettre); | |
177 | - affiche_dico(arbre_originel,n_lettre,mot); | |
178 | - free_tree(&arbre); | |
179 | - fclose(fp); | |
180 | - | |
181 | - | |
182 | - return 0; | |
183 | 165 | } | ... | ... |
dico.c~ deleted
... | ... | @@ -1,95 +0,0 @@ |
1 | -#include <stdio.h> | |
2 | -#include <stdlib.h> | |
3 | - | |
4 | - | |
5 | -typedef struct cell* ptarbre; | |
6 | -typedef struct cell* ptcellule; | |
7 | - | |
8 | -typedef struct cell { | |
9 | - int lettre; | |
10 | - ptarbre arbre; // Descend d'un étage dans le mot (lettre suivante du mot) | |
11 | - ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position) | |
12 | -} cell; | |
13 | - | |
14 | -/* Pas utile | |
15 | -void init_dico() | |
16 | -{ | |
17 | - ptarbre arbre; | |
18 | - arbre=NULL; | |
19 | -} | |
20 | -*/ | |
21 | -ptarbre rech(ptarbre arbre, int lettre) | |
22 | -// recherche une lettre en ième position (correspondant à arbre) | |
23 | -// Retourne l'adresse de l'abre contenant la lettre à cette position | |
24 | -{ | |
25 | - while((arbre!=NULL) && (arbre->lettre != lettre)) | |
26 | - arbre=arbre->suivant; | |
27 | - return arbre; | |
28 | -} | |
29 | -void ajout_dico(ptarbre arbre, int lettre) | |
30 | -{ | |
31 | - arbre=malloc(sizeof(cell)); | |
32 | - arbre->lettre=lettre; | |
33 | - arbre->arbre=NULL; | |
34 | - arbre->suivant=NULL; | |
35 | -} | |
36 | - | |
37 | -void affiche_dico(ptarbre arbre) | |
38 | -// affiche tout le dictionnaire à partir de l'arbre (donc le numéro de lettre) sélectionné | |
39 | -{ | |
40 | - | |
41 | -} | |
42 | - | |
43 | - | |
44 | -int main() | |
45 | -{ | |
46 | - ptarbre arbre_originel,arbre; | |
47 | - arbre_originel=NULL; | |
48 | - arbre_originel=malloc(sizeof(cell)); | |
49 | - arbre=malloc(sizeof(cell)); | |
50 | - arbre->lettre = 0; | |
51 | - arbre->suivant = NULL; | |
52 | - arbre->arbre = NULL; | |
53 | - //arbre=arbre_originel; | |
54 | - char c; | |
55 | - // Ouvrir fichier | |
56 | - FILE *fp = fopen("words1","r"); | |
57 | - if (fp==NULL) | |
58 | - printf("words1 inaccessible ",fp); | |
59 | - else | |
60 | - printf("words1 accessible n",fp); | |
61 | - | |
62 | - while (fscanf(fp,"%d",&c)!= EOF) // lecture de tout le fichier | |
63 | - { | |
64 | - // while (fscanf(fp,"%d",&c)!='\n') // Tant que le mot n'est pas fini, on ajoute les lettres à la suite | |
65 | - // { | |
66 | - if (c != '\n') { | |
67 | - printf("%d\n", c); | |
68 | - if (rech(arbre,c)==NULL) // Cas où c'est un nouveau mot | |
69 | - { | |
70 | - ajout_dico(arbre,c); | |
71 | - } | |
72 | - else | |
73 | - { | |
74 | - while (rech(arbre,c)!=NULL) // Cas où le début du mot existe déjà et qu'on le complète | |
75 | - { | |
76 | - | |
77 | - arbre=rech(arbre,c)->arbre; // On va à l'étage d'après pour former le mot dans l'arbre | |
78 | - // affiche_dico(arbre); | |
79 | - } | |
80 | - // ajout_dico(arbre,c); | |
81 | - // printf("%c",arbre->lettre); | |
82 | - } | |
83 | - } | |
84 | - else { | |
85 | - arbre=arbre_originel; | |
86 | - } | |
87 | - //arbre=arbre_originel; // On revient en haut de l'arbre pour commencer un nouveau mot | |
88 | - } | |
89 | - | |
90 | - | |
91 | - fclose(fp); | |
92 | - | |
93 | - | |
94 | - return 0; | |
95 | -} |
img/exemple_trie.png deleted
41.7 KB
... | ... | @@ -0,0 +1 @@ |
1 | +Sandra and Bety ae sittinges in te park, Sandra asks Betty | ... | ... |
... | ... | @@ -0,0 +1 @@ |
1 | +Sandra and Betty are sitting in the park, Sandra asks Betty. | ... | ... |
projet deleted
No preview for this file type
projet.c
1 | 1 | #include <stdio.h> |
2 | 2 | #include <stdlib.h> |
3 | +#include <string.h> | |
4 | +#include <stdbool.h> | |
5 | +#include "tree.h" | |
3 | 6 | |
4 | - | |
5 | -typedef struct cell* ptarbre; | |
6 | -typedef struct cell* ptcellule; | |
7 | - | |
8 | -typedef struct cell { | |
9 | - int lettre; | |
10 | - ptarbre arbre; | |
11 | - ptcellule suivant; | |
12 | -} cell; | |
13 | - | |
14 | -/* Pas utile | |
15 | -void init_dico() | |
16 | -{ | |
17 | - ptarbre arbre; | |
18 | - arbre=NULL; | |
19 | -} | |
20 | -*/ | |
21 | -ptarbre rech(ptarbre arbre, int lettre) | |
22 | -{ | |
23 | - while((arbre!=NULL) && (arbre->lettre != lettre)) | |
24 | - arbre=arbre->suivant; | |
25 | - return arbre; | |
26 | -} | |
27 | -void ajout_dico(ptarbre arbre, int lettre) | |
28 | -{ | |
29 | - arbre=malloc(sizeof(cell)); | |
30 | - arbre->lettre=lettre; | |
31 | - arbre->arbre=NULL; | |
32 | - arbre->suivant=NULL; | |
33 | -} | |
34 | - | |
35 | -void affiche_dico(ptarbre arbre) | |
36 | -{ | |
37 | - | |
38 | - printf("%c\n", arbre->lettre); | |
39 | -} | |
7 | +int main(int argc, char* argv[]){ | |
40 | 8 | |
41 | - | |
42 | -int main() | |
43 | -{ | |
44 | - ptarbre arbre; | |
9 | + char mot[MAX]=""; | |
10 | + int n_lettre=0, choix,faute = 0; | |
11 | + ptarbre arbre_originel,arbre,arbre_prec; | |
12 | + arbre_originel=NULL; | |
45 | 13 | arbre=NULL; |
46 | - char c; | |
14 | + | |
47 | 15 | // Ouvrir fichier |
48 | - FILE *fp = fopen("words","r"); | |
49 | - if (fp==NULL) | |
50 | - printf("words inaccessible ",fp); | |
16 | + FILE *fichier_a_comparer = NULL; | |
17 | + fichier_a_comparer = fopen(argv[argc-1],"r"); | |
18 | + if (fichier_a_comparer == NULL) | |
19 | + printf("\nNous ne pouvons pas ouvrir votre texte.\n"); | |
51 | 20 | else |
52 | - printf("words accessible n",fp); | |
53 | - | |
54 | - while (fscanf(fp,"%d",&c)!= EOF) // lecture de tout le fichier | |
55 | - { | |
56 | - while (c!='\n') | |
57 | - { | |
58 | - if (rech(arbre,c)==NULL) | |
59 | - { | |
60 | - ajout_dico(arbre,c); | |
61 | - } | |
62 | - arbre=arbre->arbre; // On va à l'étage d'après pour former le mot dans l'arbre | |
63 | - affiche_dico(arbre); | |
64 | - } | |
65 | - } | |
66 | - | |
67 | - | |
68 | - | |
21 | + printf("\nNous pouvons ouvrir votre texte.\n"); | |
22 | + FILE *fichier_reference = fopen(argv[argc-2],"r"); | |
23 | + if (fichier_reference==NULL) | |
24 | + printf("Dictionnaire inaccessible \n"); | |
25 | + else | |
26 | + printf("\nLe dictionnaire est ouvert. \n"); | |
27 | + | |
28 | + //création de l'arbre. | |
69 | 29 | |
30 | + cons_arbre(&arbre_originel, &arbre, &arbre_prec,fichier_reference); | |
31 | + printf("Voulez-vous afficher le dictionnaire ? 1 : oui, 2 : non\n"); | |
32 | + scanf("%d",&choix); | |
33 | + if (choix==1) | |
34 | + affiche_dico(arbre_originel,n_lettre,mot); | |
35 | + | |
36 | + //comparaison des mots du texte à analyser par rapport aux mots du dictionnaire. | |
37 | + | |
38 | + lecture_mot(arbre_originel,fichier_a_comparer,&faute); | |
39 | + printf("\nIl y a une ou plusieurs erreurs sur %d mots\n",faute); | |
40 | + free_tree(&arbre); | |
41 | + fclose(fichier_reference); | |
42 | + fclose(fichier_a_comparer); | |
70 | 43 | |
71 | - return 0; | |
44 | +return 0; | |
72 | 45 | } | ... | ... |
test deleted
... | ... | @@ -0,0 +1,38 @@ |
1 | +#include <stdio.h> | |
2 | +#include <stdlib.h> | |
3 | +#include <stdbool.h> | |
4 | +#define MAX 26 | |
5 | + | |
6 | + | |
7 | +typedef struct cell* ptarbre; | |
8 | +typedef struct cell* ptcellule; | |
9 | + | |
10 | +typedef struct cell { | |
11 | + char lettre; | |
12 | + ptarbre fils; // Descend d'un étage dans le mot (lettre suivante du mot) | |
13 | + ptcellule suivant; // Lettre suivante stockée à l'étage arbre en (ieme position) | |
14 | + bool fin_mot; | |
15 | +} cell; | |
16 | + | |
17 | + | |
18 | +ptarbre rech(ptarbre arbre_ori, char lettre); | |
19 | + | |
20 | +void init_dico(ptarbre* parbre, char lettre); | |
21 | + | |
22 | +void ajout_dico_tete(ptarbre *parbre, char lettre); | |
23 | + | |
24 | +void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre); | |
25 | + | |
26 | +void affiche_dico(ptarbre arbre, int n_lettre, char mot[]); | |
27 | + | |
28 | +void free_tree(cell **ptr_tree); | |
29 | + | |
30 | +void print_suiv(ptarbre arbre); | |
31 | + | |
32 | +void cons_arbre(ptarbre *parbre_originel, ptarbre *parbre, ptarbre *parbre_prec, FILE* fp); | |
33 | + | |
34 | +void compare(cell *pliste1,char *,int *fautes); | |
35 | + | |
36 | +void lecture_mot(cell *pliste,FILE *fichier,int *fautes); | |
37 | + | |
38 | +bool caractere_stop(char c); | ... | ... |
words renamed to words-no-accents
... | ... | @@ -1050,8 +1050,8 @@ Astoria |
1050 | 1050 | Astrakhan |
1051 | 1051 | AstroTurf |
1052 | 1052 | Asturias |
1053 | -Asunción | |
1054 | -Asunción's | |
1053 | +Asuncion | |
1054 | +Asuncion's | |
1055 | 1055 | Aswan |
1056 | 1056 | Aswan's |
1057 | 1057 | At |
... | ... | @@ -1062,8 +1062,8 @@ Atahualpa |
1062 | 1062 | Atalanta |
1063 | 1063 | Atari |
1064 | 1064 | Atari's |
1065 | -Atatürk | |
1066 | -Atatürk's | |
1065 | +Ataturk | |
1066 | +Ataturk's | |
1067 | 1067 | Athabasca |
1068 | 1068 | Athabasca's |
1069 | 1069 | Athabascan |
... | ... | @@ -1444,7 +1444,7 @@ Bartholdi's |
1444 | 1444 | Bartholomew |
1445 | 1445 | Bartlett |
1446 | 1446 | Barton |
1447 | -Bartók | |
1447 | +Bartok | |
1448 | 1448 | Baruch |
1449 | 1449 | Baryshnikov |
1450 | 1450 | Basel |
... | ... | @@ -1937,8 +1937,8 @@ Boers |
1937 | 1937 | Boethius |
1938 | 1938 | Bogart |
1939 | 1939 | Bogart's |
1940 | -Bogotá | |
1941 | -Bogotá's | |
1940 | +Bogota | |
1941 | +Bogota's | |
1942 | 1942 | Bohemia |
1943 | 1943 | Bohemian |
1944 | 1944 | Bohemian's |
... | ... | @@ -2065,8 +2065,8 @@ Boyd |
2065 | 2065 | Boyer |
2066 | 2066 | Boyer's |
2067 | 2067 | Boyle |
2068 | -Boötes | |
2069 | -Boötes's | |
2068 | +Bootes | |
2069 | +Bootes's | |
2070 | 2070 | Br |
2071 | 2071 | Br's |
2072 | 2072 | Brad |
... | ... | @@ -2429,8 +2429,8 @@ Butler |
2429 | 2429 | Butterfingers |
2430 | 2430 | Butterfingers's |
2431 | 2431 | Buxtehude |
2432 | -Buñuel | |
2433 | -Buñuel's | |
2432 | +Bunuel | |
2433 | +Bunuel's | |
2434 | 2434 | Byblos |
2435 | 2435 | Byblos's |
2436 | 2436 | Byelorussia |
... | ... | @@ -3428,7 +3428,7 @@ Conakry |
3428 | 3428 | Conakry's |
3429 | 3429 | Conan |
3430 | 3430 | Conan's |
3431 | -Concepción | |
3431 | +Concepcion | |
3432 | 3432 | Concetta |
3433 | 3433 | Concetta's |
3434 | 3434 | Concord |
... | ... | @@ -4480,7 +4480,7 @@ Dutchman's |
4480 | 4480 | Dutchmen |
4481 | 4481 | Duvalier |
4482 | 4482 | Dvina |
4483 | -Dvorák | |
4483 | +Dvorak | |
4484 | 4484 | Dwayne |
4485 | 4485 | Dwayne's |
4486 | 4486 | Dwight |
... | ... | @@ -4494,9 +4494,9 @@ Dyson's |
4494 | 4494 | Dzerzhinsky |
4495 | 4495 | Dzerzhinsky's |
4496 | 4496 | Dzungaria |
4497 | -Dürer | |
4498 | -Düsseldorf | |
4499 | -Düsseldorf's | |
4497 | +Durer | |
4498 | +Dusseldorf | |
4499 | +Dusseldorf's | |
4500 | 4500 | E |
4501 | 4501 | E's |
4502 | 4502 | ECG's |
... | ... | @@ -4749,8 +4749,8 @@ Elysian |
4749 | 4749 | Elysium |
4750 | 4750 | Elysium's |
4751 | 4751 | Elysiums |
4752 | -Elysée | |
4753 | -Elysée's | |
4752 | +Elysee | |
4753 | +Elysee's | |
4754 | 4754 | Emacs |
4755 | 4755 | Emacs's |
4756 | 4756 | Emanuel |
... | ... | @@ -4941,8 +4941,8 @@ Estelle |
4941 | 4941 | Estelle's |
4942 | 4942 | Ester |
4943 | 4943 | Ester's |
4944 | -Esterházy | |
4945 | -Esterházy's | |
4944 | +Esterhazy | |
4945 | +Esterhazy's | |
4946 | 4946 | Estes |
4947 | 4947 | Esther |
4948 | 4948 | Esther's |
... | ... | @@ -5085,7 +5085,7 @@ FM's |
5085 | 5085 | FNMA |
5086 | 5086 | FNMA's |
5087 | 5087 | FORTRAN's |
5088 | -Fabergé | |
5088 | +Faberge | |
5089 | 5089 | Fabian |
5090 | 5090 | Fabian's |
5091 | 5091 | |
... | ... | @@ -5505,8 +5505,8 @@ Fulton |
5505 | 5505 | Fulton's |
5506 | 5506 | Funafuti |
5507 | 5507 | Fundy |
5508 | -Furtwängler | |
5509 | -Furtwängler's | |
5508 | +Furtwangler | |
5509 | +Furtwangler's | |
5510 | 5510 | Fushun |
5511 | 5511 | Fuzhou |
5512 | 5512 | Fuzhou's |
... | ... | @@ -5767,7 +5767,7 @@ Gethsemane |
5767 | 5767 | Getty |
5768 | 5768 | Gettysburg |
5769 | 5769 | Gettysburg's |
5770 | -Gewürztraminer | |
5770 | +Gewurztraminer | |
5771 | 5771 | Ghana |
5772 | 5772 | Ghana's |
5773 | 5773 | Ghanaian |
... | ... | @@ -6099,10 +6099,10 @@ Grundy |
6099 | 6099 | Grus |
6100 | 6100 | Grus's |
6101 | 6101 | Gruyeres |
6102 | -Gruyère | |
6103 | -Gruyère's | |
6104 | -Grünewald | |
6105 | -Grünewald's | |
6102 | +Gruyere | |
6103 | +Gruyere's | |
6104 | +Grunewald | |
6105 | +Grunewald's | |
6106 | 6106 | Guadalajara |
6107 | 6107 | Guadalajara's |
6108 | 6108 | Guadalcanal |
... | ... | @@ -6206,10 +6206,10 @@ Gwyn's |
6206 | 6206 | Gypsies |
6207 | 6207 | Gypsy |
6208 | 6208 | Gypsy's |
6209 | -Gödel | |
6210 | -Gödel's | |
6211 | -Göteborg | |
6212 | -Göteborg's | |
6209 | +Godel | |
6210 | +Godel's | |
6211 | +Goteborg | |
6212 | +Goteborg's | |
6213 | 6213 | H |
6214 | 6214 | H's |
6215 | 6215 | HF's |
... | ... | @@ -6946,8 +6946,8 @@ Hyundai |
6946 | 6946 | Hyundai's |
6947 | 6947 | Hz |
6948 | 6948 | Hz's |
6949 | -Héloise | |
6950 | -Héloise's | |
6949 | +Heloise | |
6950 | +Heloise's | |
6951 | 6951 | I |
6952 | 6952 | I'd |
6953 | 6953 | I'll |
... | ... | @@ -8311,8 +8311,8 @@ Kyoto's |
8311 | 8311 | Kyrgyzstan |
8312 | 8312 | Kyushu |
8313 | 8313 | Kyushu's |
8314 | -Köln | |
8315 | -Köln's | |
8314 | +Koln | |
8315 | +Koln's | |
8316 | 8316 | L |
8317 | 8317 | L'Amour |
8318 | 8318 | L'Oreal |
... | ... | @@ -9057,8 +9057,8 @@ Lula's |
9057 | 9057 | Lully |
9058 | 9058 | Lulu |
9059 | 9059 | Lulu's |
9060 | -Lumière | |
9061 | -Lumière's | |
9060 | +Lumiere | |
9061 | +Lumiere's | |
9062 | 9062 | Luna |
9063 | 9063 | Luna's |
9064 | 9064 | Lupe |
... | ... | @@ -9343,7 +9343,7 @@ Malibu's |
9343 | 9343 | Malinda |
9344 | 9344 | Malinda's |
9345 | 9345 | Malinowski |
9346 | -Mallarmé | |
9346 | +Mallarme | |
9347 | 9347 | Mallomars |
9348 | 9348 | Mallomars's |
9349 | 9349 | Mallory |
... | ... | @@ -10649,8 +10649,8 @@ Myrtle's |
10649 | 10649 | Mysore |
10650 | 10650 | Myst |
10651 | 10651 | Myst's |
10652 | -Münchhausen | |
10653 | -Münchhausen's | |
10652 | +Munchhausen | |
10653 | +Munchhausen's | |
10654 | 10654 | N |
10655 | 10655 | N's |
10656 | 10656 | NASA's |
... | ... | @@ -11600,8 +11600,8 @@ Paramaribo |
11600 | 11600 | Paramaribo's |
11601 | 11601 | Paramount |
11602 | 11602 | Paramount's |
11603 | -Paraná | |
11604 | -Paraná's | |
11603 | +Parana | |
11604 | +Parana's | |
11605 | 11605 | Parcheesi |
11606 | 11606 | Parcheesi's |
11607 | 11607 | Pareto |
... | ... | @@ -12041,8 +12041,8 @@ Podunk |
12041 | 12041 | Poe |
12042 | 12042 | Pogo |
12043 | 12043 | Pogo's |
12044 | -Poincaré | |
12045 | -Poincaré's | |
12044 | +Poincare | |
12045 | +Poincare's | |
12046 | 12046 | Poiret |
12047 | 12047 | Poiret's |
12048 | 12048 | Poirot |
... | ... | @@ -12051,8 +12051,8 @@ Poisson |
12051 | 12051 | Poisson's |
12052 | 12052 | Poitier |
12053 | 12053 | Poitier's |
12054 | -Pokémon | |
12055 | -Pokémon's | |
12054 | +Pokemon | |
12055 | +Pokemon's | |
12056 | 12056 | Poland |
12057 | 12057 | Poland's |
12058 | 12058 | Polanski |
... | ... | @@ -12250,8 +12250,8 @@ Proust's |
12250 | 12250 | Provencals |
12251 | 12251 | Provence |
12252 | 12252 | Provence's |
12253 | -Provençal | |
12254 | -Provençal's | |
12253 | +Provencal | |
12254 | +Provencal's | |
12255 | 12255 | Proverbs |
12256 | 12256 | Providence |
12257 | 12257 | Providence's |
... | ... | @@ -12362,10 +12362,10 @@ Pythagorean |
12362 | 12362 | Pythias |
12363 | 12363 | Python |
12364 | 12364 | Python's |
12365 | -Pétain | |
12366 | -Pétain's | |
12367 | -Pôrto | |
12368 | -Pôrto's | |
12365 | +Petain | |
12366 | +Petain's | |
12367 | +Porto | |
12368 | +Porto's | |
12369 | 12369 | Q |
12370 | 12370 | Qaddafi |
12371 | 12371 | Qaddafi's |
... | ... | @@ -12422,7 +12422,7 @@ Quixotism |
12422 | 12422 | Quixotism's |
12423 | 12423 | Qumran |
12424 | 12424 | Quonset |
12425 | -Québecois | |
12425 | +Quebecois | |
12426 | 12426 | R |
12427 | 12427 | R's |
12428 | 12428 | RAF's |
... | ... | @@ -12461,8 +12461,8 @@ Rafael |
12461 | 12461 | Rafael's |
12462 | 12462 | Raffles |
12463 | 12463 | Raffles's |
12464 | -Ragnarök | |
12465 | -Ragnarök's | |
12464 | +Ragnarok | |
12465 | +Ragnarok's | |
12466 | 12466 | Rainier |
12467 | 12467 | Raleigh |
12468 | 12468 | Raleigh's |
... | ... | @@ -13429,8 +13429,8 @@ Schrieffer |
13429 | 13429 | Schrieffer's |
13430 | 13430 | Schroeder |
13431 | 13431 | Schroeder's |
13432 | -Schrödinger | |
13433 | -Schrödinger's | |
13432 | +Schrodinger | |
13433 | +Schrodinger's | |
13434 | 13434 | Schubert |
13435 | 13435 | Schultz |
13436 | 13436 | Schultz's |
... | ... | @@ -14498,7 +14498,7 @@ Szilard |
14498 | 14498 | Szilard's |
14499 | 14499 | Szymborska |
14500 | 14500 | Szymborska's |
14501 | -Sèvres | |
14501 | +Sevres | |
14502 | 14502 | T |
14503 | 14503 | T'ang |
14504 | 14504 | T's |
... | ... | @@ -14621,8 +14621,8 @@ Tanisha |
14621 | 14621 | Tanisha's |
14622 | 14622 | Tanner |
14623 | 14623 | Tanner's |
14624 | -Tannhäuser | |
14625 | -Tannhäuser's | |
14624 | +Tannhauser | |
14625 | +Tannhauser's | |
14626 | 14626 | Tantalus |
14627 | 14627 | Tantalus's |
14628 | 14628 | Tanya |
... | ... | @@ -14837,8 +14837,8 @@ Thespian |
14837 | 14837 | Thespis |
14838 | 14838 | Thespis's |
14839 | 14839 | Thessalonian |
14840 | -Thessaloníki | |
14841 | -Thessaloníki's | |
14840 | +Thessaloniki | |
14841 | +Thessaloniki's | |
14842 | 14842 | Thessaly |
14843 | 14843 | Thessaly's |
14844 | 14844 | Thieu |
... | ... | @@ -15464,7 +15464,7 @@ Valparaiso |
15464 | 15464 | Valparaiso's |
15465 | 15465 | Valvoline |
15466 | 15466 | Valvoline's |
15467 | -Valéry | |
15467 | +Valery | |
15468 | 15468 | Van |
15469 | 15469 | Vance |
15470 | 15470 | Vancouver |
... | ... | @@ -15520,9 +15520,9 @@ Velma |
15520 | 15520 | Velma's |
15521 | 15521 | Velveeta |
15522 | 15522 | Velveeta's |
15523 | -Velásquez | |
15524 | -Velásquez's | |
15525 | -Velázquez | |
15523 | +Velasquez | |
15524 | +Velasquez's | |
15525 | +Velazquez | |
15526 | 15526 | Venetian |
15527 | 15527 | Venetian's |
15528 | 15528 | Venetians |
... | ... | @@ -16479,8 +16479,8 @@ Zyrtec |
16479 | 16479 | Zyrtec's |
16480 | 16480 | Zyuganov |
16481 | 16481 | Zyuganov's |
16482 | -Zürich | |
16483 | -Zürich's | |
16482 | +Zurich | |
16483 | +Zurich's | |
16484 | 16484 | a |
16485 | 16485 | aardvark |
16486 | 16486 | aardvark's |
... | ... | @@ -16535,9 +16535,9 @@ abbreviating |
16535 | 16535 | abbreviation |
16536 | 16536 | abbreviation's |
16537 | 16537 | abbreviations |
16538 | -abbé | |
16539 | -abbé's | |
16540 | -abbés | |
16538 | +abbe | |
16539 | +abbe's | |
16540 | +abbes | |
16541 | 16541 | abdicate |
16542 | 16542 | abdicated |
16543 | 16543 | abdicates |
... | ... | @@ -17376,7 +17376,7 @@ adieu's |
17376 | 17376 | adieus |
17377 | 17377 | adieux |
17378 | 17378 | adipose |
17379 | -adiós | |
17379 | +adios | |
17380 | 17380 | adjacent |
17381 | 17381 | adjacently |
17382 | 17382 | adjectival |
... | ... | @@ -19598,11 +19598,11 @@ applicator's |
19598 | 19598 | applicators |
19599 | 19599 | applied |
19600 | 19600 | applies |
19601 | -appliqué | |
19602 | -appliqué's | |
19603 | -appliquéd | |
19604 | -appliquéing | |
19605 | -appliqués | |
19601 | +applique | |
19602 | +applique's | |
19603 | +appliqued | |
19604 | +appliqueing | |
19605 | +appliques | |
19606 | 19606 | apply |
19607 | 19607 | applying |
19608 | 19608 | appoint |
... | ... | @@ -20642,9 +20642,9 @@ attaching |
20642 | 20642 | attachment |
20643 | 20643 | attachment's |
20644 | 20644 | attachments |
20645 | -attaché | |
20646 | -attaché's | |
20647 | -attachés | |
20645 | +attache | |
20646 | +attache's | |
20647 | +attaches | |
20648 | 20648 | attack |
20649 | 20649 | attack's |
20650 | 20650 | attacked |
... | ... | @@ -23491,7 +23491,7 @@ blastoff |
23491 | 23491 | blastoff's |
23492 | 23492 | blastoffs |
23493 | 23493 | blasts |
23494 | -blasé | |
23494 | +blase | |
23495 | 23495 | blatant |
23496 | 23496 | blatantly |
23497 | 23497 | blaze |
... | ... | @@ -24510,9 +24510,9 @@ bout's |
24510 | 24510 | boutique |
24511 | 24511 | boutique's |
24512 | 24512 | boutiques |
24513 | -boutonnière | |
24514 | -boutonnière's | |
24515 | -boutonnières | |
24513 | +boutonniere | |
24514 | +boutonniere's | |
24515 | +boutonnieres | |
24516 | 24516 | bouts |
24517 | 24517 | bovine |
24518 | 24518 | bovine's |
... | ... | @@ -26129,9 +26129,9 @@ caffeine's |
26129 | 26129 | caftan |
26130 | 26130 | caftan's |
26131 | 26131 | caftans |
26132 | -café | |
26133 | -café's | |
26134 | -cafés | |
26132 | +cafe | |
26133 | +cafe's | |
26134 | +cafes | |
26135 | 26135 | cage |
26136 | 26136 | cage's |
26137 | 26137 | caged |
... | ... | @@ -26425,9 +26425,9 @@ can't |
26425 | 26425 | canal |
26426 | 26426 | canal's |
26427 | 26427 | canals |
26428 | -canapé | |
26429 | -canapé's | |
26430 | -canapés | |
26428 | +canape | |
26429 | +canape's | |
26430 | +canapes | |
26431 | 26431 | canard |
26432 | 26432 | canard's |
26433 | 26433 | canards |
... | ... | @@ -28804,12 +28804,12 @@ chutzpa |
28804 | 28804 | chutzpa's |
28805 | 28805 | chutzpah |
28806 | 28806 | chutzpah's |
28807 | -château | |
28808 | -château's | |
28809 | -châteaux | |
28810 | -châtelaine | |
28811 | -châtelaine's | |
28812 | -châtelaines | |
28807 | +chateau | |
28808 | +chateau's | |
28809 | +chateaux | |
28810 | +chatelaine | |
28811 | +chatelaine's | |
28812 | +chatelaines | |
28813 | 28813 | cicada |
28814 | 28814 | cicada's |
28815 | 28815 | cicadae |
... | ... | @@ -29312,10 +29312,10 @@ clew's |
29312 | 29312 | clewed |
29313 | 29313 | clewing |
29314 | 29314 | clews |
29315 | -cliché | |
29316 | -cliché's | |
29317 | -clichéd | |
29318 | -clichés | |
29315 | +cliche | |
29316 | +cliche's | |
29317 | +cliched | |
29318 | +cliches | |
29319 | 29319 | click |
29320 | 29320 | click's |
29321 | 29321 | clicked |
... | ... | @@ -29324,9 +29324,9 @@ clicks |
29324 | 29324 | client |
29325 | 29325 | client's |
29326 | 29326 | clients |
29327 | -clientèle | |
29328 | -clientèle's | |
29329 | -clientèles | |
29327 | +clientele | |
29328 | +clientele's | |
29329 | +clienteles | |
29330 | 29330 | cliff |
29331 | 29331 | cliff's |
29332 | 29332 | cliffhanger |
... | ... | @@ -31187,9 +31187,9 @@ confrontations |
31187 | 31187 | confronted |
31188 | 31188 | confronting |
31189 | 31189 | confronts |
31190 | -confrère | |
31191 | -confrère's | |
31192 | -confrères | |
31190 | +confrere | |
31191 | +confrere's | |
31192 | +confreres | |
31193 | 31193 | confuse |
31194 | 31194 | confused |
31195 | 31195 | confusedly |
... | ... | @@ -31483,8 +31483,8 @@ consolidation |
31483 | 31483 | consolidation's |
31484 | 31484 | consolidations |
31485 | 31485 | consoling |
31486 | -consommé | |
31487 | -consommé's | |
31486 | +consomme | |
31487 | +consomme's | |
31488 | 31488 | consonance |
31489 | 31489 | consonance's |
31490 | 31490 | consonances |
... | ... | @@ -32431,9 +32431,9 @@ cortical |
32431 | 32431 | cortices |
32432 | 32432 | cortisone |
32433 | 32433 | cortisone's |
32434 | -cortège | |
32435 | -cortège's | |
32436 | -cortèges | |
32434 | +cortege | |
32435 | +cortege's | |
32436 | +corteges | |
32437 | 32437 | coruscate |
32438 | 32438 | coruscated |
32439 | 32439 | coruscates |
... | ... | @@ -33528,9 +33528,9 @@ crows |
33528 | 33528 | crozier |
33529 | 33529 | crozier's |
33530 | 33530 | croziers |
33531 | -croûton | |
33532 | -croûton's | |
33533 | -croûtons | |
33531 | +crouton | |
33532 | +crouton's | |
33533 | +croutons | |
33534 | 33534 | crucial |
33535 | 33535 | crucially |
33536 | 33536 | crucible |
... | ... | @@ -33564,8 +33564,8 @@ crudest |
33564 | 33564 | crudities |
33565 | 33565 | crudity |
33566 | 33566 | crudity's |
33567 | -crudités | |
33568 | -crudités's | |
33567 | +crudites | |
33568 | +crudites's | |
33569 | 33569 | cruel |
33570 | 33570 | crueler |
33571 | 33571 | cruelest |
... | ... | @@ -33693,9 +33693,9 @@ crystallizing |
33693 | 33693 | crystallographic |
33694 | 33694 | crystallography |
33695 | 33695 | crystals |
33696 | -crèche | |
33697 | -crèche's | |
33698 | -crèches | |
33696 | +creche | |
33697 | +creche's | |
33698 | +creches | |
33699 | 33699 | cs |
33700 | 33700 | cub |
33701 | 33701 | cub's |
... | ... | @@ -35901,9 +35901,9 @@ derricks |
35901 | 35901 | derringer |
35902 | 35902 | derringer's |
35903 | 35903 | derringers |
35904 | -derrière | |
35905 | -derrière's | |
35906 | -derrières | |
35904 | +derriere | |
35905 | +derriere's | |
35906 | +derrieres | |
35907 | 35907 | dervish |
35908 | 35908 | dervish's |
35909 | 35909 | dervishes |
... | ... | @@ -37991,9 +37991,9 @@ divorce's |
37991 | 37991 | divorced |
37992 | 37992 | divorces |
37993 | 37993 | divorcing |
37994 | -divorcée | |
37995 | -divorcée's | |
37996 | -divorcées | |
37994 | +divorcee | |
37995 | +divorcee's | |
37996 | +divorcees | |
37997 | 37997 | divot |
37998 | 37998 | divot's |
37999 | 37999 | divots |
... | ... | @@ -39280,15 +39280,15 @@ dyspepsia's |
39280 | 39280 | dyspeptic |
39281 | 39281 | dyspeptic's |
39282 | 39282 | dyspeptics |
39283 | -débutante | |
39284 | -débutante's | |
39285 | -débutantes | |
39286 | -décolleté | |
39287 | -dérailleur | |
39288 | -dérailleur's | |
39289 | -dérailleurs | |
39290 | -détente | |
39291 | -détente's | |
39283 | +debutante | |
39284 | +debutante's | |
39285 | +debutantes | |
39286 | +decollete | |
39287 | +derailleur | |
39288 | +derailleur's | |
39289 | +derailleurs | |
39290 | +detente | |
39291 | +detente's | |
39292 | 39292 | e |
39293 | 39293 | e'er |
39294 | 39294 | eBay |
... | ... | @@ -40950,9 +40950,9 @@ entry's |
40950 | 40950 | entryway |
40951 | 40951 | entryway's |
40952 | 40952 | entryways |
40953 | -entrée | |
40954 | -entrée's | |
40955 | -entrées | |
40953 | +entree | |
40954 | +entree's | |
40955 | +entrees | |
40956 | 40956 | entwine |
40957 | 40957 | entwined |
40958 | 40958 | entwines |
... | ... | @@ -43435,12 +43435,12 @@ fez |
43435 | 43435 | fez's |
43436 | 43436 | fezes |
43437 | 43437 | fezzes |
43438 | -fiancé | |
43439 | -fiancé's | |
43440 | -fiancée | |
43441 | -fiancée's | |
43442 | -fiancées | |
43443 | -fiancés | |
43438 | +fiance | |
43439 | +fiance's | |
43440 | +fiancee | |
43441 | +fiancee's | |
43442 | +fiancees | |
43443 | +fiances | |
43444 | 43444 | fiasco |
43445 | 43445 | fiasco's |
43446 | 43446 | fiascoes |
... | ... | @@ -44081,9 +44081,9 @@ flamboyance |
44081 | 44081 | flamboyance's |
44082 | 44082 | flamboyant |
44083 | 44083 | flamboyantly |
44084 | -flambé | |
44085 | -flambé's | |
44086 | -flambéed | |
44084 | +flambe | |
44085 | +flambe's | |
44086 | +flambeed | |
44087 | 44087 | flame |
44088 | 44088 | flame's |
44089 | 44089 | flamed |
... | ... | @@ -45530,8 +45530,8 @@ franks |
45530 | 45530 | frantic |
45531 | 45531 | frantically |
45532 | 45532 | frappes |
45533 | -frappé | |
45534 | -frappé's | |
45533 | +frappe | |
45534 | +frappe's | |
45535 | 45535 | frat |
45536 | 45536 | frat's |
45537 | 45537 | fraternal |
... | ... | @@ -46250,9 +46250,9 @@ fuzziness |
46250 | 46250 | fuzziness's |
46251 | 46251 | fuzzing |
46252 | 46252 | fuzzy |
46253 | -fête | |
46254 | -fête's | |
46255 | -fêtes | |
46253 | +fete | |
46254 | +fete's | |
46255 | +fetes | |
46256 | 46256 | g |
46257 | 46257 | gab |
46258 | 46258 | gab's |
... | ... | @@ -49039,9 +49039,9 @@ habituates |
49039 | 49039 | habituating |
49040 | 49040 | habituation |
49041 | 49041 | habituation's |
49042 | -habitué | |
49043 | -habitué's | |
49044 | -habitués | |
49042 | +habitue | |
49043 | +habitue's | |
49044 | +habitues | |
49045 | 49045 | hacienda |
49046 | 49046 | hacienda's |
49047 | 49047 | haciendas |
... | ... | @@ -53897,9 +53897,9 @@ ingress |
53897 | 53897 | ingress's |
53898 | 53898 | ingresses |
53899 | 53899 | ingrown |
53900 | -ingénue | |
53901 | -ingénue's | |
53902 | -ingénues | |
53900 | +ingenue | |
53901 | +ingenue's | |
53902 | +ingenues | |
53903 | 53903 | inhabit |
53904 | 53904 | inhabitable |
53905 | 53905 | inhabitant |
... | ... | @@ -55511,9 +55511,9 @@ jailor |
55511 | 55511 | jailor's |
55512 | 55512 | jailors |
55513 | 55513 | jails |
55514 | -jalapeño | |
55515 | -jalapeño's | |
55516 | -jalapeños | |
55514 | +jalapeno | |
55515 | +jalapeno's | |
55516 | +jalapenos | |
55517 | 55517 | jalopies |
55518 | 55518 | jalopy |
55519 | 55519 | jalopy's |
... | ... | @@ -55552,9 +55552,9 @@ japes |
55552 | 55552 | japing |
55553 | 55553 | jar |
55554 | 55554 | jar's |
55555 | -jardinière | |
55556 | -jardinière's | |
55557 | -jardinières | |
55555 | +jardiniere | |
55556 | +jardiniere's | |
55557 | +jardinieres | |
55558 | 55558 | jargon |
55559 | 55559 | jargon's |
55560 | 55560 | jarred |
... | ... | @@ -56503,9 +56503,9 @@ kindergartener |
56503 | 56503 | kindergartener's |
56504 | 56504 | kindergarteners |
56505 | 56505 | kindergartens |
56506 | -kindergärtner | |
56507 | -kindergärtner's | |
56508 | -kindergärtners | |
56506 | +kindergartner | |
56507 | +kindergartner's | |
56508 | +kindergartners | |
56509 | 56509 | kindest |
56510 | 56510 | kindhearted |
56511 | 56511 | kindle |
... | ... | @@ -56791,9 +56791,9 @@ kroner |
56791 | 56791 | kronor |
56792 | 56792 | krypton |
56793 | 56793 | krypton's |
56794 | -króna | |
56795 | -króna's | |
56796 | -krónur | |
56794 | +krona | |
56795 | +krona's | |
56796 | +kronur | |
56797 | 56797 | ks |
56798 | 56798 | kudos |
56799 | 56799 | kudos's |
... | ... | @@ -59450,8 +59450,8 @@ mackinaws |
59450 | 59450 | mackintosh |
59451 | 59451 | mackintosh's |
59452 | 59452 | mackintoshes |
59453 | -macramé | |
59454 | -macramé's | |
59453 | +macrame | |
59454 | +macrame's | |
59455 | 59455 | macro |
59456 | 59456 | macro's |
59457 | 59457 | macrobiotic |
... | ... | @@ -60034,7 +60034,7 @@ manorial |
60034 | 60034 | manors |
60035 | 60035 | manpower |
60036 | 60036 | manpower's |
60037 | -manqué | |
60037 | +manque | |
60038 | 60038 | mans |
60039 | 60039 | mansard |
60040 | 60040 | mansard's |
... | ... | @@ -60100,8 +60100,8 @@ manuscript's |
60100 | 60100 | manuscripts |
60101 | 60101 | many |
60102 | 60102 | many's |
60103 | -manège | |
60104 | -manège's | |
60103 | +manege | |
60104 | +manege's | |
60105 | 60105 | map |
60106 | 60106 | map's |
60107 | 60107 | maple |
... | ... | @@ -60531,9 +60531,9 @@ mathematics's |
60531 | 60531 | mating |
60532 | 60532 | matins |
60533 | 60533 | matins's |
60534 | -matinée | |
60535 | -matinée's | |
60536 | -matinées | |
60534 | +matinee | |
60535 | +matinee's | |
60536 | +matinees | |
60537 | 60537 | matriarch |
60538 | 60538 | matriarch's |
60539 | 60539 | matriarchal |
... | ... | @@ -60601,8 +60601,8 @@ matzohs |
60601 | 60601 | matzos |
60602 | 60602 | matzot |
60603 | 60603 | matzoth |
60604 | -matériel | |
60605 | -matériel's | |
60604 | +materiel | |
60605 | +materiel's | |
60606 | 60606 | maudlin |
60607 | 60607 | maul |
60608 | 60608 | maul's |
... | ... | @@ -63781,12 +63781,12 @@ mythologists |
63781 | 63781 | mythology |
63782 | 63782 | mythology's |
63783 | 63783 | myths |
63784 | -métier | |
63785 | -métier's | |
63786 | -métiers | |
63787 | -mêlée | |
63788 | -mêlée's | |
63789 | -mêlées | |
63784 | +metier | |
63785 | +metier's | |
63786 | +metiers | |
63787 | +melee | |
63788 | +melee's | |
63789 | +melees | |
63790 | 63790 | n |
63791 | 63791 | nab |
63792 | 63792 | nabbed |
... | ... | @@ -63825,8 +63825,8 @@ naively |
63825 | 63825 | naiver |
63826 | 63826 | naivest |
63827 | 63827 | naivety |
63828 | -naiveté | |
63829 | -naiveté's | |
63828 | +naivete | |
63829 | +naivete's | |
63830 | 63830 | naked |
63831 | 63831 | nakedly |
63832 | 63832 | nakedness |
... | ... | @@ -65309,7 +65309,7 @@ nymphomaniac |
65309 | 65309 | nymphomaniac's |
65310 | 65310 | nymphomaniacs |
65311 | 65311 | nymphs |
65312 | -née | |
65312 | +nee | |
65313 | 65313 | o |
65314 | 65314 | o'clock |
65315 | 65315 | o'er |
... | ... | @@ -66642,7 +66642,7 @@ outright |
66642 | 66642 | outrun |
66643 | 66643 | outrunning |
66644 | 66644 | outruns |
66645 | -outré | |
66645 | +outre | |
66646 | 66646 | outs |
66647 | 66647 | outsell |
66648 | 66648 | outselling |
... | ... | @@ -68175,7 +68175,7 @@ passports |
68175 | 68175 | password |
68176 | 68176 | password's |
68177 | 68177 | passwords |
68178 | -passé | |
68178 | +passe | |
68179 | 68179 | past |
68180 | 68180 | past's |
68181 | 68181 | pasta |
... | ... | @@ -73305,9 +73305,9 @@ protuberance |
73305 | 73305 | protuberance's |
73306 | 73306 | protuberances |
73307 | 73307 | protuberant |
73308 | -protégé | |
73309 | -protégé's | |
73310 | -protégés | |
73308 | +protege | |
73309 | +protege's | |
73310 | +proteges | |
73311 | 73311 | proud |
73312 | 73312 | prouder |
73313 | 73313 | proudest |
... | ... | @@ -73413,10 +73413,10 @@ prurient |
73413 | 73413 | pry |
73414 | 73414 | pry's |
73415 | 73415 | prying |
73416 | -précis | |
73417 | -précis's | |
73418 | -précised | |
73419 | -précising | |
73416 | +precis | |
73417 | +precis's | |
73418 | +precised | |
73419 | +precising | |
73420 | 73420 | psalm |
73421 | 73421 | psalm's |
73422 | 73422 | psalmist |
... | ... | @@ -75460,7 +75460,7 @@ recheck's |
75460 | 75460 | rechecked |
75461 | 75461 | rechecking |
75462 | 75462 | rechecks |
75463 | -recherché | |
75463 | +recherche | |
75464 | 75464 | recidivism |
75465 | 75465 | recidivism's |
75466 | 75466 | recidivist |
... | ... | @@ -78302,7 +78302,7 @@ riskiness's |
78302 | 78302 | risking |
78303 | 78303 | risks |
78304 | 78304 | risky |
78305 | -risqué | |
78305 | +risque | |
78306 | 78306 | rite |
78307 | 78307 | rite's |
78308 | 78308 | rites |
... | ... | @@ -78775,9 +78775,9 @@ routinized |
78775 | 78775 | routinizes |
78776 | 78776 | routinizing |
78777 | 78777 | routs |
78778 | -roué | |
78779 | -roué's | |
78780 | -roués | |
78778 | +roue | |
78779 | +roue's | |
78780 | +roues | |
78781 | 78781 | rove |
78782 | 78782 | roved |
78783 | 78783 | rover |
... | ... | @@ -79757,11 +79757,11 @@ sausage |
79757 | 79757 | sausage's |
79758 | 79758 | sausages |
79759 | 79759 | sauted |
79760 | -sauté | |
79761 | -sauté's | |
79762 | -sautéed | |
79763 | -sautéing | |
79764 | -sautés | |
79760 | +saute | |
79761 | +saute's | |
79762 | +sauteed | |
79763 | +sauteing | |
79764 | +sautes | |
79765 | 79765 | savage |
79766 | 79766 | savage's |
79767 | 79767 | savaged |
... | ... | @@ -83906,9 +83906,9 @@ smuts |
83906 | 83906 | smuttier |
83907 | 83907 | smuttiest |
83908 | 83908 | smutty |
83909 | -smörgåsbord | |
83910 | -smörgåsbord's | |
83911 | -smörgåsbords | |
83909 | +smorgasbord | |
83910 | +smorgasbord's | |
83911 | +smorgasbords | |
83912 | 83912 | snack |
83913 | 83913 | snack's |
83914 | 83914 | snacked |
... | ... | @@ -84377,9 +84377,9 @@ soil's |
84377 | 84377 | soiled |
84378 | 84378 | soiling |
84379 | 84379 | soils |
84380 | -soirée | |
84381 | -soirée's | |
84382 | -soirées | |
84380 | +soiree | |
84381 | +soiree's | |
84382 | +soirees | |
84383 | 84383 | sojourn |
84384 | 84384 | sojourn's |
84385 | 84385 | sojourned |
... | ... | @@ -84700,9 +84700,9 @@ sou'wester |
84700 | 84700 | soubriquet |
84701 | 84701 | soubriquet's |
84702 | 84702 | soubriquets |
84703 | -soufflé | |
84704 | -soufflé's | |
84705 | -soufflés | |
84703 | +souffle | |
84704 | +souffle's | |
84705 | +souffles | |
84706 | 84706 | sough |
84707 | 84707 | sough's |
84708 | 84708 | soughed |
... | ... | @@ -84746,9 +84746,9 @@ soupiest |
84746 | 84746 | souping |
84747 | 84747 | soups |
84748 | 84748 | soupy |
84749 | -soupçon | |
84750 | -soupçon's | |
84751 | -soupçons | |
84749 | +soupcon | |
84750 | +soupcon's | |
84751 | +soupcons | |
84752 | 84752 | sour |
84753 | 84753 | sour's |
84754 | 84754 | source |
... | ... | @@ -89033,9 +89033,9 @@ systemic's |
89033 | 89033 | systemics |
89034 | 89034 | systems |
89035 | 89035 | systolic |
89036 | -séance | |
89037 | -séance's | |
89038 | -séances | |
89036 | +seance | |
89037 | +seance's | |
89038 | +seances | |
89039 | 89039 | t |
89040 | 89040 | tab |
89041 | 89041 | tab's |
... | ... | @@ -91621,7 +91621,7 @@ touchstone |
91621 | 91621 | touchstone's |
91622 | 91622 | touchstones |
91623 | 91623 | touchy |
91624 | -touché | |
91624 | +touche | |
91625 | 91625 | tough |
91626 | 91626 | tough's |
91627 | 91627 | toughen |
... | ... | @@ -95864,9 +95864,9 @@ victualing |
95864 | 95864 | victualled |
95865 | 95865 | victualling |
95866 | 95866 | victuals |
95867 | -vicuña | |
95868 | -vicuña's | |
95869 | -vicuñas | |
95867 | +vicuna | |
95868 | +vicuna's | |
95869 | +vicunas | |
95870 | 95870 | video |
95871 | 95871 | video's |
95872 | 95872 | videocassette |
... | ... | @@ -99152,20 +99152,20 @@ zwieback's |
99152 | 99152 | zygote |
99153 | 99153 | zygote's |
99154 | 99154 | zygotes |
99155 | -Ångström | |
99156 | -éclair | |
99157 | -éclair's | |
99158 | -éclairs | |
99159 | -éclat | |
99160 | -éclat's | |
99161 | -élan | |
99162 | -élan's | |
99163 | -émigré | |
99164 | -émigré's | |
99165 | -émigrés | |
99166 | -épée | |
99167 | -épée's | |
99168 | -épées | |
99169 | -étude | |
99170 | -étude's | |
99171 | -études | |
99155 | +Angstrom | |
99156 | +eclair | |
99157 | +eclair's | |
99158 | +eclairs | |
99159 | +eclat | |
99160 | +eclat's | |
99161 | +elan | |
99162 | +elan's | |
99163 | +emigre | |
99164 | +emigre's | |
99165 | +emigres | |
99166 | +epee | |
99167 | +epee's | |
99168 | +epees | |
99169 | +etude | |
99170 | +etude's | |
99171 | +etudes | ... | ... |
words1~ deleted