LEXEDCopyright (c) 2006-2008 Université Bordeaux 1 - Inria Bordeaux - LaBRI Méthodes FormellesLionel Clément LexedUn lexicaliseurCet outil permet de rechercher l'entrée d'un dictionnaire à partir d'une vedette. L'algorithme basé des automates est particulièrement rapide, il est une bonne alternative aux tables de hachage. Mode interactif, mode Client/Server ou bibliothèque C++. Téléchargement du programme lexed: CompilationPour installer sous unix taper./configure [--prefix=<directory>] make sudo make install make clean UtilisationPour aidelexed -hman lexed Pour construire un automatelexed [ -d <nom de répertoire> ] [ -p <nom du préfixe des fichiers > ] build <lexique>Le lexique contient sur chaque ligne le mot suivi d'un caractère séparateur (tabulation par défaut), suivi de l'information assortie au mot. "./" est le répertoire par défaut. "lexicon(.fsa, .tbl)" est le nom du fichier par défaut. Pour exploiter le lexiquelexed [ -d <nom de répertoire> ] [ -p <nom du fichier> ] [ -f <pref> <or> <suff> <uw> ] consult < inputfile > outputfileinputfile contient un mot à reconnaître par ligne Autres options[ -P <port> ] Numéro du port de connexion TCP/IP.[ -i ] Mode indexation seulement. [ -F ] Les informations du dictionnaire ne sont pas chargées en mémoire mais lues sur fichier. [ -t <char> ] Caractère délimiteur de champs. [ -r <search> <replace> -s <number> ] Nombre et caractères commutables pour une recherche approximative. [ -a <number> ] Nombre de caractères à ajouter pour une recherche approximative. [ -e <number> ] Nombre de caractères à effacer pour une recherche approximative. Un exemple d'utilisation dans un programme C++Compilation :$c++ `lexed-config --cflags --libs` foo.ccExecution :$echo "mot1 1mot2 2 mot1 3" | lexed build $./a.out lexicon.fsa lexicon.tbl mot1 Fichier foo.cc#include <lexedtree.h>extern TYPEPTR LexedInitial; extern int LexedIndexation; extern int LexedMemory; extern char *LexedBuffer; int main (int argn, char **argv) { FILE *Fichier, *FichierTbl; Fichier = fopen(argv[1], "r"); long unsigned int Taille; TYPEPTR Offset; // On veut charger les données en mémoire LexedMemory=1; // Chargement de l'automate if (Fichier == NULL){ fprintf(stderr, "File not found\n"); exit (0); } else{ if (!LoadFSA(Fichier)){ fprintf(stderr, "error while loading file\n"); fclose (Fichier); exit (0); } else { fclose (Fichier); } } // Chargement des données... if (LexedMemory){ fputs("*** Load File\n", stderr); FichierTbl = fopen (argv[2], "r"); if (FichierTbl){ fseek (FichierTbl, 0, SEEK_END); Taille = ftell(FichierTbl); rewind (FichierTbl); LexedBuffer = new char [Taille]; LexedBuffer[0]=0; fread (LexedBuffer, 1, Taille, FichierTbl); fclose (FichierTbl); }else{ fprintf (stderr, "File not found\n"); return 1; } } // ... ou consultation directe dans fichier else { fputs("*** Open file\n", stderr); FichierTbl = fopen (argv[2], "r"); } // recherche d'un mot Offset=SearchStatic(LexedInitial, argv[3]); // affichage des données associées à ce mot if ((Offset==(TYPEPTR)~0UL)){ printf ("Unknown word\n"); } else { int ResultSize=0; int ResultIndex=0; char **Result=NULL; char **strings; sPrintResults(Offset, &Result, &ResultSize, &ResultIndex, FichierTbl); for (strings=Result; ResultIndex; strings++, ResultIndex--){ printf("%s\n", *strings); free(*strings); } } if (!LexedMemory) fclose (FichierTbl); return 0; } |