alsatext - pour (essayer de) traduire du français vers l'alsacien
Avertissement
Si vous avez vraiment besoin d'une traduction en alsacien, vous pouvez vous adresser à un traducteur professionnel, comme par exemple
AFT .
Présentation de l'idée
Comment pourrait-on réaliser un traducteur du français vers l'alsacien ?
Ce sont deux langues qui fonctionnent différemment... Une idée serait de décomposer le texte à traduire en contenu brut, décrivant sa structure et les mots contenus (quel sujet, quel verbe, quels compléments).
Pour commencer, il faut comprendre le texte en français qui a été saisi. Grâce au projet
Lexique.org , on a un dictionnaire français qui permet de reconnaître chaque mot. Ensuite, une recherche grossière de syntaxes courantes en français tente de
détecter la signification du texte . C’est la partie la plus difficile et la moins réussie pour l’instant, donc une solution de secours peut remplacer en partie cette étape :
un formulaire de saisie du contenu de la phrase .
Eventuellement, il y a quelques expressions toutes faites, typiques du français, qui se disent autrement en alsacien. Il faut les repérer et les transformer en une tournure alsacienne. Ensuite, il faut remplacer les mots français par les mots alsaciens correspondants.
On obtient alors un contenu brut, avec une structure et des mots en alsacien.
A l'aide d'un
dictionnaire alsacien (aussi proposé en
version thématique ), on retrouve pour chaque mot alsacien ses propriétés :
Une
appli de traduction permet de rechercher rapidement un mot dans ce dictionnaire.
A l'aide des
règles de grammaire et de syntaxe de l'alsacien , on trouve les déclinaisons et les conjugaisons qui s'appliquent.
Vers la fin, il faut encore enjoliver le texte pour répondre à des usages de contractions et d'euphonie.
Le résultat est un texte en alsacien, si tout s'est bien passé.
Exemple
Montrer le détail du traitement
Déployer tous les contenus
Depuis le texte en français...
>
v
^
Montrer le détail
découpe en phrases, par la transformation
transfo_phrases _xml.xsl
?
↓ XSL
<?xml version="1.0" encoding="UTF-8"?>
<!-- Nom de fichier : transfo_phrases_xml.xsl -->
<!-- Creation : Mlib le 08/02/2016 -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8"></xsl:output>
<xsl:template match="/">
<xsl:variable name="text_rempl_phrase1" select="translate(text/rempl, '.', '|')" />
<xsl:variable name="text_rempl_phrase2" select="translate($text_rempl_phrase1, ';', '|')" />
<xsl:variable name="text_rempl_phrase3" select="translate($text_rempl_phrase2, ':', '|')" />
<xsl:variable name="text_rempl_phrase4" select="translate($text_rempl_phrase3, '!', '|')" />
<xsl:variable name="text_rempl_phrase5" select="translate($text_rempl_phrase4, '?', '|')" />
<xsl:variable name="text_rempl_mot1" select="translate($text_rempl_phrase5, ',', '_')" />
<xsl:variable name="text_rempl_car1" select="translate($text_rempl_mot1, 'ABCDEFGHIJKLMNOPGRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" />
<text>
<src><xsl:value-of select="text/src"/></src>
<xsl:call-template name="string-decoupe">
<xsl:with-param name="text" select="$text_rempl_car1" />
<xsl:with-param name="sepa" select="'|'" />
</xsl:call-template>
</text>
</xsl:template>
<xsl:template name="string-decoupe">
<xsl:param name="text" />
<xsl:param name="sepa" />
<xsl:choose>
<xsl:when test="contains($text, $sepa)">
<phrase><xsl:value-of select="substring-before($text,$sepa)" /></phrase> <!-- un des troncons -->
<xsl:call-template name="string-decoupe"> <!-- traitement du texte restant -->
<xsl:with-param name="text" select="substring-after($text,$sepa)" />
<xsl:with-param name="sepa" select="$sepa" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<phrase><xsl:value-of select="$text" /></phrase> <!-- dernier troncon -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Résultat
Le chat blanc a dormi aujourd'hui tranquillement sur notre lit.
Le soleil brille et le ciel est bleu. Je veux maintenant une bière fraîche. le_chat_blanc_a_dormi_aujourd'hui_tranquillement_sur_notre_lit _le_soleil_brille_et_le_ciel_est_bleu _je_veux_maintenant_une_bière_fraîche
v
^
v
^
v
^
Montrer le détail
liste des mots, par la transformation
transfo_liste_mots _text.xsl
?
↓ XSL
<?xml version ="1.0" encoding="UTF-8"?>
<!-- Nom de fichier : transfo_liste_mots_text.xsl -->
<!-- Creation : Milib le : 11/02/2016 -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="//src">
<!-- on ignore ce contenu -->
</xsl:template>
<xsl:template match="//mot">
"<xsl:value-of select="."/>", </xsl:template>
</xsl:stylesheet>
Résultat
"le",
"chat",
"blanc",
"a",
"dormi",
"aujourd[apos]hui",
"aujourd",
"aujourd[apos]",
"hui",
"tranquillement",
"sur",
"notre",
"lit",
"",
"le",
"soleil",
"brille",
"et",
"le",
"ciel",
"est",
"bleu",
"",
"je",
"veux",
"maintenant",
"une",
"bière",
"fraîche",
-
^
v
^
v
^
v
^
v
^
Montrer le détail
combinaisons cohérentes ou non, par la transformation
transfo_coherence_oui_non _xml.xsl
?
↓ XSL
<?xml version="1.0" encoding="UTF-8"?>
<!-- Nom de fichier : transfo_coherence_oui_non_xml.xsl -->
<!-- Creation : Mlib le 06/11/2016 -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8"></xsl:output>
<!-- COMBINAISONS KO -->
<!-- KO : "pas" n'est pas un nom s'il n'est pas precede par un article, adj ou pronom -->
<xsl:template match="//mot/lemmes/NOM[@lemme='pas'
and not(../../preceding-sibling::*[1]/lemmes/ART_def
or ../../preceding-sibling::*[1]/lemmes/ART_ind
or ../../preceding-sibling::*[1]/lemmes/ADJ_num
or ../../preceding-sibling::*[1]/lemmes/ADJ_pos
or ../../preceding-sibling::*[1]/lemmes/PRO_ind
or ../../preceding-sibling::*[1]/lemmes/PRO_pos
)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas article - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>NOM - pas</c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "est" n'est pas un nom s'il n'est pas precede par un article, adj ou pronom -->
<xsl:template match="//mot/lemmes/NOM[@lemme='est'
and not(../../preceding-sibling::*[1]/lemmes/ART_def
or ../../preceding-sibling::*[1]/lemmes/ART_ind
or ../../preceding-sibling::*[1]/lemmes/ADJ_num
or ../../preceding-sibling::*[1]/lemmes/ADJ_pos
or ../../preceding-sibling::*[1]/lemmes/PRO_ind
or ../../preceding-sibling::*[1]/lemmes/PRO_pos
)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas article - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>NOM - est</c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "est" n'est pas un adjectif s'il n'est pas precede par un nom -->
<xsl:template match="//mot/lemmes/ADJ[../../fr='est'
and not(../../preceding-sibling::*[1]/lemmes/NOM)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas nom - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>ADJ - est</c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "être" n'est pas un verbe (mais un auxiliaire) s'il est suivi par un verbe ou un auxiliaire au participe passe -->
<xsl:template match="//mot/lemmes/VER[@lemme='être'
and (../../following-sibling::*[1]/lemmes/*/@infover='par:pas;'
or ../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;'
or ../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;par:pas;'
or ../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;par:pas;par:pas;')
]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>VER - être</c><s>part pass - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "être" n'est pas un auxiliaire (mais un verbe) s'il n'est pas suivi par un verbe ou un auxiliaire au participe passe -->
<xsl:template match="//mot/lemmes/AUX[@lemme='être'
and not(../../following-sibling::*[1]/lemmes/*/@infover='par:pas;')
and not(../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;')
and not(../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;par:pas;')
and not(../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;par:pas;par:pas;')
]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>AUX - être</c><s>pas part pass - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "avoir" n'est pas un verbe (mais un auxiliaire) s'il est suivi par un verbe ou un auxiliaire au participe passe -->
<xsl:template match="//mot/lemmes/VER[@lemme='avoir'
and (../../following-sibling::*[1]/lemmes/*/@infover='par:pas;'
or ../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;'
or ../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;par:pas;'
or ../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;par:pas;par:pas;')
]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>VER - avoir</c><s>part pass - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "avoir" n'est pas un auxiliaire (mais un verbe) s'il n'est pas suivi par un verbe ou un auxiliaire au participe passe -->
<xsl:template match="//mot/lemmes/AUX[@lemme='avoir'
and not(../../following-sibling::*[1]/lemmes/*/@infover='par:pas;')
and not(../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;')
and not(../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;par:pas;')
and not(../../following-sibling::*[1]/lemmes/*/@infover='par:pas;par:pas;par:pas;par:pas;')
]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>AUX - avoir</c><s>pas part pass - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "été" n'est pas un nom s'il est precede par l'auxiliaire avoir -->
<xsl:template match="//mot/lemmes/NOM[../../fr='été'
and ../../preceding-sibling::*[1]/lemmes/AUX/@lemme='avoir']" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas avoir - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>NOM - été</c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "est" n'est pas un adjectif s'il est suivi par un nom, un adjectif, un adverbe ou une preposition -->
<xsl:template match="//mot/lemmes/ADJ[../../fr='est'
and (../../following-sibling::*[1]/lemmes/NOM or ../../following-sibling::*[1]/lemmes/ADJ or ../../following-sibling::*[1]/lemmes/ADV or ../../following-sibling::*[1]/lemmes/PRE)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>ADJ - est</c><s>part pass - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : pronom personnel impossible si pas precede d'une preposition ou suivi d'un verbe -->
<xsl:template match="//mot/lemmes/PRO_per[(@lemme='me' or @lemme='te' or @lemme='le' or @lemme='la' or @lemme='l[apos]' or @lemme='lui' or @lemme='se'
or @lemme='leur')
and
not(../../preceding-sibling::*[1]/lemmes/PRE)
and
not(../../following-sibling::*[1]/lemmes/VER)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas preposition - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>PRO_per - <xsl:value-of select="."/></c><s>pas verbe - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : pronom personnel impossible si suivi d'un nom et pas d'un verbe -->
<xsl:template match="//mot/lemmes/PRO_per[(@lemme='le' or @lemme='la' or @lemme='l[apos]' or @lemme='les'
or @lemme='leur')
and
(../../following-sibling::*[1]/lemmes/NOM)
and
not(../../following-sibling::*[1]/lemmes/VER)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>PRO_per - <xsl:value-of select="."/></c><s>nom et pas verbe - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "beau" n'est pas un adverbe s'il n'est pas precede par le verbe faire ou porter -->
<xsl:template match="//mot/lemmes/NOM[@lemme='beau'
and
not (../../preceding-sibling::*[1]/lemmes/VER/@lemme='faire' or ../../preceding-sibling::*[1]/lemmes/VER/@lemme='porter')]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas avoir - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>NOM - été</c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : un verbe precede d'une preposition - sauf "en" - n'en est pas un s'il n'est pas a l'infinitif -->
<xsl:template match="//mot/lemmes/VER[@infover!='inf;' and @infover!='inf;;'
and
../../preceding-sibling::*[1]/lemmes/PRE[@lemme!='en']]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>prep autre que "en" - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>VER pas infinitif - <xsl:value-of select="."/></c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : certains pronoms personnels impossibles si suivis par un nom et pas d'un verbe -->
<xsl:template match="//mot/lemmes/PRO_per[(@lemme='je' or @lemme='tu' or @lemme='il' or @lemme='elle' or @lemme='lui'
or @lemme='me' or @lemme='te' or @lemme='se'
or @lemme='nous' or @lemme='vous' or @lemme='ils' or @lemme='eux' or @lemme='elles')
and
(../../following-sibling::*[1]/lemmes/NOM)
and
not(../../following-sibling::*[1]/lemmes/VER)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>PRO_per - <xsl:value-of select="."/></c><s>nom mais pas verbe - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : un pronom possessif n'en est pas un s'il n'est pas precede d'un article defini -->
<xsl:template match="//mot/lemmes/PRO_pos[not(../../preceding-sibling::*[1]/lemmes/ART_def)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas article def - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>pronom poss - <xsl:value-of select="."/></c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : un pronom personnel - autre que y - doit etre precede d'une preposition
ou suivi d'un verbe ou d'un auxiliaire ou d'un pronom personnel (y compris "y"), sinon ce n'en est pas un -->
<xsl:template match="//mot/lemmes/PRO_per[@lemme!='y'
and not(../../preceding-sibling::*[1]/lemmes/PRE)
and not(../../following-sibling::*[1]/lemmes/VER) and not(../../following-sibling::*[1]/lemmes/AUX) and not(../../following-sibling::*[1]/lemmes/PRO_per)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas preposition - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>PRO_per - <xsl:value-of select="."/></c><s>pas verbe ni aux ni pronom pers - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : le mot "maintenant" n'est (probablement) pas un verbe s'il n'est pas precede de la preposition "en" -->
<xsl:template match="//mot/lemmes/VER[../../fr='maintenant' and not(../../preceding-sibling::*[1]/lemmes/PRE/@lemme='en')]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>pas preposition en - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>VER - <xsl:value-of select="."/></c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : un verbe precede par un article, adj ou pronom autre que personnel - a l'exception du pronom personnel "les" -->
<xsl:template match="//mot/lemmes/VER[not (../../preceding-sibling::*[1]/lemmes/PRO_per/@lemme='les')
and(../../preceding-sibling::*[1]/lemmes/ART_def
or ../../preceding-sibling::*[1]/lemmes/ART_ind
or ../../preceding-sibling::*[1]/lemmes/ADJ_num
or ../../preceding-sibling::*[1]/lemmes/ADJ_pos
or ../../preceding-sibling::*[1]/lemmes/ADJ_dem
or ../../preceding-sibling::*[1]/lemmes/PRO_ind
or ../../preceding-sibling::*[1]/lemmes/PRO_pos)
]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>article - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>VER - <xsl:value-of select="."/></c><resu>KO</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- Fait directement dans la table lexique_purge -->
<!-- KO : elimination de "en" comme adverbe -->
<!-- KO : elimination de "mais" comme adverbe -->
<!-- KO : elimination de "a" comme nom -->
<!-- bof : pas elimination de "un " ou "une" comme adj num -->
<!-- bof : pas elimination de "une" comme nom -->
<!-- COMBINAISONS OK -->
<!-- bof, peut aussi etre un adjectif : un nom precede par un article, adj ou pronom -->
<!-- xsl:template match="//mot/lemmes/NOM[../../preceding-sibling::*[1]/lemmes/ART_def
or ../../preceding-sibling::*[1]/lemmes/ART_ind
or ../../preceding-sibling::*[1]/lemmes/ADJ_num
or ../../preceding-sibling::*[1]/lemmes/ADJ_pos
or ../../preceding-sibling::*[1]/lemmes/ADJ_dem
or ../../preceding-sibling::*[1]/lemmes/PRO_ind
or ../../preceding-sibling::*[1]/lemmes/PRO_pos
]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>article - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>NOM - <xsl:value-of select="."/></c><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template -->
<!-- OK : un verbe infinitif precede par une preposition -->
<xsl:template match="//mot/lemmes/VER[(@infover='inf;' or @infover='inf;;')
and
../../preceding-sibling::*[1]/lemmes/PRE]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>preposition - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>VER infinitif - <xsl:value-of select="."/></c><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : un verbe precede par une pronom relatif ou un pronom interrogatif -->
<xsl:template match="//mot/lemmes/VER[../../preceding-sibling::*[1]/lemmes/PRO_rel
or ../../preceding-sibling::*[1]/lemmes/PRO_int]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p><xsl:value-of select="../../preceding-sibling::*[1]"/> - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>VER - <xsl:value-of select="."/></c><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : un verbe au participe present precede par "en" -->
<xsl:template match="//mot/lemmes/VER[@infover='par:pre;' and ../../preceding-sibling::*[1]/lemmes/PRE/@lemme='en']" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>PRE - en</p><c>VER - <xsl:value-of select="."/></c><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : un adjectif precede par le verbe être est un attribut, donc OK pour le choix de l'adjectif -->
<xsl:template match="//mot/lemmes/ADJ[../../preceding-sibling::*[1]/lemmes/AUX/@lemme='être']" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>AUX - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>ADJ - <xsl:value-of select="."/></c><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : pronom personnel suivi d'un verbe et pas d'un nom -->
<xsl:template match="//mot/lemmes/PRO_per[(@lemme='je' or @lemme='tu' or @lemme='il' or @lemme='elle' or @lemme='lui'
or @lemme='me' or @lemme='te' or @lemme='le' or @lemme='la' or @lemme='l[apos]' or @lemme='se'
or @lemme='nous' or @lemme='vous' or @lemme='ils' or @lemme='eux' or @lemme='elles' or @lemme='les' or @lemme='leur')
and
(../../following-sibling::*[1]/lemmes/VER)
and
not(../../following-sibling::*[1]/lemmes/NOM)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>PRO_per - <xsl:value-of select="."/></c><s>verbe mais pas nom - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : verbe suivi d'un adverbe -->
<xsl:template match="//mot/lemmes/VER[../../following-sibling::*[1]/lemmes/ADV]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>VER - <xsl:value-of select="."/></c><s>ADV - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : adverbe precede par un verbe -->
<xsl:template match="//mot/lemmes/ADV[../../preceding-sibling::*[1]/lemmes/VER]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>VER - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>ADV - <xsl:value-of select="."/></c><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : "un" ou "une" suivi d'un nom ou d'un adjectif qualificatif est un article indefini -->
<xsl:template match="//mot/lemmes/ART_ind[(@lemme='un' or @lemme='une') and (../../following-sibling::*[1]/lemmes/NOM or ../../following-sibling::*[1]/lemmes/ADJ)]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>ART ind - <xsl:value-of select="."/></c><s>NOM ou ADJ - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : adjectif qualificatif - autre que "est" - precede par un nom -->
<xsl:template match="//mot/lemmes/ADJ[../../fr!='est' and ../../preceding-sibling::*[1]/lemmes/NOM]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><p>NOM - <xsl:value-of select="../../preceding-sibling::*[1]"/></p><c>ADJ autre que est - <xsl:value-of select="."/></c><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- OK : adjectif qualificatif - autre que "est" - suivi par un nom -->
<xsl:template match="//mot/lemmes/ADJ[../../fr!='est' and ../../following-sibling::*[1]/lemmes/NOM]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>ADJ autre que est - <xsl:value-of select="."/></c><s>NOM - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<!-- KO : "est" verbe suivi par un adjectif -->
<xsl:template match="//mot/lemmes/VER[../../fr='est'
and ../../following-sibling::*[1]/lemmes/ADJ]" priority="1">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<coherence><c>VER - est</c><s>ADJ - <xsl:value-of select="../../following-sibling::*[1]"/></s><resu>OK</resu></coherence>
</xsl:copy>
</xsl:template>
<xsl:template priority="0" match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Résultat
Le chat blanc a dormi aujourd'hui tranquillement sur notre lit.
Le soleil brille et le ciel est bleu. Je veux maintenant une bière fraîche. le pas preposition -
PRO_per - pas verbe ni aux ni pronom pers - chat KO chat blanc NOM - chat
ADJ autre que est - OK a VER - avoir part pass - dormi KO dormi VER - ADV - aujourd[apos]hui OK aujourd[apos]hui VER - dormi
ADV - OK tranquillement sur notre pas article def - sur
pronom poss - KO lit article - notre
VER - KO le pas preposition -
PRO_per - pas verbe ni aux ni pronom pers - soleil KO soleil et le pas preposition - et
PRO_per - pas verbe ni aux ni pronom pers - ciel KO ciel est AUX - être pas part pass - bleu KO VER - est ADJ - bleu OK bleu AUX - est
ADJ - OK je PRO_per - verbe mais pas nom - veux OK veux VER - ADV - maintenant OK maintenant VER - veux
ADV - OK pas preposition en - veux
VER - KO une ART ind - NOM ou ADJ - bière OK bière fraîche NOM - bière
ADJ autre que est - OK
v
^
-
^
v
^
-
^
v
^
v
^
v
^
v
^
v
^
v
^
v
^
v
^
v
^
v
^
v
^
Montrer le détail
choix du bon infover, par la transformation
transfo_choix_infover _xml.xsl
?
↓ XSL
<?xml version ="1.0" encoding="UTF-8"?>
<!-- Nom de fichier : transfo_choix_infover_xml.xsl -->
<!-- Creation : Milib le : 22/04/2016 -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="infv[mode='imp']" priority="2">
<xsl:if test="not(../../../../../sujet)"> <!-- si absence sujet, infv avec imp est compatible -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
<xsl:template match="infv[pers='1s']" priority="1">
<xsl:choose>
<xsl:when test="../../../../../sujet/mot/pron_pers/@nbr='s' and ../../../../../sujet/mot/pron_pers/@pers='1'"> <!-- si presence pronom pers 1 s (je), infv avec pers=1s est compatible -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise> <!-- les autres cas sont incompatibles -->
<!-- ignorer -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="infv[pers='2s']" priority="1">
<xsl:choose>
<xsl:when test="../../../../../sujet/mot/pron_pers/@nbr='s' and ../../../../../sujet/mot/pron_pers/@pers='2'"> <!-- si presence pronom pers 2 s (tu), infv avec pers=2s est compatible -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise> <!-- les autres cas sont incompatibles -->
<!-- ignorer -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="infv[pers='3s']" priority="1">
<xsl:choose>
<xsl:when test="../../../../../sujet/mot/pron_pers/@pers='1'"> <!-- si presence pronom pers 1 (je ou nous), infv avec pers=3s est incompatible -->
<!-- ignorer -->
</xsl:when>
<xsl:when test="../../../../../sujet/mot/pron_pers/@pers='2'"> <!-- si presence pronom pers 2 (tu ou vous), infv avec pers=3s est incompatible -->
<!-- ignorer -->
</xsl:when>
<xsl:otherwise> <!-- les autres cas sont incompatibles -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="infv[pers='1p']" priority="1">
<xsl:choose>
<xsl:when test="../../../../../sujet/mot/pron_pers/@pers='1'"> <!-- si presence pronom pers 1 (je ou nous), infv avec pers=1p est compatible -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise> <!-- les autres cas sont incompatibles -->
<!-- ignorer -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="infv[pers='2p']" priority="1">
<xsl:choose>
<xsl:when test="../../../../../sujet/mot/pron_pers/@nbr='p' and ../../../../../sujet/mot/pron_pers/@pers='2'"> <!-- si presence pronom pers 2 p (vous), infv avec pers=2p est compatible -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise> <!-- les autres cas sont incompatibles -->
<!-- ignorer -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="infv[pers='3p']" priority="1">
<xsl:choose>
<xsl:when test="../../../../../sujet/mot/pron_pers/@pers='1'"> <!-- si presence pronom pers 1 (je ou nous), infv avec pers=3p est incompatible -->
<!-- ignorer -->
</xsl:when>
<xsl:when test="../../../../../sujet/mot/pron_pers/@pers='2'"> <!-- si presence pronom pers 2 (tu ou vous), infv avec pers=3p est incompatible -->
<!-- ignorer -->
</xsl:when>
<xsl:otherwise> <!-- les autres cas sont incompatibles -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@*|node()" priority="0">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Résultat
Le chat blanc a dormi aujourd'hui tranquillement sur notre lit.
Le soleil brille et le ciel est bleu. Je veux maintenant une bière fraîche. a AUX avoir ind pre 3s dormi VER dormir s par pas est VER être ind pre 3s veux VER vouloir ind pre 1s
v
^
v
^
Montrer le détail
Présentation dans des cadres colorés du résultat du parsing du texte en français, par la transformation
transfo_presentationFR _html.xsl
?
↓ XSL
<?xml version ="1.0" encoding="UTF-8"?>
<!-- Nom de fichier : transfo_presentationFR_html.xsl -->
<!-- Création : Milib le 02/09/2017 -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
version="4.0"
encoding="UTF-8"
indent="yes"/>
<xsl:template match="/" priority="1">
<style>
div#resul_cadres_fr {height:600px; overflow: auto;}
div.element0 {border-width: 1px; border: solid; border-color: rgba(0, 0, 10, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:840px;}
div.element1 {border-width: 1px; border: solid; border-color: rgba(5, 10, 40, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:810px;}
div.element2 {border-width: 1px; border: solid; border-color: rgba(10, 20, 70, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:780px;}
div.element3 {border-width: 1px; border: solid; border-color: rgba(20, 40, 100, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:750px;}
div.element4 {border-width: 1px; border: solid; border-color: rgba(30, 60, 130, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:720px;}
div.element5 {border-width: 1px; border: solid; border-color: rgba(35, 70, 160, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:690px;}
div.element6 {border-width: 1px; border: solid; border-color: rgba(75, 150, 180, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:660px;}
div.element7 {border-width: 1px; border: solid; border-color: rgba(90, 180, 200, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:630px;}
div.element8 {border-width: 1px; border: solid; border-color: rgba(100, 200, 220, 0.5); background-color: rgba(255, 255, 255, 0.6); margin:1px; padding:1px; width:600px;}
div.contenu { background-color: rgba(200, 220, 280, 0.9); margin-left:10px; margin-right:10px; padding:1px; }
div.element1:hover {border-color:#040810; background-color:#F0F0FF; color:#101050;}
div.element2:hover {border-color:#051020; background-color:#F0F0FF; color:#101050;}
div.element3:hover {border-color:#153040; background-color:#F0F0FF; color:#101050;}
div.element4:hover {border-color:#102060; background-color:#F0F0FF; color:#101050;}
div.element5:hover {border-color:#153080; background-color:#F0F0FF; color:#101050;}
div.element6:hover {border-color:#2040A0; background-color:#F0F0FF; color:#101050;}
div.element7:hover {border-color:#2550B0; background-color:#F0F0FF; color:#101050;}
div.element8:hover {border-color:#3060C0; background-color:#F0F0FF; color:#101050;}
div.element9:hover {border-color:#3570D0; background-color:#F0F0FF; color:#101050;}
</style>
<h1>Présentation structurée du contenu du texte en français</h1>
<div id="resul_cadres_fr">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</div>
</xsl:template>
<xsl:template priority="1" match="*">
<div class="element{count(ancestor::*)}" title="niv{count(ancestor::*)} - {name()}" >
<<b><xsl:value-of select="name()"/></b>
<xsl:for-each select="@*"> <!-- parcours des attributs -->
<xsl:text> </xsl:text> <i><xsl:value-of select="name(.)"/>=</i>"<xsl:value-of select="."/>"
</xsl:for-each>
<xsl:choose>
<xsl:when test="node()"><!-- presence de noeuds fils -->>
<div class="contenu">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</div>
<<b>/<xsl:value-of select="name()"/></b>>
</xsl:when>
<xsl:otherwise>
/>
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
<xsl:template priority="0" match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Résultat
Présentation structurée du contenu du texte en français
<
text >
<
src >
Le chat blanc a dormi aujourd'hui tranquillement sur notre lit.
Le soleil brille et le ciel est bleu. Je veux maintenant une bière fraîche.
<
/src >
<
phrase >
<
prop type= "princ"
>
<
sujet >
<mot cgram= "ART_def"
fr= "le"
/>
<mot cgram= "ADJ"
fr= "blanc"
/>
<mot cgram= "NOM"
fr= "chat"
/>
<
/sujet >
<
verb type= "auxil"
>
<
mot cgram= "AUX"
fr= "a"
>
<
lemmes cgram= "AUX"
>
<
/lemmes >
<
/mot >
<
/verb >
<
verb >
<
mot cgram= "VER"
fr= "dormi"
>
<
lemmes cgram= "VER"
>
<
/lemmes >
<
/mot >
<
/verb >
<
compl type= "temps"
>
<mot cgram= "ADV"
fr= "aujourd[apos]hui"
/>
<
/compl >
<
compl >
<mot cgram= "ADV"
fr= "tranquillement"
/>
<
/compl >
<
compl type= "lieu"
>
<mot cgram= "PRE"
fr= "sur"
/>
<mot cgram= "ADJ_pos"
fr= "notre"
/>
<mot cgram= "NOM"
fr= "lit"
/>
<
/compl >
<
/prop >
<
/phrase >
<
phrase >
<
prop type= "princ"
>
<
sujet >
<mot cgram= "ART_def"
fr= "le"
/>
<mot cgram= "NOM"
fr= "soleil"
/>
<
/sujet >
<
liaison >
<mot cgram= "CON"
fr= "et"
/>
<
/liaison >
<
sujet >
<mot cgram= "ART_def"
fr= "le"
/>
<mot cgram= "NOM"
fr= "ciel"
/>
<
/sujet >
<
verb >
<
mot cgram= "VER"
fr= "est"
>
<
lemmes cgram= "VER"
>
<
/lemmes >
<
/mot >
<
/verb >
<
compl type= "attribut"
>
<mot cgram= "ADJ"
fr= "bleu"
/>
<
/compl >
<
/prop >
<
/phrase >
<
phrase >
<
prop type= "princ"
>
<
sujet >
<
mot cgram= "PRO_per"
fr= "je"
>
<pron_pers nbr= "s"
pers= "1"
/>
<
/mot >
<
/sujet >
<
verb >
<
mot cgram= "VER"
fr= "veux"
>
<
lemmes cgram= "VER"
>
<
/lemmes >
<
/mot >
<
/verb >
<
compl type= "temps"
>
<mot cgram= "ADV"
fr= "maintenant"
/>
<
/compl >
<
compl type= "od"
>
<mot cgram= "ART_ind"
fr= "une"
/>
<mot cgram= "ADJ"
fr= "frais"
/>
<mot cgram= "NOM"
fr= "bière"
/>
<
/compl >
<
/prop >
<
/phrase >
<
/text >
-
... jusqu'à la description structurée du texte en français.
Depuis la description structurée du texte en français...
^
v
^
v
^
v
^
v
... jusqu'à la description structurée du texte en alsacien.
Depuis la description structurée du texte en alsacien...
^