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
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 :
- la chaîne reconnue,
- la clé HFD,
- 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