Accueil > > > ANALYSE DES MOTS D'UN TEXTE
ANALYSE DES MOTS D'UN TEXTE
Information sur la source
Description
C'est un petit programme qui analyser un texte et afficher tous les mots qui sont dans le dictionnaire, et va ensuite afficher tous les noms propres (comme marseille, john...) C'est le début d'un projet (que je ne connais pas encore), si vous avez des idées pour développer un peu ce programme, et en faire la base de quelque chose de plus grand, n'hésitez pas à m'apporter vos suggestions !
Source
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include "stdbi.h"
- #include "lex.yy.c"
-
- extern char lexeme[];
- extern int valeur;
-
- typedef struct { //Structure du dictionnaire
- char* mot;
- int occ;
- }sdico;
-
- typedef struct { //Structure du texte
- char *mot;
- int *nombre;
- int type; //0 : mot dans le dico, 1 : pas dans le dico, 2 : entier
- } stexte;
-
- void lexeme_minuscule() //Convertit lexeme en minuscule
- {
- int taille, i;
- taille=strlen(lexeme);
- for(i=0;i<taille;i++)
- lexeme[i]=tolower(lexeme[i]);
- return;
- }
-
- /*int present(sdico *dico, int taille) //Renvoie si lexeme est présent dans le dico
- {
- int i;
- for(i=0;i<taille;i++)
- {
- if(strcmp(dico[i].mot,lexeme) == 0)
- return i;
- }
- return 0;
- }*/
-
-
- int present(sdico *dico, int inf, int sup) //Fonction dichotomique
- {
-
- int milieu;
-
- if (sup<inf)
- return -1;
-
- milieu = ((inf + sup)/2);
-
- if ( strcmp(lexeme, dico[milieu].mot) == 0 )
- return milieu;
- if ( strcmp(lexeme, dico[milieu].mot) < 0 )
- return(present(dico, inf, milieu-1));
- return(present(dico, milieu+1, sup));
-
- }
-
- int main(int argc, char** argv)
- {
- /*VARIABLES*/
- int uc, i=0, tdico=0, ttexte=0, taille, temp;
-
- /*STRUCTURES*/
- sdico *dico;
- stexte *texte;
- dico=malloc(1*sizeof(sdico));
- texte=malloc(1*sizeof(stexte));
-
- /*TEST DES ARGUMENTS*/
- if(argc<=1) { fprintf(stderr, "absence de fichier source\n"); exit(1); } //Test du fichier source
-
- /*REDIRECTION DE L'ENTREE YYIN DANS LE DICTIONNAIRE*/
- yyin=fopen("dico.dic","r");
-
- /*STOCKAGE DU DICTIONNAIRE DANS LA STRUCTURE DICO*/
- uc=yylex();
- while(uc!=0)
- {
- if(uc==NOMBRE)
- printf("%d : NOMBRE\n", valeur);
- else if(uc==MOT)
- {
- taille=strlen(lexeme)+1;
- dico=realloc(dico,++i*sizeof(sdico));
- dico[i-1].mot=malloc(sizeof(char)*taille);
- strcpy(dico[i-1].mot, lexeme);
- }
-
- uc=yylex();
- }
- tdico=i;
-
- /*REDIRECTION DE L'ENTREE YYIN DANS LE DICTIONNAIRE*/
- if( (yyin=fopen(argv[1],"r")) == 0 )
- { fprintf(stderr, "fichier source inexistant\n"); exit(1); }
-
-
- /*STOCKAGE DU TEXTE DANS LA STRUCTURE TEXTE*/
- uc=yylex();
- while(uc!=0)
- {
-
-
- if(uc==MOT)
- {
- texte=realloc(texte,++ttexte*sizeof(stexte));
- lexeme_minuscule(); //Transforme lexeme en minuscule
-
- texte[ttexte-1].mot=malloc( strlen(lexeme)+1 * sizeof(char) );
-
- if( (temp=present(dico, 0, tdico)) != 0 ) //Si lexeme est un mot connu
- texte[ttexte-1].type=0;
-
- else //Si lexeme n'est pas un mot connu
- texte[ttexte-1].type=1;
-
- strcpy(texte[ttexte-1].mot, lexeme);
- //puts(lexeme);
- }
- else if(uc==NOMBRE)
- {
- texte=realloc(texte,++ttexte*sizeof(stexte));
- texte[ttexte-1].nombre=malloc(sizeof(int));
-
- texte[ttexte-1].nombre[0]=valeur;
-
- texte[ttexte-1].type=2;
- }
- uc=yylex();
- }
-
-
- /*AFFICHAGE*/
- for(i=0;i<ttexte;i++)
- {
- printf("%d : ",i);
- if(texte[i].type == 2)
- printf("%d : %d\n", texte[i].nombre[0], texte[i].type);
- else
- printf("%s : %d\n", texte[i].mot, texte[i].type);
-
- }
-
-
- /*LIBERATION DE LA MEMOIRE*/
- free(dico);
- free(texte);
-
- return 0;
- }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stdbi.h"
#include "lex.yy.c"
extern char lexeme[];
extern int valeur;
typedef struct { //Structure du dictionnaire
char* mot;
int occ;
}sdico;
typedef struct { //Structure du texte
char *mot;
int *nombre;
int type; //0 : mot dans le dico, 1 : pas dans le dico, 2 : entier
} stexte;
void lexeme_minuscule() //Convertit lexeme en minuscule
{
int taille, i;
taille=strlen(lexeme);
for(i=0;i<taille;i++)
lexeme[i]=tolower(lexeme[i]);
return;
}
/*int present(sdico *dico, int taille) //Renvoie si lexeme est présent dans le dico
{
int i;
for(i=0;i<taille;i++)
{
if(strcmp(dico[i].mot,lexeme) == 0)
return i;
}
return 0;
}*/
int present(sdico *dico, int inf, int sup) //Fonction dichotomique
{
int milieu;
if (sup<inf)
return -1;
milieu = ((inf + sup)/2);
if ( strcmp(lexeme, dico[milieu].mot) == 0 )
return milieu;
if ( strcmp(lexeme, dico[milieu].mot) < 0 )
return(present(dico, inf, milieu-1));
return(present(dico, milieu+1, sup));
}
int main(int argc, char** argv)
{
/*VARIABLES*/
int uc, i=0, tdico=0, ttexte=0, taille, temp;
/*STRUCTURES*/
sdico *dico;
stexte *texte;
dico=malloc(1*sizeof(sdico));
texte=malloc(1*sizeof(stexte));
/*TEST DES ARGUMENTS*/
if(argc<=1) { fprintf(stderr, "absence de fichier source\n"); exit(1); } //Test du fichier source
/*REDIRECTION DE L'ENTREE YYIN DANS LE DICTIONNAIRE*/
yyin=fopen("dico.dic","r");
/*STOCKAGE DU DICTIONNAIRE DANS LA STRUCTURE DICO*/
uc=yylex();
while(uc!=0)
{
if(uc==NOMBRE)
printf("%d : NOMBRE\n", valeur);
else if(uc==MOT)
{
taille=strlen(lexeme)+1;
dico=realloc(dico,++i*sizeof(sdico));
dico[i-1].mot=malloc(sizeof(char)*taille);
strcpy(dico[i-1].mot, lexeme);
}
uc=yylex();
}
tdico=i;
/*REDIRECTION DE L'ENTREE YYIN DANS LE DICTIONNAIRE*/
if( (yyin=fopen(argv[1],"r")) == 0 )
{ fprintf(stderr, "fichier source inexistant\n"); exit(1); }
/*STOCKAGE DU TEXTE DANS LA STRUCTURE TEXTE*/
uc=yylex();
while(uc!=0)
{
if(uc==MOT)
{
texte=realloc(texte,++ttexte*sizeof(stexte));
lexeme_minuscule(); //Transforme lexeme en minuscule
texte[ttexte-1].mot=malloc( strlen(lexeme)+1 * sizeof(char) );
if( (temp=present(dico, 0, tdico)) != 0 ) //Si lexeme est un mot connu
texte[ttexte-1].type=0;
else //Si lexeme n'est pas un mot connu
texte[ttexte-1].type=1;
strcpy(texte[ttexte-1].mot, lexeme);
//puts(lexeme);
}
else if(uc==NOMBRE)
{
texte=realloc(texte,++ttexte*sizeof(stexte));
texte[ttexte-1].nombre=malloc(sizeof(int));
texte[ttexte-1].nombre[0]=valeur;
texte[ttexte-1].type=2;
}
uc=yylex();
}
/*AFFICHAGE*/
for(i=0;i<ttexte;i++)
{
printf("%d : ",i);
if(texte[i].type == 2)
printf("%d : %d\n", texte[i].nombre[0], texte[i].type);
else
printf("%s : %d\n", texte[i].mot, texte[i].type);
}
/*LIBERATION DE LA MEMOIRE*/
free(dico);
free(texte);
return 0;
}
Conclusion
J'ai aussi codé un peu en lex (essayez c'est tout simple et tres puissant) pour la liste des mots.
Executable sous linux de la maniere : ./main fichier : avec fichier qui le texte a analyser
Télécharger le dictionnaire sur : http://www.pallier.org/ressources/dicofr/liste.de. mots.francais.frgut.txt Et renommer le dans votre dossier dico.dic
Historique
- 16 février 2008 19:48:07 :
- structure améliorée
- 16 février 2008 19:52:45 :
- Meilleur commentaire
- 16 février 2008 22:54:38 :
- recherche dichotomique
- 16 février 2008 23:06:43 :
- ajout du fichier lex.yy.c (génération du fichier analyse.lex)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
sauvegarde de fichier txt sur 30 premier caractere [ par Goorou ]
besoin daide jexplique ce code set pour creer un fichier texte mais jaimerais que les caractere qui serons ecris dans le fichier sois les 30 premiere
rechercher chaine de caractere dans texte [ par melkiorlenecrarque ]
Bonjour! Je dois rechercher une chaine de caractere dans un buffer, Quelle est la maniere la plus optimisée, sachant que je programme avec les a
Insertion texte dans un fichier [ par jeremy85rocher ]
Bonjour à tous.Mon problème est le suivant : je souhaite créer un programme console qui permet d'inserer du texte dans un fichier
Donner un nom à un fichier texte en C++ lors de sa création [ par nanettelmontpel ]
Bonjour!!Bon ben je crois que le titre résume bien la chose....Voilà j'aimerais dans mon programme que lors de la création d'un fichier
Fstream [ par tobratus ]
Bonjour tout le monde, Voici en substance le problème. Je lis un fichier texte avec certaines données binaires en mode texte. La lecture s
Ecrire sur une bitmap [ par Mastersam ]
Bonjour je cherche comment écrire du texte sur une bitmap. J'ai une idée de la méthode à utiliser, j'ai pensé à écrire dans un static texte puis récup
Imprimer un texte en vertical [ par themaste ]
Salut a tous!Voila, je suis un un petit programme d'impression, et j'aimerais pouvoir ecrire en vertical.J'utilise les fonctions des CDC comme textout
Afficher texte sous titrage films [ par forthomme ]
Bonjour,J'ai besoin de créer et d'afficher un sous titrage pour un film étranger à des fins personnelles (ma copine ne parle pas anglai
créer un fichier texte dont le nom est une date [ par billybob13 ]
J'aimerai créer un fichier texte, avec fopen. Mais le nom du fichier doit être une date du moment (now).Je ne vois pas comment faire.
Envoyer du texte [ par razord ]
Bonjour. Je voudrais faire un programme serveur qui attend une connection, et un programme client qui va se connecter au serveur, et qui va lui envoye
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Forum
ARBRE BINAIREARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|