BAO3 : L'extraction du patron

A l'issu de la BÀO 2, nous disposons deux fichiers annotés. L'un est au format XML et l'autre est en format TXT.

L'objectif de cette étape est d'extraire des patrons à partie du fichier généré par Cordial ou/et tretagger

Dans le texte suivant, deux solutions vont être présentées. L'un est une méthode de pur Perl avec les expressions régulière, alors que l'autre utilise le module XML::XPATH.

Solution 1 : extraction avec programme perl sur fichier cordial

cette solution PERL est issu de Monsieur Jean Michel Daube

L'entrée :


1. les sorties en texte brute étiquetés via Cordial issues de la Boîte à Outils 2

2. deux fichiers qui contient les motifs

Le motif1 est :

NC ADJ

Le motif2 est :

NC PREP NC

L'idée du script :


1. Comme le résultat de l'étiquetage est présenté sous trois colonnes et il y a une relation bijective entre les trois éléments dans chaque ligne, on peut sauvegarder respectivement les trois colonnes dans trois listes.

2. Il nous faut un fichier de motif pour extraire les mots correspondants.

3. C'est bien facile de remarquer que chaque ligne sauf celles qui contiennent la ponctuation est séparée par deux fabulations. De ce fait, on peut extraire les trois éléments de chaque ligne par l'expression régulière : $ligne=~/^([^\t]+)\t([^\t]+)\t([^\t]+)$/.

4. Quant à ceux qui contiennent la ponctuation, on les prend comme des délimiteurs.

comme les tokens, les lemmes et les étiquettes sont correspondants,les indices des motifs dans la liste de l'étiquettes sont aussi les indices des mots dans la liste des tokens. pour récupérer les indices des motifs dans la liste de l'étiquette,on met chaque patron en une ligne et ajoute les espaces pendant chaque mot dans la liste de l'étiquette.

Si dans la nouvelle liste de l'étiquette ,on trouves les patrons, on extrait tout ce qui est avant le patron s et compte l'espace dans s

compter le nombre de l'étiquette dans un patron: on split le patron par l'espace et utiliser la fonction $# pour trouver l'indice de la dernière étiquette dans le patron

on remarque que le premier indice de mot est le nombre de l'espace qu'on vient de compter et le dernier est la somme du nombre de l'espace et l'indice du dernier élément du patron

3208-à la une 3210-international
patron-cordial-NC-ADJ patron-cordial-NC-ADJ
patron-cordial-NC-PREP-NC patron-cordial-NC-PREP-NC

Solution 2: extraction avec le module XML::XPATH

L'entrée:

1. les sorties en texte brute étiquetés via Cordial issues de la Boîte à Outils 2

2. Les motifs

L'idée du script :

1. Le fichier taggé est tout d'abord transformé en une liste LISTE (une ligne = 1 élément de la liste).

2. On va ensuite vider progressivement la liste LISTE en supprimant son premier élément à gauche : pour chaque élément enlevé, on regarde :

s'il contient la première POS du patron rangé dans @ARGV (comparaison de chaîne de caractère via des regexp)?

si oui, on examine les éléments suivants dans la liste LISTE sur une longueur correspondant à la longueur du patron (sous-liste de @ARGV) : càd que l'on regarde si la ligne suivante (en position 0 dans la nouvelle liste) contient ou pas le second terme du patron, puis si la ligne suivante (en position 1 dans lanouvelle liste) contient ou pas le troisième terme du patron etc. On fait cela en tenant compte de la longueur du patron et si sur une ligne il n'y a pas coïncidence on ne regarde pas les suivantes...

s'il y a coïncidence "globale" entre chaque terme POS et celle contenue dans un élément de LISTE examiné : on imprime la liste de formes correspondantes.


Solution 3 : extraction des patrons avec programme fichier treetager

cette solution PERL est issu de Monsieur Serge Fleury

Le script à deja un motif inclus,il s'agit d'un script accesoire juste pour manipuler d'avantage perl

L'entrée


il prend les sorties en texte brute étiquetés via treetager issues de la Boîte à Outils 2

Patron 3208-à la une Patron 3210-international
patron-description-treetagger-NOM-ADJ patron-description-treetagger-NOM-ADJ
patron-titre-treetagger-NC-PREP-NC patron-titre-treetagger-NC-PREP-NC