|
Utilisation de plusieurs documents XML
(suite) |
Exemple : texte segmenté, avec pré-traitement pour
étiqueter les signes de poncutation
<?xml version="1.0"
encoding="iso-8859-1"?>
<doc>
<taggersent>
<taggertoken wordform="Casimir"/>
<taggertoken wordform="et"/>
<taggertoken wordform="les"/>
<taggertoken wordform="voleurs"/>
<taggertoken wordform="(" lemma="(" pos="PUN"/>
<taggertoken wordform="c'"/>
<taggertoken wordform="est"/>
<taggertoken wordform="le"/>
<taggertoken wordform="titre"/>
<taggertoken wordform=")" lemma=")" pos="PUN"/>
<taggersent>
<taggersent>
<taggertoken wordform="Casimir"/>
<taggertoken wordform="avait"/>
<taggertoken wordform="-"/>
<taggertoken wordform="il"/>
<taggertoken wordform="perdu"/>
<taggertoken wordform="la"/>
<taggertoken wordform="tête"/>
<taggertoken wordform="?" lemma="?" pos="PUN"/>
<taggersent>
<taggersent>
<taggertoken wordform="'" lemma="'" pos="PUN:CIT"/>
<taggertoken wordform="Heureux"/>
<taggertoken wordform="sont"/>
<taggertoken wordform="les"/>
<taggertoken wordform="fêlés"/>
<taggertoken wordform="," lemma="," pos="PUN"/>
<taggertoken wordform="car"/>
<taggertoken wordform="ils"/>
<taggertoken wordform="laisseront"/>
<taggertoken wordform="passer"/>
<taggertoken wordform="la"/>
<taggertoken wordform="lumière"/>
<taggertoken wordform="'" lemma="'" pos="PUN:CIT"/>
<taggertoken wordform="déclara"/>
<taggertoken wordform="-" lemma="-" pos="PUN"/>
<taggertoken wordform="t" lemma="t" pos=""/>
<taggertoken wordform="-il" lemma="il" pos="PRO"/>
<taggertoken wordform="plus"/>
<taggertoken wordform="tard"/>
<taggertoken wordform="..." lemma="..." pos="PUN"/>
<taggersent>
</doc>
Ressource : Morphalou (version 1.0),
lexique morphologique développé par l' ATILF.
La taille de ce document approche 80Mo. Nous reproduisons ici une entrée
avec ses formes fléchies pour donner une idée de la structure
du lexique :
<lexicalEntry lemma="heureux"
grammaticalCategory="adjective">
<inflectionGroup>
<inflection orthography="heureux"
grammaticalGender="masculine" grammaticalNumber="singular"/>
<inflection orthography="heureux"
grammaticalGender="masculine" grammaticalNumber="plural"/>
<inflection orthography="heureuse"
grammaticalGender="feminine" grammaticalNumber="singular"/>
<inflection orthography="heureuses"
grammaticalGender="feminine" grammaticalNumber="plural"/>
</inflectionGroup>
</lexicalEntry>
Feuille XSL :
- <?xml version="1.0" encoding="iso-8859-1"?>
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
- <xsl:output encoding="iso-8859-1"
indent="yes"/>
- <xsl:variable name="maj"
select="ABCDEFGHIJKLMNOPQRSTUVWXYZÀÉÈÊ"/>
- <xsl:variable name="min"
select="abcdefghijklmnopqrstuvwxyzàéèê"/>
-
- <xsl:template match="*">
- <xsl:copy>
-
<xsl:apply-templates/>
- </xsl:copy>
- </xsl:template>
-
- <xsl:template match="taggertoken">
- <xsl:element
name="taggertoken">
-
<xsl:attribute name="wordform"><xsl:value-of
select="@wordform"/></xsl:attribute>
-
<xsl:choose>
-
<xsl:when test="count(document('morphalouSample.xml')//inflection[@orthography=translate(current()/@wordform,
$maj, $min)]) > 0">
-
<xsl:attribute name="lemma">
-
<xsl:for-each select="document('morphalouSample.xml')//inflection[translate(@orthography,
$maj, $min)=translate(current()/@wordform, $maj, $min)]">
-
<xsl:if test="position() >
1">|</xsl:if>
-
<xsl:value-of select="../../@lemma"/>
-
</xsl:for-each>
-
</xsl:attribute>
-
<xsl:attribute name="pos">
-
<xsl:for-each select="document('morphalouSample.xml')//inflection[translate(@orthography,
$maj, $min)=translate(current()/@wordform, $maj, $min)]">
-
<xsl:if test="position() >
1">|</xsl:if>
-
<xsl:value-of select="../../@grammaticalCategory"/>
-
-
<xsl:for-each select="attribute::*[name()
!= 'orthography']">
-
<xsl:text>:</xsl:text><xsl:value-of
select="."/>
-
</xsl:for-each>
-
</xsl:for-each>
-
</xsl:attribute>
-
</xsl:when>
- <xsl:otherwise>
- <xsl:attribute
name="lemma"><xsl:value-of
select="@wordform"/></xsl:attribute>
- <xsl:attribute
name="pos">unknown</xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:template>
- </xsl:stylesheet>
|
Commentaires :
- les variables min et maj
(lignes 5 et 6) et l'utilisation de la fonction XPath translate
permettent de comparer les chaînes de caractères
indépendamment de la casse (la liste des caractères
accentués ne contient que les caractères nécessaires
à l'exemple) ;
- nous reproduisons à l'identique les éléments
autres que taggertoken (lignes 8
à 12) ;
- pour les éléments taggertoken,
nous générons en sortie un élément
de même nom et dont l'attribut wordform
est inchangé (lignes 15 et 16) ;
- génération des attributs lemma
et pos : lignes 17
à 41
S'il y a dans Morphalou des éléments inflection
dont l'orthographe est identique à la forme du taggertoken
(test à la ligne 18) :
- on génère un attribut lemma
composé des attributs lemmas
des éléments lexicalEntry,
ancêtres des éléments inflection
sélectionnés, séparés éventuellement
par le caractère |
(lignes 19 à 24) ;
- on génère un attribut pos
composé de l'attribut orthography
des éléments lexicalEntry,
ancêtres des éléments inflection
sélectionnés (lignes 26 à 35) ;
- à cet attribut, on ajoute, séparés
par le caractère :
les attributs des éléments inflection,
sauf l'attribut orthography
(lignes 31 à 33).
Résultat : |
<doc>
<taggersent>
<taggertoken wordform="Casimir" lemma="Casimir"
pos="unknown"/>
<taggertoken wordform="et" lemma="et"
pos="functionWord"/>
<taggertoken wordform="les" lemma="le"
pos="functionWord"/>
<taggertoken wordform="voleurs" lemma="voleur"
pos="commonNoun:plural"/>
<taggertoken wordform="(" lemma="("
pos="unknown"/>
<taggertoken wordform="c'" lemma="c'"
pos="functionWord"/>
<taggertoken wordform="est" lemma="être"
pos="verb:indicative:singular:present:thirdPerson"/>
<taggertoken wordform="le" lemma="le"
pos="functionWord"/>
<taggertoken wordform="titre" lemma="titre"
pos="commonNoun:singular"/>
<taggertoken wordform=")" lemma=")"
pos="unknown"/>
</taggersent>
<taggersent>
<taggertoken wordform="Casimir" lemma="Casimir"
pos="unknown"/>
<taggertoken wordform="avait" lemma="avoir"
pos="verb:indicative:plural:imperfect:thirdPerson"/>
<taggertoken wordform="-" lemma="-"
pos="unknown"/>
<taggertoken wordform="il" lemma="il"
pos="functionWord"/>
<taggertoken wordform="perdu" lemma="perdre"
pos="verb:participle:masculine:singular:past"/>
<taggertoken wordform="la" lemma="la|la|le"
pos="commonNoun:singular|commonNoun:plural|functionWord"/>
<taggertoken wordform="tête" lemma="tête"
pos="commonNoun:singular"/>
<taggertoken wordform="?" lemma="?"
pos="unknown"/>
</taggersent>
<taggersent>
<taggertoken wordform="'" lemma="'"
pos="unknown"/>
<taggertoken wordform="Heureux" lemma="Heureux"
pos="unknown"/>
<taggertoken wordform="sont" lemma="être"
pos="verb:indicative:plural:present:thirdPerson"/>
<taggertoken wordform="les" lemma="le"
pos="functionWord"/>
<taggertoken wordform="fêlés" lemma="fêler|fêlé"
pos="verb:participle:masculine:plural:past|adjective:masculine:plural"/>
<taggertoken wordform="," lemma=","
pos="unknown"/>
<taggertoken wordform="car" lemma="car|car"
pos="commonNoun:singular|functionWord"/>
<taggertoken wordform="ils" lemma="il"
pos="functionWord"/>
<taggertoken wordform="laisseront" lemma="laisser"
pos="verb:indicative:plural:future:thirdPerson"/>
<taggertoken wordform="passer" lemma="passer"
pos="verb:infinitive"/>
<taggertoken wordform="la" lemma="la|la|le"
pos="commonNoun:singular|commonNoun:plural|functionWord"/>
<taggertoken wordform="lumière" lemma="lumière"
pos="commonNoun:singular"/>
<taggertoken wordform="'" lemma="'"
pos="unknown"/>
<taggertoken wordform="déclara" lemma="déclara"
pos="unknown"/>
<taggertoken wordform="-" lemma="-"
pos="unknown"/>
<taggertoken wordform="t" lemma="t"
pos="unknown"/>
<taggertoken wordform="-il" lemma="-il"
pos="unknown"/>
<taggertoken wordform="plus" lemma="plaire|plaire|plus"
pos="verb:indicative:singular:simplePast:firstPerson|verb:indicative:singular:simplePast:secondPerson|functionWord"/>
<taggertoken wordform="tard" lemma="tard"
pos="adverb"/>
<taggertoken wordform="..." lemma="..."
pos="unknown"/>
</taggersent>
</doc>
|
|
|