Blame view
tools/lia_ltbox/lia_phon/src/tagg/QuickTagg.c
4.11 KB
e6be5137b
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
/* -------------------------------------------------------- LIA_PHON : Un systeme complet de phonetisation de textes -------------------------------------------------------- Copyright (C) 2001 FREDERIC BECHET .................................................................. This file is part of LIA_PHON LIA_PHON is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA .................................................................. For any publication related to scientific work using LIA_PHON, the following reference paper must be mentioned in the bibliography: Bechet F., 2001, "LIA_PHON - Un systeme complet de phonetisation de textes", revue Traitement Automatique des Langues (T.A.L.) volume 42, numero 1/2001, edition Hermes .................................................................. Contact : FREDERIC BECHET - LIA - UNIVERSITE D'AVIGNON AGROPARC BP1228 84911 AVIGNON CEDEX 09 FRANCE frederic.bechet@lia.univ-avignon.fr .................................................................. */ /* QUICKTAGG : un tagger simple et convivial !! Entree : stdin Sortie : stdout FRED 0299 - MODIF 1199 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <math.h> #include <libgram.h> #include <quicktagg_lib.h> #define TailleLigne 2000 /* Stockage de la phrase */ #define MaxMots 2000 char *Phrase[MaxMots]; void ERREUR(char *ch1, char *ch2) { fprintf(stderr,"ERREUR: %s %s ",ch1,ch2); exit(0); } int main(argc,argv) int argc; char **argv; { char ch[TailleLigne],*pt,*lextag=NULL,*lexgraf=NULL,*ml=NULL,*morpho=NULL,*pmc=NULL; int i,indice,nb_phrase,num_modele,nb_in,nb_out,si_af_proba=0; float proba; ty_lexique lexigraf; if ((argc<2)||(!strcmp(argv[1],"-h"))) { fprintf(stderr,"Syntaxe : QuickTagg [-h] -lextag <dico tags> -lexgraf <dicograf> -ml <ml 3gram> \ -pmc <modele pmc> -morpho <ml morpho> [-proba] "); exit(0); } for(i=1;i<argc;i++) { if (!strcmp(argv[i],"-lextag")) { if (i==argc-1) ERREUR("missing value after:",argv[i]); lextag=argv[++i]; } else if (!strcmp(argv[i],"-lexgraf")) { if (i==argc-1) ERREUR("missing value after:",argv[i]); lexgraf=argv[++i]; } else if (!strcmp(argv[i],"-ml")) { if (i==argc-1) ERREUR("missing value after:",argv[i]); ml=argv[++i]; } else if (!strcmp(argv[i],"-pmc")) { if (i==argc-1) ERREUR("missing value after:",argv[i]); pmc=argv[++i]; } else if (!strcmp(argv[i],"-morpho")) { if (i==argc-1) ERREUR("missing value after:",argv[i]); morpho=argv[++i]; } else if (!strcmp(argv[i],"-morpho")) si_af_proba=1; else { ERREUR("unknown parameter:",argv[i]); } } init_quicktagg(lextag,morpho,ml,pmc,&num_modele,lexgraf,&lexigraf); indice=0; nb_in=nb_out=0; for (nb_phrase=0;fgets(ch,MaxMots,stdin);) for(pt=strtok(ch," \t ");pt;pt=strtok(NULL," \t ")) { Phrase[indice++]=strdup(pt); if ((indice==MaxMots)||(!strcmp(pt,"</s>"))) { proba=tagg_phrase(indice,Phrase,num_modele,stdout,&nb_in,&nb_out,lexigraf); if (si_af_proba) printf("SCORE_3CLASS=%.2lf\tPROP_MOTINC=%.2lf ", proba/(float)indice,nb_out>0?log10((double)nb_out/(double)(nb_in+nb_out)):-99.99); nb_in=nb_out=0; for(i=0;i<indice;i++) free(Phrase[i]); indice=0; nb_phrase++; if (nb_phrase%100==0) fprintf(stderr,"\tEn cours : phrase %d ",nb_phrase); } } if (DevinMorpho) LibereModelMorpho(); delete_lexique(lexigraf); gram_module_reset(num_modele,0); exit(0); } |