Boîte à Outils 3 - Extraction des Patrons

Dans cette dernière étape, il s'agit d'extraire des patrons à partir des fichiers sortis à l'étape Boîte à Outils 2. Les fichiers annotés syntaxiquement, nous pouvons extraire différents patrons selon notre choix. Ici nous avons choisis d'extraire les patrons NOM-ADJ et NOM-PRP-NOM.

Pour cela nous avons utilisé les différentes méthodes suivantes:

Extraction de patrons avec un script Perl

L'extraction de patron par le biais d'un script Perl a été possible avec le fichier au format texte brut sorti par Cordial. Le script Perl (réalisé par S. Fleury) est appelé avec le fichier .txt de Cordial et un fichier .txt contenant les patrons recherchés comme argument.
Le fichier de patrons est écrit avec des expressions régulières. L'annotation faite par Cordial est plus spécifique que celle faite par TreeTagger: Cordial fait la distinction entre les noms communs masculins ou féminins, ce que ne fait pas TreeTagger. C'est pour cette raison, que les patrons sont déclarés sous forme d'expressions régulières. Nous voulons que les patrons restent assez larges pour qu'ils récupèrent les noms communs, et pas seulement les noms communs masculins ou féminins.
Les résultats sont écrit dans un fichier au format texte brut.

Extraction de patrons avec une feuille de style XSLT

L'extraction de patron syntaxique a été possible avec une feuille de style XSLT grâce au fichier au format XML des fichiers obtenus par TreeTagger. Nous avons dû créér deux feuilles de styles distinctes pour les deux patrons recherchés.

Patron Syntaxique NOM-ADJ

Pour extraire le patron recherché nous avons utilisé des expressions XPath.

<xsl:template match="article">
   <xsl:for-each select="element">
     <xsl:if test="contains(.,'NOM')">
       <xsl:variable name="nom" select="./data[3]/text()"/>
     <xsl:if test="following-sibling::element[1][contains(.,'ADJ')]">
       <xsl:variable name="adj" select="following-sibling::element[1]/data[3]/text()"/>            
       <font color="#E42217"><xsl:value-of select="$nom"/></font><xsl:text> </xsl:text><font color="#00A7B1"><xsl:value-of select="$adj"/></font><br/>
     </xsl:if>
     </xsl:if>
   </xsl:for-each>
</xsl:template>

➢ Le premier élément <xsl:if> permet de retrouver l'élément syntaxique NOM. Si l'élement élément du fichier XML contient l'annotation NOM, nous créons une variable appelé 'nom' grâce à l'élément <xsl:variable>. Nous stockons ensuite dedans la valeur du troisième élément data qui, selon la structure du fichier XML, contient le mot annoté 'NOM'.
➢ Nous testons ensuite l'élément suivant grâce à l'expression XPath following-sibling suivit d'un test avec l'élément contains. Si l'élément suivant contient l'annotation 'ADJ', de la même manière que pour le nom, nous créons une variable 'adj' contenant le troisième élément data.
➢ Finalement nous affichons le contenu des variable avec l'élément xsl:value-of entouré de code couleur en HTML pour l'affichage sur un navigateur web.

Le résultat est le suivant:
patron_nomadj


Patron Syntaxique NOM-PRP-NOM

Voici une partie de la feuille de style permettant d'extraire le patron NOM-PRP-NOM:

<xsl:template match="article">
  <xsl:for-each select="element">
    <xsl:if test="(./data[contains(text(),'NOM')])">
      <xsl:variable name="nom" select="./data[3]/text()"/>
      <xsl:if test="following-sibling::element[1][contains(.,'PRP')]">
        <xsl:variable name="prp" select="following-sibling::element[1]/data[3]/text()"/>
        <xsl:if test="following-sibling::element[2][contains(.,'NOM')]">
          <xsl:variable name="nom2" select="following-sibling::element[2]/data[3]/text()"/>   
          <font color="#E42217"><xsl:value-of select="$nom"/></font><xsl:text> </xsl:text><font color="#00A7B1"><xsl:value-of select="$prp"/><xsl:text> </xsl:text><font color="#E42217"><xsl:value-of select="$nom2"/></font></font><br/>
        </xsl:if>  
      </xsl:if>
    </xsl:if>
  </xsl:for-each>
</xsl:template>

Le raisonnement de cette feuille de style est similaire à celle précédente. Nous avons simplement ajouté une troisième étape pour reconnaître le troisième élement du patron.

Le résultat est le suivant:
patron_nomprpnom