LEXED

Copyright (c) 2006-2008 Université Bordeaux 1 - Inria Bordeaux - LaBRI Méthodes Formelles
Lionel Clément

English

Lexed

Un lexicaliseur

Cet 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:
lexed-4.7.0.tar.gz

Compilation

Pour installer sous unix taper
./configure [--prefix=<directory>]
make
sudo make install
make clean

Utilisation

Pour aide
lexed -h
man lexed
Pour construire un automate
lexed [ -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 lexique
lexed [ -d <nom de répertoire> ] [ -p <nom du fichier> ] [ -f <pref> <or> <suff> <uw> ] consult < inputfile > outputfile
inputfile 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.cc

Execution :

$echo "mot1 1
mot2 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;
}