Exemples de règles de transfert

From Apertium
Revision as of 20:52, 15 February 2013 by Bech (talk | contribs) (flèches)
Jump to navigation Jump to search

Cette page est destinée à compléter la page Introduction aux règles de transfert. Les exemples utilisés concernent la paire apertium-eo-fr. Il s'agit d'une paire le langues validée pour le sens de traduction français → espéranto. Par contre, le sens de traduction espéranto → français n'a pas été implémenté par le développeur initial. C'est un autre développeur, totalement débutant pour l'écriture des règles de transfert qui a choisi de le faire. Les exemples fournis concernent les toutes premières règles écrites pour traduire un groupe d'un, deux ou trois mots espéranto en un groupe de deux ou trois mots français.

Cette page ne concerne que l'écriture du fichier de règles destiné à être utilisé par l'outil apertium-transfer dont le suffixe est .t1x. L'écriture de balises destinée à la fragmentation dans le cadre d'un transfert en 3 étapes n'y est pas abordé.

Structure d'un fichier .t1x

<?xml version="1.0" encoding="utf-8"?>
<transfer>
   <section-def-cats>
      ..........
   </section-def-cats>

   <section-def-attrs>
      ..........
   </section-def-attrs>

   <section-def-vars>
      ..........
   </section-def-vars>

   <section-def-macros>
      ..........
   </section-def-macros>

   <section-rules>
      ..........
   </section-rules>
</transfer>

Ce fichier est composé de plusieurs sections obligatoires et peut contenir d'autres sections facultatives. Chacune des sections devra contenir au moins un élément.

La <section-def-cats> permet de déclarer des catégories de mots que l'on va rechercher pour appliquer une règle de transfert particulière. Il peut s'agir de mots simples (un article (déterminant), un nom, un adjectif, un verbe, ...) ou de choses un peu plus compliquées comme un nom possédant dans sa description la balise <nom> (nominatif) signifiant qu'il fait partie du sujet de la phrase.

Cette section contient un ou plusieurs éléments qui ont la structure suivante :

   <def-cat n="nom_de_ce_qu'on_veut_décrire">
     <cat-item tags="sa_description"/>
     .... (il peut y avoir une ou plusieurs balises <cat-item .../>)
   </def-cat>

La <section-def-attrs> permet de regrouper par fonctionnalités des noms d'attributs de mots définis sans la section sdefs d'un dictionnaire morphologique. Par exemple, on regroupera dans cette section toutes les balises correspondant au :

  • genre d'un mot
  • nombre d'un mot (singulier, pluriel, ...)
  • personne d'un verbe
  • temps d'un verbe
  • ...

Cette section contient un ou plusieurs éléments qui ont la structure suivante :

   <def-attr n="nom_d'une_liste_d'attributs_jouant_un_rôle_commun">
     <attr-item tags="un_attribut_de_la_section_sdef_d'un_dictionnaire"/>
     .... (on a plusieurs balises <attr-item .../> autant que de valeurs
           possibles pour l'attribut)
   </def-attr>

La <section-def-vars> est obligatoire et doit comporter au moins un élément respectant la syntaxe <def-var n="..."/> . Il s'agit de lister les variables globales utilisées dans les règles de transferts. Toutefois, pour les règles décrites dans cette page, nous n'aurons besoin d'aucune de ces variables.

La <section-def-macros> est facultative. Néanmoins, elle sera très utile pour écrire des fichiers de transfert moins longs en évitant de dupliquer à l'identique (ou presque) un même traitement dans plusieurs règles de transfert.

Cette section contient un ou plusieurs éléments qui ont la structure suivante :

   <def-macro n="nom_de_la_macro" npar="nombre_de_paramètres">
     .... (le code de la macro)
   </def-macro>

Enfin, la <section-rules> est obligatoire. C'est la plus longue du fichier de transfert et celle qui justifie son existence. Elle permet en effet de définir les traitements à effectuer pour traduire des groupes de mots (ou quelquefois des mots isolés, comme on le verra).

Cette section contient un ou plusieurs éléments qui ont la structure suivante :

   <rule>
     <pattern>
       <pattern-item n="nom_défini_comme_def-cat_correspondant_au_premier_mot_à_traiter"/>
       .... (autant de balises <pattern-item ..../> que de mots qu'on veut traiter ensemble)
     </pattern>
     <action>
       .... (description de la règle de transfert)
     </action>
   </rule>

Comment trouver ce qu'on doit faire

Exemples de règles de transfert

Transférer deux mots en les accordant

Rajouter un mot dans la langue cible

Intervertir deux mots

Changer des attributs en fonction de conditions

N'écrire qu'une fois des traitements communs à plusieurs règles