Commit 974b1ae48c01746c87545632b597356e73088ec4

Authored by tvolleri
1 parent 73e92d24

ajout des fichiers du projet.

Makefile 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +EXEC = main
  2 +CC = gcc
  3 +SRC = $(wildcard *.c)
  4 +OBJ = $(SRC:.c = .o)
  5 +CFLAG = -g -Wall -Wextra -O0
  6 +
  7 +all: $(EXEC)
  8 +
  9 +%.o : %.c
  10 + $(CC) $(CFLAG) -o $@ -c $<
  11 +
  12 +$(EXEC) : $(OBJ)
  13 + $(CC) -o $@ $^
  14 +
  15 +clean:
  16 + rm -rf *.o
README.md deleted
@@ -1,33 +0,0 @@ @@ -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
compare.c 0 → 100644
@@ -0,0 +1,73 @@ @@ -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
@@ -1,4 +0,0 @@ @@ -1,4 +0,0 @@
1 -if [ $# -ne 1 ]  
2 -then echo "Usage: $0 /usr/share/dict/your_language (creates a local copy with accents converted)"  
3 -else iconv -f utf8 -t ascii//TRANSLIT $1 > `basename $1`-no-accents  
4 -fi  
dico deleted
No preview for this file type
@@ -2,52 +2,46 @@ @@ -2,52 +2,46 @@
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <stdbool.h> 3 #include <stdbool.h>
4 #include <string.h> 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 ptarbre rech(ptarbre arbre, char lettre) 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 if (arbre!=NULL) 12 if (arbre!=NULL)
29 { 13 {
30 - printf("arbre lettre %c \n", arbre->lettre);  
31 while ((arbre->suivant!=NULL) && (arbre->lettre != lettre)) 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 arbre=(arbre->suivant); 16 arbre=(arbre->suivant);
35 } 17 }
36 } 18 }
37 return arbre; 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 (*parbre)=malloc(sizeof(cell)); 25 (*parbre)=malloc(sizeof(cell));
42 (*parbre)->fils=malloc(sizeof(cell)); 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 (*parbre)->fils->suivant=NULL; 37 (*parbre)->fils->suivant=NULL;
44 (*parbre)->suivant=NULL; 38 (*parbre)->suivant=NULL;
45 (*parbre)->lettre=lettre; 39 (*parbre)->lettre=lettre;
46 (*parbre)->fin_mot=false; 40 (*parbre)->fin_mot=false;
47 - printf("init dico\n");  
48 } 41 }
49 42
50 void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre) 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 *parbresuiv=malloc(sizeof(cell)); 46 *parbresuiv=malloc(sizeof(cell));
53 (*parbre)->suivant=*parbresuiv; // On relie la nouvelle lettre à l'avant dernière lettre 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,11 +50,10 @@ void ajout_dico(ptarbre *parbre, ptarbre *parbresuiv, char lettre)
56 (*parbresuiv)->suivant=NULL; 50 (*parbresuiv)->suivant=NULL;
57 (*parbresuiv)->fin_mot=false; 51 (*parbresuiv)->fin_mot=false;
58 (*parbresuiv)->lettre=lettre; 52 (*parbresuiv)->lettre=lettre;
59 - printf("ajout lettre : %c à %p \n",(*parbresuiv)->lettre, parbresuiv);  
60 } 53 }
61 54
62 void affiche_dico(ptarbre arbre, int n_lettre, char mot[]) 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 if(arbre == NULL) 58 if(arbre == NULL)
66 { 59 {
@@ -70,27 +63,33 @@ void affiche_dico(ptarbre arbre, int n_lettre, char mot[]) @@ -70,27 +63,33 @@ void affiche_dico(ptarbre arbre, int n_lettre, char mot[])
70 { 63 {
71 if (arbre->fils != NULL) 64 if (arbre->fils != NULL)
72 { 65 {
73 - printf("%c",arbre->lettre);  
74 mot[n_lettre]=arbre->lettre; 66 mot[n_lettre]=arbre->lettre;
75 n_lettre++; 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 if (arbre->suivant != NULL) 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 n_lettre--; 82 n_lettre--;
  83 + mot[n_lettre]='\0';
86 84
87 - } 85 + }
88 86
89 } 87 }
90 88
91 void free_tree(cell **ptr_tree) 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 printf("L'arbre est vide\n"); 93 printf("L'arbre est vide\n");
95 else 94 else
96 { 95 {
@@ -102,82 +101,65 @@ void free_tree(cell **ptr_tree) @@ -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 ptarbre rec; 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 if (c != '\n') 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 else 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,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

phrase_avec_fautes 0 → 100644
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +Sandra and Bety ae sittinges in te park, Sandra asks Betty
phrase_type 0 → 100644
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +Sandra and Betty are sitting in the park, Sandra asks Betty.
projet deleted
No preview for this file type
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <stdlib.h> 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 arbre=NULL; 13 arbre=NULL;
46 - char c; 14 +
47 // Ouvrir fichier 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 else 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
tree.h 0 → 100644
@@ -0,0 +1,38 @@ @@ -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,8 +1050,8 @@ Astoria
1050 Astrakhan 1050 Astrakhan
1051 AstroTurf 1051 AstroTurf
1052 Asturias 1052 Asturias
1053 -Asunción  
1054 -Asunción's 1053 +Asuncion
  1054 +Asuncion's
1055 Aswan 1055 Aswan
1056 Aswan's 1056 Aswan's
1057 At 1057 At
@@ -1062,8 +1062,8 @@ Atahualpa @@ -1062,8 +1062,8 @@ Atahualpa
1062 Atalanta 1062 Atalanta
1063 Atari 1063 Atari
1064 Atari's 1064 Atari's
1065 -Atatürk  
1066 -Atatürk's 1065 +Ataturk
  1066 +Ataturk's
1067 Athabasca 1067 Athabasca
1068 Athabasca's 1068 Athabasca's
1069 Athabascan 1069 Athabascan
@@ -1444,7 +1444,7 @@ Bartholdi&#39;s @@ -1444,7 +1444,7 @@ Bartholdi&#39;s
1444 Bartholomew 1444 Bartholomew
1445 Bartlett 1445 Bartlett
1446 Barton 1446 Barton
1447 -Bartók 1447 +Bartok
1448 Baruch 1448 Baruch
1449 Baryshnikov 1449 Baryshnikov
1450 Basel 1450 Basel
@@ -1937,8 +1937,8 @@ Boers @@ -1937,8 +1937,8 @@ Boers
1937 Boethius 1937 Boethius
1938 Bogart 1938 Bogart
1939 Bogart's 1939 Bogart's
1940 -Bogotá  
1941 -Bogotá's 1940 +Bogota
  1941 +Bogota's
1942 Bohemia 1942 Bohemia
1943 Bohemian 1943 Bohemian
1944 Bohemian's 1944 Bohemian's
@@ -2065,8 +2065,8 @@ Boyd @@ -2065,8 +2065,8 @@ Boyd
2065 Boyer 2065 Boyer
2066 Boyer's 2066 Boyer's
2067 Boyle 2067 Boyle
2068 -Boötes  
2069 -Boötes's 2068 +Bootes
  2069 +Bootes's
2070 Br 2070 Br
2071 Br's 2071 Br's
2072 Brad 2072 Brad
@@ -2429,8 +2429,8 @@ Butler @@ -2429,8 +2429,8 @@ Butler
2429 Butterfingers 2429 Butterfingers
2430 Butterfingers's 2430 Butterfingers's
2431 Buxtehude 2431 Buxtehude
2432 -Buñuel  
2433 -Buñuel's 2432 +Bunuel
  2433 +Bunuel's
2434 Byblos 2434 Byblos
2435 Byblos's 2435 Byblos's
2436 Byelorussia 2436 Byelorussia
@@ -3428,7 +3428,7 @@ Conakry @@ -3428,7 +3428,7 @@ Conakry
3428 Conakry's 3428 Conakry's
3429 Conan 3429 Conan
3430 Conan's 3430 Conan's
3431 -Concepción 3431 +Concepcion
3432 Concetta 3432 Concetta
3433 Concetta's 3433 Concetta's
3434 Concord 3434 Concord
@@ -4480,7 +4480,7 @@ Dutchman&#39;s @@ -4480,7 +4480,7 @@ Dutchman&#39;s
4480 Dutchmen 4480 Dutchmen
4481 Duvalier 4481 Duvalier
4482 Dvina 4482 Dvina
4483 -Dvorák 4483 +Dvorak
4484 Dwayne 4484 Dwayne
4485 Dwayne's 4485 Dwayne's
4486 Dwight 4486 Dwight
@@ -4494,9 +4494,9 @@ Dyson&#39;s @@ -4494,9 +4494,9 @@ Dyson&#39;s
4494 Dzerzhinsky 4494 Dzerzhinsky
4495 Dzerzhinsky's 4495 Dzerzhinsky's
4496 Dzungaria 4496 Dzungaria
4497 -Dürer  
4498 -Düsseldorf  
4499 -Düsseldorf's 4497 +Durer
  4498 +Dusseldorf
  4499 +Dusseldorf's
4500 E 4500 E
4501 E's 4501 E's
4502 ECG's 4502 ECG's
@@ -4749,8 +4749,8 @@ Elysian @@ -4749,8 +4749,8 @@ Elysian
4749 Elysium 4749 Elysium
4750 Elysium's 4750 Elysium's
4751 Elysiums 4751 Elysiums
4752 -Elysée  
4753 -Elysée's 4752 +Elysee
  4753 +Elysee's
4754 Emacs 4754 Emacs
4755 Emacs's 4755 Emacs's
4756 Emanuel 4756 Emanuel
@@ -4941,8 +4941,8 @@ Estelle @@ -4941,8 +4941,8 @@ Estelle
4941 Estelle's 4941 Estelle's
4942 Ester 4942 Ester
4943 Ester's 4943 Ester's
4944 -Esterházy  
4945 -Esterházy's 4944 +Esterhazy
  4945 +Esterhazy's
4946 Estes 4946 Estes
4947 Esther 4947 Esther
4948 Esther's 4948 Esther's
@@ -5085,7 +5085,7 @@ FM&#39;s @@ -5085,7 +5085,7 @@ FM&#39;s
5085 FNMA 5085 FNMA
5086 FNMA's 5086 FNMA's
5087 FORTRAN's 5087 FORTRAN's
5088 -Fabergé 5088 +Faberge
5089 Fabian 5089 Fabian
5090 Fabian's 5090 Fabian's
5091 Facebook 5091 Facebook
@@ -5505,8 +5505,8 @@ Fulton @@ -5505,8 +5505,8 @@ Fulton
5505 Fulton's 5505 Fulton's
5506 Funafuti 5506 Funafuti
5507 Fundy 5507 Fundy
5508 -Furtwängler  
5509 -Furtwängler's 5508 +Furtwangler
  5509 +Furtwangler's
5510 Fushun 5510 Fushun
5511 Fuzhou 5511 Fuzhou
5512 Fuzhou's 5512 Fuzhou's
@@ -5767,7 +5767,7 @@ Gethsemane @@ -5767,7 +5767,7 @@ Gethsemane
5767 Getty 5767 Getty
5768 Gettysburg 5768 Gettysburg
5769 Gettysburg's 5769 Gettysburg's
5770 -Gewürztraminer 5770 +Gewurztraminer
5771 Ghana 5771 Ghana
5772 Ghana's 5772 Ghana's
5773 Ghanaian 5773 Ghanaian
@@ -6099,10 +6099,10 @@ Grundy @@ -6099,10 +6099,10 @@ Grundy
6099 Grus 6099 Grus
6100 Grus's 6100 Grus's
6101 Gruyeres 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 Guadalajara 6106 Guadalajara
6107 Guadalajara's 6107 Guadalajara's
6108 Guadalcanal 6108 Guadalcanal
@@ -6206,10 +6206,10 @@ Gwyn&#39;s @@ -6206,10 +6206,10 @@ Gwyn&#39;s
6206 Gypsies 6206 Gypsies
6207 Gypsy 6207 Gypsy
6208 Gypsy's 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 H 6213 H
6214 H's 6214 H's
6215 HF's 6215 HF's
@@ -6946,8 +6946,8 @@ Hyundai @@ -6946,8 +6946,8 @@ Hyundai
6946 Hyundai's 6946 Hyundai's
6947 Hz 6947 Hz
6948 Hz's 6948 Hz's
6949 -Héloise  
6950 -Héloise's 6949 +Heloise
  6950 +Heloise's
6951 I 6951 I
6952 I'd 6952 I'd
6953 I'll 6953 I'll
@@ -8311,8 +8311,8 @@ Kyoto&#39;s @@ -8311,8 +8311,8 @@ Kyoto&#39;s
8311 Kyrgyzstan 8311 Kyrgyzstan
8312 Kyushu 8312 Kyushu
8313 Kyushu's 8313 Kyushu's
8314 -Köln  
8315 -Köln's 8314 +Koln
  8315 +Koln's
8316 L 8316 L
8317 L'Amour 8317 L'Amour
8318 L'Oreal 8318 L'Oreal
@@ -9057,8 +9057,8 @@ Lula&#39;s @@ -9057,8 +9057,8 @@ Lula&#39;s
9057 Lully 9057 Lully
9058 Lulu 9058 Lulu
9059 Lulu's 9059 Lulu's
9060 -Lumière  
9061 -Lumière's 9060 +Lumiere
  9061 +Lumiere's
9062 Luna 9062 Luna
9063 Luna's 9063 Luna's
9064 Lupe 9064 Lupe
@@ -9343,7 +9343,7 @@ Malibu&#39;s @@ -9343,7 +9343,7 @@ Malibu&#39;s
9343 Malinda 9343 Malinda
9344 Malinda's 9344 Malinda's
9345 Malinowski 9345 Malinowski
9346 -Mallarmé 9346 +Mallarme
9347 Mallomars 9347 Mallomars
9348 Mallomars's 9348 Mallomars's
9349 Mallory 9349 Mallory
@@ -10649,8 +10649,8 @@ Myrtle&#39;s @@ -10649,8 +10649,8 @@ Myrtle&#39;s
10649 Mysore 10649 Mysore
10650 Myst 10650 Myst
10651 Myst's 10651 Myst's
10652 -Münchhausen  
10653 -Münchhausen's 10652 +Munchhausen
  10653 +Munchhausen's
10654 N 10654 N
10655 N's 10655 N's
10656 NASA's 10656 NASA's
@@ -11600,8 +11600,8 @@ Paramaribo @@ -11600,8 +11600,8 @@ Paramaribo
11600 Paramaribo's 11600 Paramaribo's
11601 Paramount 11601 Paramount
11602 Paramount's 11602 Paramount's
11603 -Paraná  
11604 -Paraná's 11603 +Parana
  11604 +Parana's
11605 Parcheesi 11605 Parcheesi
11606 Parcheesi's 11606 Parcheesi's
11607 Pareto 11607 Pareto
@@ -12041,8 +12041,8 @@ Podunk @@ -12041,8 +12041,8 @@ Podunk
12041 Poe 12041 Poe
12042 Pogo 12042 Pogo
12043 Pogo's 12043 Pogo's
12044 -Poincaré  
12045 -Poincaré's 12044 +Poincare
  12045 +Poincare's
12046 Poiret 12046 Poiret
12047 Poiret's 12047 Poiret's
12048 Poirot 12048 Poirot
@@ -12051,8 +12051,8 @@ Poisson @@ -12051,8 +12051,8 @@ Poisson
12051 Poisson's 12051 Poisson's
12052 Poitier 12052 Poitier
12053 Poitier's 12053 Poitier's
12054 -Pokémon  
12055 -Pokémon's 12054 +Pokemon
  12055 +Pokemon's
12056 Poland 12056 Poland
12057 Poland's 12057 Poland's
12058 Polanski 12058 Polanski
@@ -12250,8 +12250,8 @@ Proust&#39;s @@ -12250,8 +12250,8 @@ Proust&#39;s
12250 Provencals 12250 Provencals
12251 Provence 12251 Provence
12252 Provence's 12252 Provence's
12253 -Provençal  
12254 -Provençal's 12253 +Provencal
  12254 +Provencal's
12255 Proverbs 12255 Proverbs
12256 Providence 12256 Providence
12257 Providence's 12257 Providence's
@@ -12362,10 +12362,10 @@ Pythagorean @@ -12362,10 +12362,10 @@ Pythagorean
12362 Pythias 12362 Pythias
12363 Python 12363 Python
12364 Python's 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 Q 12369 Q
12370 Qaddafi 12370 Qaddafi
12371 Qaddafi's 12371 Qaddafi's
@@ -12422,7 +12422,7 @@ Quixotism @@ -12422,7 +12422,7 @@ Quixotism
12422 Quixotism's 12422 Quixotism's
12423 Qumran 12423 Qumran
12424 Quonset 12424 Quonset
12425 -Québecois 12425 +Quebecois
12426 R 12426 R
12427 R's 12427 R's
12428 RAF's 12428 RAF's
@@ -12461,8 +12461,8 @@ Rafael @@ -12461,8 +12461,8 @@ Rafael
12461 Rafael's 12461 Rafael's
12462 Raffles 12462 Raffles
12463 Raffles's 12463 Raffles's
12464 -Ragnarök  
12465 -Ragnarök's 12464 +Ragnarok
  12465 +Ragnarok's
12466 Rainier 12466 Rainier
12467 Raleigh 12467 Raleigh
12468 Raleigh's 12468 Raleigh's
@@ -13429,8 +13429,8 @@ Schrieffer @@ -13429,8 +13429,8 @@ Schrieffer
13429 Schrieffer's 13429 Schrieffer's
13430 Schroeder 13430 Schroeder
13431 Schroeder's 13431 Schroeder's
13432 -Schrödinger  
13433 -Schrödinger's 13432 +Schrodinger
  13433 +Schrodinger's
13434 Schubert 13434 Schubert
13435 Schultz 13435 Schultz
13436 Schultz's 13436 Schultz's
@@ -14498,7 +14498,7 @@ Szilard @@ -14498,7 +14498,7 @@ Szilard
14498 Szilard's 14498 Szilard's
14499 Szymborska 14499 Szymborska
14500 Szymborska's 14500 Szymborska's
14501 -Sèvres 14501 +Sevres
14502 T 14502 T
14503 T'ang 14503 T'ang
14504 T's 14504 T's
@@ -14621,8 +14621,8 @@ Tanisha @@ -14621,8 +14621,8 @@ Tanisha
14621 Tanisha's 14621 Tanisha's
14622 Tanner 14622 Tanner
14623 Tanner's 14623 Tanner's
14624 -Tannhäuser  
14625 -Tannhäuser's 14624 +Tannhauser
  14625 +Tannhauser's
14626 Tantalus 14626 Tantalus
14627 Tantalus's 14627 Tantalus's
14628 Tanya 14628 Tanya
@@ -14837,8 +14837,8 @@ Thespian @@ -14837,8 +14837,8 @@ Thespian
14837 Thespis 14837 Thespis
14838 Thespis's 14838 Thespis's
14839 Thessalonian 14839 Thessalonian
14840 -Thessaloníki  
14841 -Thessaloníki's 14840 +Thessaloniki
  14841 +Thessaloniki's
14842 Thessaly 14842 Thessaly
14843 Thessaly's 14843 Thessaly's
14844 Thieu 14844 Thieu
@@ -15464,7 +15464,7 @@ Valparaiso @@ -15464,7 +15464,7 @@ Valparaiso
15464 Valparaiso's 15464 Valparaiso's
15465 Valvoline 15465 Valvoline
15466 Valvoline's 15466 Valvoline's
15467 -Valéry 15467 +Valery
15468 Van 15468 Van
15469 Vance 15469 Vance
15470 Vancouver 15470 Vancouver
@@ -15520,9 +15520,9 @@ Velma @@ -15520,9 +15520,9 @@ Velma
15520 Velma's 15520 Velma's
15521 Velveeta 15521 Velveeta
15522 Velveeta's 15522 Velveeta's
15523 -Velásquez  
15524 -Velásquez's  
15525 -Velázquez 15523 +Velasquez
  15524 +Velasquez's
  15525 +Velazquez
15526 Venetian 15526 Venetian
15527 Venetian's 15527 Venetian's
15528 Venetians 15528 Venetians
@@ -16479,8 +16479,8 @@ Zyrtec @@ -16479,8 +16479,8 @@ Zyrtec
16479 Zyrtec's 16479 Zyrtec's
16480 Zyuganov 16480 Zyuganov
16481 Zyuganov's 16481 Zyuganov's
16482 -Zürich  
16483 -Zürich's 16482 +Zurich
  16483 +Zurich's
16484 a 16484 a
16485 aardvark 16485 aardvark
16486 aardvark's 16486 aardvark's
@@ -16535,9 +16535,9 @@ abbreviating @@ -16535,9 +16535,9 @@ abbreviating
16535 abbreviation 16535 abbreviation
16536 abbreviation's 16536 abbreviation's
16537 abbreviations 16537 abbreviations
16538 -abbé  
16539 -abbé's  
16540 -abbés 16538 +abbe
  16539 +abbe's
  16540 +abbes
16541 abdicate 16541 abdicate
16542 abdicated 16542 abdicated
16543 abdicates 16543 abdicates
@@ -17376,7 +17376,7 @@ adieu&#39;s @@ -17376,7 +17376,7 @@ adieu&#39;s
17376 adieus 17376 adieus
17377 adieux 17377 adieux
17378 adipose 17378 adipose
17379 -adiós 17379 +adios
17380 adjacent 17380 adjacent
17381 adjacently 17381 adjacently
17382 adjectival 17382 adjectival
@@ -19598,11 +19598,11 @@ applicator&#39;s @@ -19598,11 +19598,11 @@ applicator&#39;s
19598 applicators 19598 applicators
19599 applied 19599 applied
19600 applies 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 apply 19606 apply
19607 applying 19607 applying
19608 appoint 19608 appoint
@@ -20642,9 +20642,9 @@ attaching @@ -20642,9 +20642,9 @@ attaching
20642 attachment 20642 attachment
20643 attachment's 20643 attachment's
20644 attachments 20644 attachments
20645 -attaché  
20646 -attaché's  
20647 -attachés 20645 +attache
  20646 +attache's
  20647 +attaches
20648 attack 20648 attack
20649 attack's 20649 attack's
20650 attacked 20650 attacked
@@ -23491,7 +23491,7 @@ blastoff @@ -23491,7 +23491,7 @@ blastoff
23491 blastoff's 23491 blastoff's
23492 blastoffs 23492 blastoffs
23493 blasts 23493 blasts
23494 -blasé 23494 +blase
23495 blatant 23495 blatant
23496 blatantly 23496 blatantly
23497 blaze 23497 blaze
@@ -24510,9 +24510,9 @@ bout&#39;s @@ -24510,9 +24510,9 @@ bout&#39;s
24510 boutique 24510 boutique
24511 boutique's 24511 boutique's
24512 boutiques 24512 boutiques
24513 -boutonnière  
24514 -boutonnière's  
24515 -boutonnières 24513 +boutonniere
  24514 +boutonniere's
  24515 +boutonnieres
24516 bouts 24516 bouts
24517 bovine 24517 bovine
24518 bovine's 24518 bovine's
@@ -26129,9 +26129,9 @@ caffeine&#39;s @@ -26129,9 +26129,9 @@ caffeine&#39;s
26129 caftan 26129 caftan
26130 caftan's 26130 caftan's
26131 caftans 26131 caftans
26132 -café  
26133 -café's  
26134 -cafés 26132 +cafe
  26133 +cafe's
  26134 +cafes
26135 cage 26135 cage
26136 cage's 26136 cage's
26137 caged 26137 caged
@@ -26425,9 +26425,9 @@ can&#39;t @@ -26425,9 +26425,9 @@ can&#39;t
26425 canal 26425 canal
26426 canal's 26426 canal's
26427 canals 26427 canals
26428 -canapé  
26429 -canapé's  
26430 -canapés 26428 +canape
  26429 +canape's
  26430 +canapes
26431 canard 26431 canard
26432 canard's 26432 canard's
26433 canards 26433 canards
@@ -28804,12 +28804,12 @@ chutzpa @@ -28804,12 +28804,12 @@ chutzpa
28804 chutzpa's 28804 chutzpa's
28805 chutzpah 28805 chutzpah
28806 chutzpah's 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 cicada 28813 cicada
28814 cicada's 28814 cicada's
28815 cicadae 28815 cicadae
@@ -29312,10 +29312,10 @@ clew&#39;s @@ -29312,10 +29312,10 @@ clew&#39;s
29312 clewed 29312 clewed
29313 clewing 29313 clewing
29314 clews 29314 clews
29315 -cliché  
29316 -cliché's  
29317 -clichéd  
29318 -clichés 29315 +cliche
  29316 +cliche's
  29317 +cliched
  29318 +cliches
29319 click 29319 click
29320 click's 29320 click's
29321 clicked 29321 clicked
@@ -29324,9 +29324,9 @@ clicks @@ -29324,9 +29324,9 @@ clicks
29324 client 29324 client
29325 client's 29325 client's
29326 clients 29326 clients
29327 -clientèle  
29328 -clientèle's  
29329 -clientèles 29327 +clientele
  29328 +clientele's
  29329 +clienteles
29330 cliff 29330 cliff
29331 cliff's 29331 cliff's
29332 cliffhanger 29332 cliffhanger
@@ -31187,9 +31187,9 @@ confrontations @@ -31187,9 +31187,9 @@ confrontations
31187 confronted 31187 confronted
31188 confronting 31188 confronting
31189 confronts 31189 confronts
31190 -confrère  
31191 -confrère's  
31192 -confrères 31190 +confrere
  31191 +confrere's
  31192 +confreres
31193 confuse 31193 confuse
31194 confused 31194 confused
31195 confusedly 31195 confusedly
@@ -31483,8 +31483,8 @@ consolidation @@ -31483,8 +31483,8 @@ consolidation
31483 consolidation's 31483 consolidation's
31484 consolidations 31484 consolidations
31485 consoling 31485 consoling
31486 -consommé  
31487 -consommé's 31486 +consomme
  31487 +consomme's
31488 consonance 31488 consonance
31489 consonance's 31489 consonance's
31490 consonances 31490 consonances
@@ -32431,9 +32431,9 @@ cortical @@ -32431,9 +32431,9 @@ cortical
32431 cortices 32431 cortices
32432 cortisone 32432 cortisone
32433 cortisone's 32433 cortisone's
32434 -cortège  
32435 -cortège's  
32436 -cortèges 32434 +cortege
  32435 +cortege's
  32436 +corteges
32437 coruscate 32437 coruscate
32438 coruscated 32438 coruscated
32439 coruscates 32439 coruscates
@@ -33528,9 +33528,9 @@ crows @@ -33528,9 +33528,9 @@ crows
33528 crozier 33528 crozier
33529 crozier's 33529 crozier's
33530 croziers 33530 croziers
33531 -croûton  
33532 -croûton's  
33533 -croûtons 33531 +crouton
  33532 +crouton's
  33533 +croutons
33534 crucial 33534 crucial
33535 crucially 33535 crucially
33536 crucible 33536 crucible
@@ -33564,8 +33564,8 @@ crudest @@ -33564,8 +33564,8 @@ crudest
33564 crudities 33564 crudities
33565 crudity 33565 crudity
33566 crudity's 33566 crudity's
33567 -crudités  
33568 -crudités's 33567 +crudites
  33568 +crudites's
33569 cruel 33569 cruel
33570 crueler 33570 crueler
33571 cruelest 33571 cruelest
@@ -33693,9 +33693,9 @@ crystallizing @@ -33693,9 +33693,9 @@ crystallizing
33693 crystallographic 33693 crystallographic
33694 crystallography 33694 crystallography
33695 crystals 33695 crystals
33696 -crèche  
33697 -crèche's  
33698 -crèches 33696 +creche
  33697 +creche's
  33698 +creches
33699 cs 33699 cs
33700 cub 33700 cub
33701 cub's 33701 cub's
@@ -35901,9 +35901,9 @@ derricks @@ -35901,9 +35901,9 @@ derricks
35901 derringer 35901 derringer
35902 derringer's 35902 derringer's
35903 derringers 35903 derringers
35904 -derrière  
35905 -derrière's  
35906 -derrières 35904 +derriere
  35905 +derriere's
  35906 +derrieres
35907 dervish 35907 dervish
35908 dervish's 35908 dervish's
35909 dervishes 35909 dervishes
@@ -37991,9 +37991,9 @@ divorce&#39;s @@ -37991,9 +37991,9 @@ divorce&#39;s
37991 divorced 37991 divorced
37992 divorces 37992 divorces
37993 divorcing 37993 divorcing
37994 -divorcée  
37995 -divorcée's  
37996 -divorcées 37994 +divorcee
  37995 +divorcee's
  37996 +divorcees
37997 divot 37997 divot
37998 divot's 37998 divot's
37999 divots 37999 divots
@@ -39280,15 +39280,15 @@ dyspepsia&#39;s @@ -39280,15 +39280,15 @@ dyspepsia&#39;s
39280 dyspeptic 39280 dyspeptic
39281 dyspeptic's 39281 dyspeptic's
39282 dyspeptics 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 e 39292 e
39293 e'er 39293 e'er
39294 eBay 39294 eBay
@@ -40950,9 +40950,9 @@ entry&#39;s @@ -40950,9 +40950,9 @@ entry&#39;s
40950 entryway 40950 entryway
40951 entryway's 40951 entryway's
40952 entryways 40952 entryways
40953 -entrée  
40954 -entrée's  
40955 -entrées 40953 +entree
  40954 +entree's
  40955 +entrees
40956 entwine 40956 entwine
40957 entwined 40957 entwined
40958 entwines 40958 entwines
@@ -43435,12 +43435,12 @@ fez @@ -43435,12 +43435,12 @@ fez
43435 fez's 43435 fez's
43436 fezes 43436 fezes
43437 fezzes 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 fiasco 43444 fiasco
43445 fiasco's 43445 fiasco's
43446 fiascoes 43446 fiascoes
@@ -44081,9 +44081,9 @@ flamboyance @@ -44081,9 +44081,9 @@ flamboyance
44081 flamboyance's 44081 flamboyance's
44082 flamboyant 44082 flamboyant
44083 flamboyantly 44083 flamboyantly
44084 -flambé  
44085 -flambé's  
44086 -flambéed 44084 +flambe
  44085 +flambe's
  44086 +flambeed
44087 flame 44087 flame
44088 flame's 44088 flame's
44089 flamed 44089 flamed
@@ -45530,8 +45530,8 @@ franks @@ -45530,8 +45530,8 @@ franks
45530 frantic 45530 frantic
45531 frantically 45531 frantically
45532 frappes 45532 frappes
45533 -frappé  
45534 -frappé's 45533 +frappe
  45534 +frappe's
45535 frat 45535 frat
45536 frat's 45536 frat's
45537 fraternal 45537 fraternal
@@ -46250,9 +46250,9 @@ fuzziness @@ -46250,9 +46250,9 @@ fuzziness
46250 fuzziness's 46250 fuzziness's
46251 fuzzing 46251 fuzzing
46252 fuzzy 46252 fuzzy
46253 -fête  
46254 -fête's  
46255 -fêtes 46253 +fete
  46254 +fete's
  46255 +fetes
46256 g 46256 g
46257 gab 46257 gab
46258 gab's 46258 gab's
@@ -49039,9 +49039,9 @@ habituates @@ -49039,9 +49039,9 @@ habituates
49039 habituating 49039 habituating
49040 habituation 49040 habituation
49041 habituation's 49041 habituation's
49042 -habitué  
49043 -habitué's  
49044 -habitués 49042 +habitue
  49043 +habitue's
  49044 +habitues
49045 hacienda 49045 hacienda
49046 hacienda's 49046 hacienda's
49047 haciendas 49047 haciendas
@@ -53897,9 +53897,9 @@ ingress @@ -53897,9 +53897,9 @@ ingress
53897 ingress's 53897 ingress's
53898 ingresses 53898 ingresses
53899 ingrown 53899 ingrown
53900 -ingénue  
53901 -ingénue's  
53902 -ingénues 53900 +ingenue
  53901 +ingenue's
  53902 +ingenues
53903 inhabit 53903 inhabit
53904 inhabitable 53904 inhabitable
53905 inhabitant 53905 inhabitant
@@ -55511,9 +55511,9 @@ jailor @@ -55511,9 +55511,9 @@ jailor
55511 jailor's 55511 jailor's
55512 jailors 55512 jailors
55513 jails 55513 jails
55514 -jalapeño  
55515 -jalapeño's  
55516 -jalapeños 55514 +jalapeno
  55515 +jalapeno's
  55516 +jalapenos
55517 jalopies 55517 jalopies
55518 jalopy 55518 jalopy
55519 jalopy's 55519 jalopy's
@@ -55552,9 +55552,9 @@ japes @@ -55552,9 +55552,9 @@ japes
55552 japing 55552 japing
55553 jar 55553 jar
55554 jar's 55554 jar's
55555 -jardinière  
55556 -jardinière's  
55557 -jardinières 55555 +jardiniere
  55556 +jardiniere's
  55557 +jardinieres
55558 jargon 55558 jargon
55559 jargon's 55559 jargon's
55560 jarred 55560 jarred
@@ -56503,9 +56503,9 @@ kindergartener @@ -56503,9 +56503,9 @@ kindergartener
56503 kindergartener's 56503 kindergartener's
56504 kindergarteners 56504 kindergarteners
56505 kindergartens 56505 kindergartens
56506 -kindergärtner  
56507 -kindergärtner's  
56508 -kindergärtners 56506 +kindergartner
  56507 +kindergartner's
  56508 +kindergartners
56509 kindest 56509 kindest
56510 kindhearted 56510 kindhearted
56511 kindle 56511 kindle
@@ -56791,9 +56791,9 @@ kroner @@ -56791,9 +56791,9 @@ kroner
56791 kronor 56791 kronor
56792 krypton 56792 krypton
56793 krypton's 56793 krypton's
56794 -króna  
56795 -króna's  
56796 -krónur 56794 +krona
  56795 +krona's
  56796 +kronur
56797 ks 56797 ks
56798 kudos 56798 kudos
56799 kudos's 56799 kudos's
@@ -59450,8 +59450,8 @@ mackinaws @@ -59450,8 +59450,8 @@ mackinaws
59450 mackintosh 59450 mackintosh
59451 mackintosh's 59451 mackintosh's
59452 mackintoshes 59452 mackintoshes
59453 -macramé  
59454 -macramé's 59453 +macrame
  59454 +macrame's
59455 macro 59455 macro
59456 macro's 59456 macro's
59457 macrobiotic 59457 macrobiotic
@@ -60034,7 +60034,7 @@ manorial @@ -60034,7 +60034,7 @@ manorial
60034 manors 60034 manors
60035 manpower 60035 manpower
60036 manpower's 60036 manpower's
60037 -manqué 60037 +manque
60038 mans 60038 mans
60039 mansard 60039 mansard
60040 mansard's 60040 mansard's
@@ -60100,8 +60100,8 @@ manuscript&#39;s @@ -60100,8 +60100,8 @@ manuscript&#39;s
60100 manuscripts 60100 manuscripts
60101 many 60101 many
60102 many's 60102 many's
60103 -manège  
60104 -manège's 60103 +manege
  60104 +manege's
60105 map 60105 map
60106 map's 60106 map's
60107 maple 60107 maple
@@ -60531,9 +60531,9 @@ mathematics&#39;s @@ -60531,9 +60531,9 @@ mathematics&#39;s
60531 mating 60531 mating
60532 matins 60532 matins
60533 matins's 60533 matins's
60534 -matinée  
60535 -matinée's  
60536 -matinées 60534 +matinee
  60535 +matinee's
  60536 +matinees
60537 matriarch 60537 matriarch
60538 matriarch's 60538 matriarch's
60539 matriarchal 60539 matriarchal
@@ -60601,8 +60601,8 @@ matzohs @@ -60601,8 +60601,8 @@ matzohs
60601 matzos 60601 matzos
60602 matzot 60602 matzot
60603 matzoth 60603 matzoth
60604 -matériel  
60605 -matériel's 60604 +materiel
  60605 +materiel's
60606 maudlin 60606 maudlin
60607 maul 60607 maul
60608 maul's 60608 maul's
@@ -63781,12 +63781,12 @@ mythologists @@ -63781,12 +63781,12 @@ mythologists
63781 mythology 63781 mythology
63782 mythology's 63782 mythology's
63783 myths 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 n 63790 n
63791 nab 63791 nab
63792 nabbed 63792 nabbed
@@ -63825,8 +63825,8 @@ naively @@ -63825,8 +63825,8 @@ naively
63825 naiver 63825 naiver
63826 naivest 63826 naivest
63827 naivety 63827 naivety
63828 -naiveté  
63829 -naiveté's 63828 +naivete
  63829 +naivete's
63830 naked 63830 naked
63831 nakedly 63831 nakedly
63832 nakedness 63832 nakedness
@@ -65309,7 +65309,7 @@ nymphomaniac @@ -65309,7 +65309,7 @@ nymphomaniac
65309 nymphomaniac's 65309 nymphomaniac's
65310 nymphomaniacs 65310 nymphomaniacs
65311 nymphs 65311 nymphs
65312 -née 65312 +nee
65313 o 65313 o
65314 o'clock 65314 o'clock
65315 o'er 65315 o'er
@@ -66642,7 +66642,7 @@ outright @@ -66642,7 +66642,7 @@ outright
66642 outrun 66642 outrun
66643 outrunning 66643 outrunning
66644 outruns 66644 outruns
66645 -outré 66645 +outre
66646 outs 66646 outs
66647 outsell 66647 outsell
66648 outselling 66648 outselling
@@ -68175,7 +68175,7 @@ passports @@ -68175,7 +68175,7 @@ passports
68175 password 68175 password
68176 password's 68176 password's
68177 passwords 68177 passwords
68178 -passé 68178 +passe
68179 past 68179 past
68180 past's 68180 past's
68181 pasta 68181 pasta
@@ -73305,9 +73305,9 @@ protuberance @@ -73305,9 +73305,9 @@ protuberance
73305 protuberance's 73305 protuberance's
73306 protuberances 73306 protuberances
73307 protuberant 73307 protuberant
73308 -protégé  
73309 -protégé's  
73310 -protégés 73308 +protege
  73309 +protege's
  73310 +proteges
73311 proud 73311 proud
73312 prouder 73312 prouder
73313 proudest 73313 proudest
@@ -73413,10 +73413,10 @@ prurient @@ -73413,10 +73413,10 @@ prurient
73413 pry 73413 pry
73414 pry's 73414 pry's
73415 prying 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 psalm 73420 psalm
73421 psalm's 73421 psalm's
73422 psalmist 73422 psalmist
@@ -75460,7 +75460,7 @@ recheck&#39;s @@ -75460,7 +75460,7 @@ recheck&#39;s
75460 rechecked 75460 rechecked
75461 rechecking 75461 rechecking
75462 rechecks 75462 rechecks
75463 -recherché 75463 +recherche
75464 recidivism 75464 recidivism
75465 recidivism's 75465 recidivism's
75466 recidivist 75466 recidivist
@@ -78302,7 +78302,7 @@ riskiness&#39;s @@ -78302,7 +78302,7 @@ riskiness&#39;s
78302 risking 78302 risking
78303 risks 78303 risks
78304 risky 78304 risky
78305 -risqué 78305 +risque
78306 rite 78306 rite
78307 rite's 78307 rite's
78308 rites 78308 rites
@@ -78775,9 +78775,9 @@ routinized @@ -78775,9 +78775,9 @@ routinized
78775 routinizes 78775 routinizes
78776 routinizing 78776 routinizing
78777 routs 78777 routs
78778 -roué  
78779 -roué's  
78780 -roués 78778 +roue
  78779 +roue's
  78780 +roues
78781 rove 78781 rove
78782 roved 78782 roved
78783 rover 78783 rover
@@ -79757,11 +79757,11 @@ sausage @@ -79757,11 +79757,11 @@ sausage
79757 sausage's 79757 sausage's
79758 sausages 79758 sausages
79759 sauted 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 savage 79765 savage
79766 savage's 79766 savage's
79767 savaged 79767 savaged
@@ -83906,9 +83906,9 @@ smuts @@ -83906,9 +83906,9 @@ smuts
83906 smuttier 83906 smuttier
83907 smuttiest 83907 smuttiest
83908 smutty 83908 smutty
83909 -smörgåsbord  
83910 -smörgåsbord's  
83911 -smörgåsbords 83909 +smorgasbord
  83910 +smorgasbord's
  83911 +smorgasbords
83912 snack 83912 snack
83913 snack's 83913 snack's
83914 snacked 83914 snacked
@@ -84377,9 +84377,9 @@ soil&#39;s @@ -84377,9 +84377,9 @@ soil&#39;s
84377 soiled 84377 soiled
84378 soiling 84378 soiling
84379 soils 84379 soils
84380 -soirée  
84381 -soirée's  
84382 -soirées 84380 +soiree
  84381 +soiree's
  84382 +soirees
84383 sojourn 84383 sojourn
84384 sojourn's 84384 sojourn's
84385 sojourned 84385 sojourned
@@ -84700,9 +84700,9 @@ sou&#39;wester @@ -84700,9 +84700,9 @@ sou&#39;wester
84700 soubriquet 84700 soubriquet
84701 soubriquet's 84701 soubriquet's
84702 soubriquets 84702 soubriquets
84703 -soufflé  
84704 -soufflé's  
84705 -soufflés 84703 +souffle
  84704 +souffle's
  84705 +souffles
84706 sough 84706 sough
84707 sough's 84707 sough's
84708 soughed 84708 soughed
@@ -84746,9 +84746,9 @@ soupiest @@ -84746,9 +84746,9 @@ soupiest
84746 souping 84746 souping
84747 soups 84747 soups
84748 soupy 84748 soupy
84749 -soupçon  
84750 -soupçon's  
84751 -soupçons 84749 +soupcon
  84750 +soupcon's
  84751 +soupcons
84752 sour 84752 sour
84753 sour's 84753 sour's
84754 source 84754 source
@@ -89033,9 +89033,9 @@ systemic&#39;s @@ -89033,9 +89033,9 @@ systemic&#39;s
89033 systemics 89033 systemics
89034 systems 89034 systems
89035 systolic 89035 systolic
89036 -séance  
89037 -séance's  
89038 -séances 89036 +seance
  89037 +seance's
  89038 +seances
89039 t 89039 t
89040 tab 89040 tab
89041 tab's 89041 tab's
@@ -91621,7 +91621,7 @@ touchstone @@ -91621,7 +91621,7 @@ touchstone
91621 touchstone's 91621 touchstone's
91622 touchstones 91622 touchstones
91623 touchy 91623 touchy
91624 -touché 91624 +touche
91625 tough 91625 tough
91626 tough's 91626 tough's
91627 toughen 91627 toughen
@@ -95864,9 +95864,9 @@ victualing @@ -95864,9 +95864,9 @@ victualing
95864 victualled 95864 victualled
95865 victualling 95865 victualling
95866 victuals 95866 victuals
95867 -vicuña  
95868 -vicuña's  
95869 -vicuñas 95867 +vicuna
  95868 +vicuna's
  95869 +vicunas
95870 video 95870 video
95871 video's 95871 video's
95872 videocassette 95872 videocassette
@@ -99152,20 +99152,20 @@ zwieback&#39;s @@ -99152,20 +99152,20 @@ zwieback&#39;s
99152 zygote 99152 zygote
99153 zygote's 99153 zygote's
99154 zygotes 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.txt deleted
@@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
1 -  
2 -voir  
3 -  
4 -voile  
5 -visage  
words1.txt~ deleted
@@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
1 -  
2 -voir  
3 -visage  
4 -voile  
5 -  
words1~ deleted
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -voir  
2 \ No newline at end of file 0 \ No newline at end of file