Patrons syntaxiques

La taille du corpus étant importante il est intéressant d'en difinir un sous-ensemble pour comprarer plus en détails les différence d'analyse des deux logicels

Extraction de patron syntaxique

Afin d'observer les résultats on va déterminer quelque patrons syntaxiques et l'on va les appliquer sur ls fichiers étiquetés.

Patrons de Treetagger

  • XSLT
  • Le fichier étiquetté formaté en Xml offre la possibilité d'appliquer uns feuille de style xslt contenant les patrons à garder dans le document XML. les transformations xslt correspondant à chaque patron sont les suivantes
    • Nom Adj ou Adj Nom
    • <?xml version="1.0" encoding="iso-8859-1"?>

      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

      <xsl:output omit-xml-declaration="yes" method="text"/>


      <xsl:template match="element">

      <xsl:choose>


      <xsl:when test="(./data[contains(text(),'NOM')]) and (following-sibling::element[1][./data[contains(text(),'ADJ')]])">

      <xsl:value-of select="./data[3]"/>

      <xsl:text> </xsl:text>

      </xsl:when>


      <xsl:when test="(./data[contains(text(),'ADJ')]) and (preceding-sibling::element[1][./data[contains(text(),'NOM')]])">

        <xsl:value-of select="./data[3]"/>

        <xsl:text>

      </xsl:text>

      </xsl:when>


      </xsl:choose>

      </xsl:template>


      </xsl:stylesheet>

    • Nom Nom
    • <?xml version="1.0" encoding="iso-8859-1"?>

      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

      <xsl:output omit-xml-declaration="yes" method="text"/>


      <xsl:template match="element">

      <xsl:choose>


      <xsl:when test="(./data[contains(text(),'NOM')]) and (preceding-sibling::element[1][./data[contains(text(),'NOM')]])">

        <xsl:value-of select="./data[3]"/>

        <xsl:text>

      </xsl:text>

      </xsl:when>


      </xsl:choose>

      </xsl:template>


      </xsl:stylesheet>

    • Nom Prp Nom
    • <?xml version="1.0" encoding="iso-8859-1"?>

      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

      <xsl:output omit-xml-declaration="yes" method="txt"/>


      <xsl:template match="element">

      <xsl:choose>


      <xsl:when test="(./data[contains(text(),'NOM')]) and (following-sibling::element[1][./data[contains(text(),'PRP')]]) and (following-sibling::element[2][./data[contains(text(),'NOM')]])">

        <xsl:value-of select="./data[3]"/>

        <xsl:text> </xsl:text>

      </xsl:when>


      <xsl:when test="(./data[contains(text(),'PRP')]) and (preceding-sibling::element[1][./data[contains(text(),'NOM')]]) and (following-sibling::element[1][./data[contains(text(),'NOM')]])">

        <xsl:value-of select="./data[3]"/>

        <xsl:text> </xsl:text>

      </xsl:when>


      <xsl:when test="(./data[contains(text(),'NOM')]) and (preceding-sibling::element[1][./data[contains(text(),'PRP')]]) and (preceding-sibling::element[2][./data[contains(text(),'NOM')]])">

        <xsl:value-of select="./data[3]"/>

        <xsl:text> 

      </xsl:text>

      </xsl:when>


      </xsl:choose>

      </xsl:template>


      </xsl:stylesheet>

  • Perl
  • On peut stocker un patron sous la forme d'un tableau indexé @patrons = ('NOM','ADJ'); ou
    @patrons = ('NOM','NOM');ou
    @patrons = ('NOM','PRP','NOM');ou ...
    et utiliser des expressions régulières: si l'élément capturé par les parenthèses(.*) dans l'expression

    /^\<element><data type=\"type\">$patrons[$i]\<\/data><data type=\"lemma\">.*\<\/data><data type=\"string\">(.*)\<\/data><\/element>/)

    est suivi par un mot correspondant à l'élément $i+1 du tableau, et ce jusqu'à la fin du tableau @patrons, alors tous les mots sont recopiés sur une ligne, séparés entre eux par des espaces.
  • XPATH
  • enfin un requête Xpath peut aussi être utilisée values:(//element[./data[contains(text(),'NOM')]]/following-sibling::element[1][./data[contains(text(),'ADJ')]]/data[3])|(//element[./data[contains(text(),'ADJ')]]/preceding-sibling::element[1][./data[contains(text(),'NOM')]]/data[3])

Cordial

Les étiquette utilisées par Cordial apportent un peu de précision en précisant le genre et le nombre donc doivent être prises en compte dans le script adapté à cordial. on doit modifier les feuilles de style pour qu'elle prennent en compte ces variations: data[contains(text(),'PREP') or contains(text(),'PRP')] data[contains(text(),'NC') or contains(text(),'NOM')]

“I think it’s a new feature. Don’t tell anyone it was an accident.”

– Larry Wall.