Commit 974b1ae48c01746c87545632b597356e73088ec4

Authored by tvolleri
1 parent 73e92d24

ajout des fichiers du projet.

Makefile 0 → 100644
... ... @@ -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   -# 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 @@
  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   -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 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

phrase_avec_fautes 0 → 100644
... ... @@ -0,0 +1 @@
  1 +Sandra and Bety ae sittinges in te park, Sandra asks Betty
... ...
phrase_type 0 → 100644
... ... @@ -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
tree.h 0 → 100644
... ... @@ -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&#39;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&#39;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&#39;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&#39;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 Facebook
... ... @@ -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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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&#39;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.txt deleted
... ... @@ -1,5 +0,0 @@
1   -
2   -voir
3   -
4   -voile
5   -visage
words1.txt~ deleted
... ... @@ -1,5 +0,0 @@
1   -
2   -voir
3   -visage
4   -voile
5   -
words1~ deleted
... ... @@ -1 +0,0 @@
1   -voir
2 0 \ No newline at end of file