Extraction de graphies dans un corpus : Différence entre versions

De Wicri Manuel
imported>Jacques Ducloy
(Page créée avec « {{Wicri travaux|texte=page en cours de rédaction}} Cette page introduit un tutoriel sur l'extraction de graphies dans un corpus significatif. Nous prendrons pour exemple un... »)
 
imported>Jacques Ducloy
Ligne 5 : Ligne 5 :
  
 
Le problème posé est relativement simple quelles sont toutes les graphies contenant la racine « philolog » dans un corpus.
 
Le problème posé est relativement simple quelles sont toutes les graphies contenant la racine « philolog » dans un corpus.
 +
Pour pouvoir faire facilement des énumérations, le programme génère des triplets contenant :
 +
# la chaîne reconnue,
 +
# la clé HFD,
 +
# un numéro d'ordre (numMatch).
 +
<source lang="c">
 +
#include "Buffer.h"
 +
#include "RegExp.h"
 +
#include <stdio.h>
 +
#include <string.h>
 +
 +
int main()
 +
{
 +
  RegExp *rePhilo;
 +
  Buffer *bufDoc;
 +
  Buffer *bufKey;
 +
 
 +
  rePhilo=RegExpCreate("[A-Za-z]*[Pp][Hh][Ii][Ll][Oo][Ll][Oo][Gg][A-Za-z]*");
 +
  bufDoc=BufferCreate(1000,1000);
 +
  bufKey=NewBuffer();
 +
 
 +
  while (BufferGets(bufDoc))
 +
    {
 +
      char  *posTab;
 +
      char  *match;
 +
      char  *beginToParse;
 +
      int    numMatch;
 +
     
 +
      posTab=strchr(BufferString(bufDoc), '\t');
 +
      if (posTab)BufferStrncpy(bufKey, BufferString(bufDoc), posTab-BufferString(bufDoc));
 +
     
 +
      beginToParse=BufferString(bufDoc);
 +
      numMatch=0;
 +
      match=RegExpExtract(rePhilo, beginToParse);
 +
      while (match)
 +
{
 +
  numMatch++;
 +
  printf("%s", match);
 +
  free (match);
 +
 +
  if (posTab)
 +
    {
 +
      printf("\t%s\t%d\n", BufferString(bufKey), numMatch);
 +
    }
 +
  else putchar('\n');
 +
 +
  beginToParse=RegExpLoc2;
 +
  match=RegExpExtract(rePhilo, beginToParse);
 +
      }
 +
    }
 +
  exit(EXIT_SUCCESS);
 +
}
 +
</source>
 +
 +
 +
Si le source est rangé dans un fichier « findPhilolog », la compilation se fait ainsi :
 +
<source lang="sh">
 +
gcc findPhilolog.c $DILIB_CC -o findPhilolog
 +
</source>

Version du 25 avril 2015 à 11:11

logo travaux page en cours de rédaction

Cette page introduit un tutoriel sur l'extraction de graphies dans un corpus significatif.

Nous prendrons pour exemple une analyse d'un corpus extrait d'ISTEX sur la philologie. Celui-ci fait l'objet d'une plate-forme de curation et d'exploration sur Wicri/Linguistique.

Le problème posé est relativement simple quelles sont toutes les graphies contenant la racine « philolog » dans un corpus. Pour pouvoir faire facilement des énumérations, le programme génère des triplets contenant :

  1. la chaîne reconnue,
  2. la clé HFD,
  3. un numéro d'ordre (numMatch).
#include "Buffer.h"
#include "RegExp.h"
#include <stdio.h>
#include <string.h>

int main()
{
  RegExp *rePhilo;
  Buffer *bufDoc;
  Buffer *bufKey;
  
  rePhilo=RegExpCreate("[A-Za-z]*[Pp][Hh][Ii][Ll][Oo][Ll][Oo][Gg][A-Za-z]*");
  bufDoc=BufferCreate(1000,1000);
  bufKey=NewBuffer();
  
  while (BufferGets(bufDoc))
    {
      char   *posTab;
      char   *match;
      char   *beginToParse;
      int     numMatch;
      
      posTab=strchr(BufferString(bufDoc), '\t');
      if (posTab)BufferStrncpy(bufKey, BufferString(bufDoc), posTab-BufferString(bufDoc));
      
      beginToParse=BufferString(bufDoc);
      numMatch=0;
      match=RegExpExtract(rePhilo, beginToParse);
      while (match)
	{
	  numMatch++;
	  printf("%s", match);
	  free (match);

	  if (posTab) 
	    {
	      printf("\t%s\t%d\n", BufferString(bufKey), numMatch);
	    }
	  else putchar('\n');

	  beginToParse=RegExpLoc2;
	  match=RegExpExtract(rePhilo, beginToParse);
      }
    }
  exit(EXIT_SUCCESS);
}


Si le source est rangé dans un fichier « findPhilolog », la compilation se fait ainsi :

gcc findPhilolog.c $DILIB_CC -o findPhilolog