Comment contribuer à une paire de langues existante

From Apertium
Jump to navigation Jump to search

Comment ajouter des données linguistiques à une paire des langues existante à Apertium. Apertium a des données pour beaucoup de paires de langues. Ces données linguistiques comprennent principalement des dictionnaires (monolingues et bilingues), des règles de transfert structural qui réalisent des opérations grammaticales et d'autres transformations entre deux langues concernées, et des données lexicales pour le PoS tagger, qui est en charge de la désambiguation du texte de la langue de départ.

Toutes ces données linguistiques sont comprises dans un seul répertoire. Par exemple, apertium-es-ca pour la paire espagnol-catalan. À continuation, les fichiers que vous pouvez trouver dans ce répertoire sont décrites.


Exemple d'édition des fichiers

Apertium 1

Pour la paire espagnol-catalan (apertium-es-ca):

  • apertium-es-ca.es.dix : Dictionnaire monolingue espagnol, ayant 11,800 entrées (depuis le 17 novembre 2005)
  • apertium-es-ca.ca.dix : Dictionnaire monolingue catalan, ayant 11,800 entrées.
  • apertium-es-ca.es-ca.dix : Dictionnaire bilingue espagnol-catalan, ayant 12,800 entrées (correspondences espagnol-catalan).
  • apertium-es-ca.trules-es-ca.xml : Règles de transfert structural pour la traduction de l'espagnol au catalan.
  • apertium-es-ca.trules-ca-es.xml : Règles de transfert structural pour la traduction du catalan à l'espagnol.
  • apertium-es-ca.es.tsx : Fichier de définition du tagger pour l'espagnol
  • apertium-es-ca.ca.tsx : Fichier de définition du tagger pour le catalan
  • apertium-es-ca.post-es.dix : Dictionnaire de post-génération pour l'espagnol, avec 25 entrées et 5 paradigmes (demandés au moment de traduire du catalan à l'espagnol)
  • apertium-es-ca.post-ca.dix : Dictionnaire de post-génération pour le catalan, avec 16 entrées et 57 paradigmes (demandés au moment de traduire de l'espagnol au catalan)
  • répertoire es-tagger-data : Ayant les données nécessaires pour le tagger espagnol (corpus, etc.)
  • répertoire ca-tagger-data : Ayant les données nécessaires pour le tagger catalan (corpus, etc.)


Comment ajouter des mots dans les dictionnaires

Lorsqu'Apertium est développé ou adapté, l'opération qui sera probablement réalisée, sera le développement de ses dictionnaires. En fait, il sera beaucoup plus commun que l'ajout des règles de transfert ou de post-génération.

IMPORTANT: À chaque fois que les modifications d'un groupe sont faites pour chaque dictionnaire, les modules doivent être compilés à nouveau. Tapez make dans le répertoire où les données linguistiques sont gardées (apertium-es-ca, apertium-es-gl ou ce qui peut être applicable) pour que le système génère des nouveaux fichiers binaires.

Si vous voulez ajouter un nouveau mot à Apertium, vous devez ajouter trois entrées dans les dictionnaires. Supposons que vous travaillez avec la paire espagnol-catalan. Dans ce cas, vous devez ajouter:


  1. une entrée dans le dictionnaire monolingue espagnol: pour que le traducteur puisse analyser ("comprendre") le mot lorsqu'il le trouve dans un texte, et le générer lorsqu'il va le traduire vers l'espagnol.
  2. une entrée dans le dictionnaire bilingue: pour que vous puissiez dire à Apertium comment traduire ce mot d'une langue à l'autre.
  3. une entrée dans le dictionnaire monolingue catalan: pour que le traducteur puisse analyser ("comprendre") le mot lorsqu'il le trouve dans un texte, et le générer lorsqu'il va le traduire vers le catalan.

Vous devrez aller au répertoire ayant les dictionnaires XML (pour la paire espagnol-catalan, c'est apertium-es-ca) et ouvrir avec un éditeur de texte ou un éditeur XML spécialisé les trois fichiers des dictionnaires précités: apertium-es-ca.es.dix, apertium-es-ca.es-ca.dix and apertium-es-ca.ca.dix. Les entrées que vous devez créér dans ces trois dictionnaires partagent une structure commune.


Dictionnaire monolingue (Espagnol)

Vous voulez, par exemple, ajouter l'adjectif espagnol « cósmico », dont l'équivalent en catalan est « còsmic ». La première étape est d'ajouter ce mot dans le dictionnaire monolingue espagnol. Vous pouvez constater qu'un dictionnaire monolingue a essentiellement deux types des données: les paradigmes (dans la section "<pardefs>" du dictionnaire, chaque paradigme dans un élément <pardef>) et les entrées des mots (dans la <section> « main » du dictionnaire, chacune dans un élément <e>). Les entrées des mots sont des lemmes (cela représente le mot tel que vous le trouveriez dans un dictionnaire typique en papier) plus l'information grammaticale; les paradigmes contiennent les données d'inflexion de toutes les lemmes dans le dictionnaire. Vous pouvez trouver un mot en particulier en cherchant la séquence lm="mot" (lm signifie lemme). (L'élément lm est optionnel et d'autres dictionnaires peuvent ne pas l'avoir). Regardez les entrées des mots dans le dictionnaire monolingue espagnol, par exemple, l'entrée de l'adjectif « bonito ». Vous pouvez la trouver en cherchant lm=« bonito »:

     <e lm="bonito">
       bonit
       <par n="absolut/o__adj"/>
     </e>

Pour ajouter un mot, vous devrez créer une entrée avec la même structure. La partie entre et contient le préfixe du mot ce qui est commun pour toutes les formes infléchies, et l'élément <par> fait référence à l'inflexion du paradigme de ce mot. Par conséquent, cette entrée signifie que l'adjectif « bonito » infléchit tout comme l'adjectif « absoluto » ayant la même analyse morphologique: les formes bonito, bonita, bonitos, bonitas sont équivalentes aux formes absoluto, absoluta, absolutos, absolutas ayant l'analyse morphologique: adj m sg, adj f sg, adj m pl and adj f pl respectivement. Maintenant, vous devez décider quelle est la catégorie lexicale du mot que vous voulez ajouter. Le mot « cósmico » est un adjectif comme « bonito ». Par la suite, vous devez trouver le paradigme approprié pour cet adjectif. A-t-il la même inflexion que « bonito » et « absoluto »? Pouvez-vous dire cósmico, cósmica, cósmicos, cósmicas? La réponse est oui. Avec toute cette information vous pouvez maintenant créer l'entrée correcte:

     <e lm="cósmico">
       cósmic
       <par n="absolut/o__adj"/>
     </e>

Si le mot que vous voulez ajouter a un paradigme différent, vous devez le chercher dans le dictionnaire et l'assigner à l'entrée. Vous avez deux chemins pour trouver le paradigme approprié: soit en regardant la section <pardefs> du dictionnaire, où tous les paradigmes sont définis dans un élément <pardefs>, soit en cherchant un autre mot qui pourrait déjà exister dans le dictionnaire ayant la même inflexion du paradigme que le mot à ajouter. Par exemple, si vous voulez ajouter le mot « genoma » vous devez trouver un paradigme approprié pour un nom dont le genre est masculin et qui fait sont pluriel en ajoutant un -s. Ce sera le paradigme « abismo_n » dans notre dictionnaire actuel. Par conséquent, l'entrée de ce nouveau mot serait:

     <e lm="genoma">
        <i>genoma</i>
        <par n="abismo__n"/>
      </e>

Dans des cas exceptionnels vous devrez créer un nouveau paradigme pour un certain mot . Vous pouvez regardez la structure d'autres paradigmes et en créer un correctement. Pour une description plus détaillée des paradigmes et des entrées des mots dans les dictionnaires, consultez la section 3.1.2 de la documentation du système.


Dictionnaire monolingue (Catalan)

Une fois que vous avez ajouté le mot dans un dictionnaire monolingue, vous devez le refaire dans l'autre dictionnaire monolingue de la paire de traduction (dans notre exemple, le dictionnaire monolingue catalan) en utilisant la même structure. Le résultat serait:

    <e lm="còsmic">
       <i>còsmi</i>
       <par n="acadèmi/c__adj"/>
    </e>


Dictionnaire monolingue (Galicien)

Au cas où vous essayez d'améliorer les dictionnaires XML pour la paire espagnol-galicien, vous devrez vous adresser au répertoire apertium-es-gl et vous devrez ouvrir avec un éditeur de texte ou avec un éditeur XML spécialisé les trois fichiers des dictionnaires apertium-es-gl.es.dix, apertium-es-gl.es-gl.dix and apertium-es-gl.gl.dix. Dans ce cas, une fois que vous avez ajouté le nouveau mot espagnol « genoma » dans le dictionnaire monolingue espagnol (apertium-es-gl.es.dix), vous devez ajouter le mot galicien équivalent « xenoma » dans le dictionnaire monolingue galicien (apertium-es-gl.gl.dix), ce serait:

    <e lm="xenoma">
       <i>xenoma</i>
       <par n="Xulio__n"/>
    </e>

Dictionnaire bilingue

La dernière étape consiste à ajouter la traduction dans le dictionnaire bilingue. Normalement, un dictionnaire bilingue n'a pas de paradigmes, mais des lemmes. Une entrée contient seulement le lemme dans les deux langues et le premier symbole grammatical (la catégorie lexicale) de chacun.

Les entrées ont un côté gauche (<l>) et un côté droit (<r>), et chaque langue doit toujours se placer dans la même position: dans notre système, il a été convenu que l'espagnol occupe le côté gauche et que le catalan, le galicien et le portugais occupent le côté droit. Une fois que le « côté » a été convenu dans le système, il a fallu observer les dictionnaires en entière pour que la traduction fonctionne.

En ajoutant le lemme de deux mots, le système traduira toutes les formes infléchies (les symboles grammaticaux sont copiés du mot de la langue de départ au mot de la langue d'arrivée. Cela fonctionnera seulement si le mot de la langue de départ et le mot de la langue d'arrivée sont grammaticalement équivalents, c'est-à-dire, s'ils partagent exactement les mêmes symboles morphologiques pour toutes leurs formes infléchies. C'est le cas de notre exemple; par conséquent, l'entrée que vous devez ajouter dans les dictionnaire bilingue est:

     <e> 
        <p>
          <l>cósmico<s n="adj"/></l>
          <r>còsmic<s n="adj"/></r>
        </p>
      </e>

Cette entrée traduira toutes les formes infléchies, c'est-à-dire, adj m sg, adj f sg, adj m pl and adj f pl. Cela fonctionne pour la traduction dans les deux directions: de l'espagnol au catalan et du catalan à l'espagnol.

Dans le cas de la paire espagnol-galicien, l'entrée bilingue suivante dans le dictionnaire bilingue espagnol-galicien (apertium-es-gl.es-gl) traduira toutes les formes infléchies pour les mots équivalents genoma/xenoma dans les deux directions, c'est-à-dire, de l'espagnol au galicien et du galicien à l'espagnol:

     <e> 
        <p>
          <l>genoma<s n="n"/></l>
          <r>xenoma<s n="n"/></r>
        </p>
      </e>

Qu'est-ce qu'on doit faire si la paire de mots n'est pas équivalente grammaticalement (leurs symboles grammaticaux ne sont pas exactement les mêmes)? Dans ce cas, vous devez préciser tous les symboles grammaticaux (dans le même ordre qu'ils sont précisés dans les dictionnaires monolingues) jusqu'à ce que vous trouvez le symbole qui diffère parmi le mot de la langue de départ et le mot de la langue d'arrivée. Par exemple, le nom espagnol « limón » est masculin et son équivalent en catalan, « llimona » est féminin. L'entrée dans le dictionnaire bilingue doit être:

      <e>
        <p>
          <l>limón<s n="n"/><s n="m"/></l>
          <r>llimona<s n="n"/><s n="f"/></r>
        </p>
      </e>

Un problème plus compliqué surgit lorsque deux mots ont des symboles grammaticaux différents et l'information grammaticale du mot de la langue de départ n'est pas suffisante pour déterminer le genre (masculin ou féminin) ou le nombre (singulier ou pluriel) du mot de la langue d'arrivée. Prenez à titre d'exemple l'adjectif espagnol « canadiense ». Son genre est (masculin-féminin) et il reste invariable, c'est-à-dire, il peut suivre soit un nom masculin, soit un nom féminin (hombre canadiense, mujer canadiense). De l'autre côté, en catalan l'adjectif a une inflexion différente pour le masculin et le féminin (home canadenc, dona canadenca). Par conséquent, lorsqu'on traduit de l'espagnol au catalan il n'est pas possible à savoir si l'adjectif espagnol (mf) doit être traduit comme un adjectif féminin ou masculin au catalan, sans regarder le mot qui l'accompagne. Dans ce cas, le symbole « GD » (« genre à déterminer ») est utilisé au lieu du symbole de genre. Le genre des mots sera déterminé par le module de transfert structural, moyennant une règle de transfert (une règle qui détecte le genre du nom précédent dans ce cas précis).

Par conséquent, « GD » doit être employé seulement lorsqu'on traduit de l'espagnol au catalan, mais pas du tout lorsqu'on traduit du catalan à l'espagnol, étant donné qu'en espagnol le genre sera toujours « mf » quoi qu'il en soit le genre du mot original.

Dans le dictionnaire bilingue vous devrez ajouter, dans ce cas, plusieurs entrées avec des indications directionnelles, puisque vous devez préciser dans quelle direction de traduction le genre reste indéterminé. Les entrées pour cet adjectif seraient:

     <e r="LR">
        <p>
          <l>canadiense<s n="adj"/><s n="mf"/></l>
          <r>canadenc<s n="adj"/><s n="GD"/></r>
        </p>
      </e>
      <e r="RL">
        <p>
          <l>canadiense<s n="adj"/><s n="mf"/></l>
          <r>canadenc<s n="adj"/><s n="f"/></r>
        </p>
      </e>
      <e r="RL">
        <p>
          <l>canadiense<s n="adj"/><s n="mf"/></l>
          <r>canadenc<s n="adj"/><s n="m"/></r>
        </p>
      </e>

« LR » signifie « left to right » (de gauche à droite), et « RL », « right to left » (de droite à gauche). Comme l'espagnol est à droite et le catalan à gauche, l'adjectif sera « GD » seulement lorsqu'on traduit de l'espagnol au catalan (« LR »). Pour la traduction « RL » vous devez créer deux entrées, l'une pour l'adjectif féminin et l'autre pour l'adjectif masculin.

Le même principe est appliqué lorsqu'il n'est pas possible de déterminer le nombre (singulier ou pluriel) du mot d'arrivée à cause des raisons indiquées ci-dessus. Par exemple, le nom espagnol « rascacielos » (gratte-ciel) est invariable en nombre, c'est-à-dire, il peut être singulier ainsi que pluriel (un rascacielos, dos rascacielos). En catalan, d'un autre côté, le nom a une inflexion différente pour le singulier et pour le pluriel (un gratacel, dos gratacels). Dans ce cas, le symbole utilisé est « ND » (« nombre à déterminer ») et les entrées seraient comme celle-ci:

      <e r="LR">
        <p>
          <l>rascacielos<s n="n"/><s n="m"/><s n="sp"/></l>
          <r>gratacel<s n="n"/><s n="m"/><s n="ND"/></r>
        </p>
      </e>
      <e r="RL">
        <p>
          <l>rascacielos<s n="n"/><s n="m"/><s n="sp"/></l>
          <r>gratacel<s n="n"/><s n="m"/><s n="pl"/></r>
        </p>
      </e>
      <e r="RL">
        <p>
          <l>rascacielos<s n="n"/><s n="m"/><s n="sp"/></l>
          <r>gratacel<s n="n"/><s n="m"/><s n="sg"/></r>
        </p>
      </e>

Pour une description plus détaillée de ce type d'entrée, consultez la section 3.1.2.4.2 de la documentation du système.


Comment ajouter des restrictions directionnelles

Dans l'exemple précédent nous avons déjà vu l'utilisation des restrictions directionnelles pour des entrées avec le genre et le nombre indéterminés (« GD » ou « ND »). Les restrictions peuvent être également faites dans d'autres cas. Il est important de noter que la version actuelle d'Apertium ne peut fournir qu'un équivalent pour chaque forme lexicale de la langue de départ (une forme lexicale est le lemme plus son information grammaticale), c'est-à-dire, la désambiguation du sens du mot n'est pas réalisée. [Note: Le système ne réalise que la désambiguation de la partie du discours pour les mots homographes, c'est-à-dire, pour des mots ambigus qui peuvent être analysés à plusieurs formes lexicales, comme « vino » en espagnol, qui peut signifier « vin » ainsi que « il vint - il/elle est venu/e ». Ce type de désambiguation est réalisée par le tagger.] Lorsqu'un lemme peut être traduit de deux ou plusieurs façons, il faut en choisir une (la plus générale, la plus fréquente,etc.). Vous pouvez dire à Apertium qu'un certain mot doit être compris (analysé) mais pas généré, car ce n'est pas la traduction d'un lemme de la langue de départ.

Nous allons voir cela avec un exemple. Le mot espagnol « muñeca » peut être traduit en catalan de deux façons différentes selon le sens: « canell » (poignet) ou « nina » (poupée). Le contexte décide quelle traduction est la correcte, mais Apertium, dans son état actuel, ne peut pas prendre une telle décision (regardez, cependant, à la section des unités multimots pour voir comment éviter ce problème). Par conséquent, vous devez décider le mot équivalent lorsqu'on traduit de l'espagnol au catalan. Du catalan à l'espagnol, les deux mots peuvent être traduits comme « muñeca » sans aucun problème. Vous devez préciser toutes ces circonstances dans les entrées du dictionnaire en utilisant des restrictions directionnelles (« LR » qui signifie « left to right », c'est-à-dire, espagnol-catalan, et « RL » qui signifie « right to left », c'est-à-dire, catalan-espagnol). Si vous décidez de traduire « muñeca » comme « canell » dans tous les cas, les entrées dans le dictionnaire bilingue seraient:

      <e>
        <p>
          <l>muñeca<s n="n"/><s n="f"/></l>
          <r>canell<s n="n"/><s n="m"/></r>
        </p>
      </e>

      <e r="RL">
        <p>
          <l>muñeca<s n="n"/></l>
          <r>nina<s n="n"/></r>
        </p>
      </e>

Cela veut dire que les directions de traduction seront:

     muñeca --> canell
     muñeca <-- canell
     muñeca <-- nina

(Notez qu'il y a aussi un changement de genre dans le cas de « muñeca » (féminin) et « canell » (masculin))

Il doit être souligné qu'un lemme ne peut pas avoir deux traductions dans la langue d'arrivée, parce que le système produirait une erreur lorsqu'on traduit ce lemme (consultez la section « Comment détecter les erreurs » ci-dessous pour voir comment trouver et corriger ces erreurs et d'autres types d'erreurs). Lorsqu'un mot peut être traduit de deux façons différentes dans la langue d'arrivée quelque soit le contexte, vous devez en choisir un comme l'équivalent de traduction et en laisser l'autre comme un lemme qui peut être analysé, mais pas généré, en utilisant des restrictions directionnelles comme dans l'exemple précédent. Par exemple, les lemmes catalans « mot » et « paraula » peuvent être traduits à l'espagnol comme « palabra » (mot), donc l'entrée dans le dictionnaire bilingue serait:

       <e>
        <p>
          <l>palabra<s n="n"/></l>
          <r>paraula<s n="n"/></r>
        </p>
      </e>
      <e r="RL">
        <p>
          <l>palabra<s n="n"/><s n="f"/></l>
          <r>mot<s n="n"/><s n="m"/></r>
        </p>
      </e>

Par conséquent, pour ces lemmes les directions de traduction seront:

     palabra --> paraula
     palabra <-- paraula
     palabra <-- mot

Quelqu'un doit aussi préciser les restrictions concernant la direction de traduction dans le dictionnaire monolingue. Par exemple, les deux formes espagnoles « cantaran » ou « cantasen » sont analysées comme « cantar », verbe, subjonctif imparfait, 3ème personne du pluriel, mais lorsqu'on génère le texte en espagnol, quelqu'un doit décider quelle forme va être généré. Les dictionnaires monolingues sont lus dans les deux directions selon leur but: pour l'analyse, la direction de lecture est de gauche à droite; pour la génération, de droite à gauche. Par conséquent, le mot qui doit être analysé, mais pas généré, doit avoir la restriction « LR », et le mot qui doit être généré, mais pas analysé, doit avoir la restriction « RL ».


Comment ajouter des multimots

Il est possible de créer des entrées constituées de deux ou plusieurs mots, à condition que ces mots puissent construire une seule « unité de traduction ». Ces « unités multimots » peuvent aussi être utiles lorsqu'il faut choisir l'équivalent correct pour un mot dans une expression fixe. Par exemple, le mot espagnol « dirección » peut être traduit de deux façons au catalan: « direcció » (direction, management) et «adreça» (adresse); il peut constituer, par exemple, des unités multimots fréquentes telles que « dirección general » --> « direcció general » (direction générale) et « dirección postal » --> « adreça postal » (adresse postale). Ceci peut nous aider à obtenir une meilleure traduction dans quelques situations.

Les unités multimots peuvent être catégorisées comme: des multimots avec une inflexion interne et des multimots sans une inflexion interne.

Les multimots sans une inflexion interne sont comme les entrées d'un mot, mais il faut insérer l'élément (qui représente un blanc) entre les mots qui composent l'unité. Par conséquent, si vous voulez ajouter, par exemple, le multimot espagnol « hoy en día » (aujourd'hui), dont l'équivalent en catalan est « avui dia », les entrées que vous devez ajouter dans les trois dictionnaires sont:


  • Dictionnaire monolingue espagnol:
          <e lm="hoy en día">
            <i>hoy<b/>en<b/>día</i>
            <par n="ahora__adv"/>
           </e>
  • Dictionnaire monolingue catalan:
          <e lm="avui dia">
            <i>avui<b/>dia</i>
            <par n="ahir__adv"/>
          </e>
 
  • Dictionnaire bilingue espagnol-catalan:
          <e>
            <p>
              <l>hoy<b/>en<b/>día<s n="adv"/></l>
              <r>avui<b/>dia<s n="adv"/></r>
            </p>
          </e>

Pour la paire espagnol-galicien, si vous voulez ajouter, par exemple, le multimot espagnol « manga por hombro » (être sens dessus dessous) dont l'équivalent en galicien est « sen xeito nin modo ». Les entrées que vous devez ajouter sont:

  • Dictionnaire monolingue espagnol:
          <e lm="manga por hombro">
              <i>manga<b/>por<b/>hombro</i>
              <par n="abajo__adv"/>
          </e>
  • Dictionnaire monolingue galicien:
          <e lm="sen xeito nin modo">
              <i>sen<b/>xeito<b/>nin<b/>modo</i>
              <par n="Deo_gratias__adv"/>
          </e>
  • Dictionnaire bilingue espagnol-galicien:
          <e>
             <p>
                <l>manga<b/>por<b/>hombro<s n="adv"/></l>
                <r>sen<b/>xeito<b/>nin<b/>modo<s n="adv"/></r>
             </p>
          </e>

Les multimots avec une inflexion interne sont constitués d'un mot qui peut infléchir (normalement un verbe) et d'un élément invariable. Pour ces entrées vous devez préciser le paradigme d'inflexion juste après le mot qui infléchit. La partie invariable doit être marquée avec l'élément <g> dans le côté droit. Les blancs entre les mots sont indiqués, comme dans le cas précédent, avec l'élément . Regardez l'exemple suivant pour le multimot espagnol « echar de menos » (manquer), traduit au catalan comme « trobar a faltar »:

  • Dictionnaire monolingue espagnol:
     <e lm="echar de menos">
        <i>ech</i>
           <par n="aspir/ar__vblex"/>
        <p>
           <l><b/>de<b/>menos</l>
           <r><g><b/>de<b/>menos</g></r>
        </p>
      </e>          
  • Dictionnaire monolingue catalan:
      <e lm="trobar a faltar">
        <i>trob</i>
           <par n="abander/ar__vblex"/>
        <p>
           <l><b/>a<b/>faltar</l>
           <r><g><b/>a<b/>faltar</g></r>
        </p>
      </e>
  • Dictionnaire bilingue espagnol-catalan:
     <e>
       <p>
         <l>echar<g><b/>de<b/>menos</g><s n="vblex"/></l>
         <r>trobar<g><b/>a<b/>faltar</g><s n="vblex"/></r>
      </p>
     </e>


Bref introduction aux paradigmes

Les paradigmes des exemples précédents contiennent seulement un symbole de la forme lexicale, puisque les adverbes n'ont pas d'inflexion. Vous pouvez le constater dans cet exemple:

     <pardef n="ahora__adv">
          <e>
             <p>
                <l/>
                <r><s n="adv"/></r>
             </p>
          </e>
    </pardef>

Les paradigmes sont construits comme une entrée lexicale. Nous avons vu jusqu'à présent des entrées lexicales dont la partie commune du lemme est mise entre <i> </i>:

      <e lm="cósmico">
        <i>cósmic</i>
        <par n="absolut/o__adj"/>
      </e>

Néanmoins, vous pouvez aussi représenter la même chose avec une paire de séquences: une séquence à gauche <l> et une séquence à droite <r> dans un élément <p> :

      <e lm="cósmico">
         <p>
            <l>cósmic</l>
            <r>cósmic</r>
         </p>
         <par n="absolut/o__adj"/>
      </e>

Ces deux entrées sont équivalentes. L'usage de l'élément <i> nous aide à simplifier et compacter les entrées, et vous pouvez l'utiliser lorsque le côté gauche et le côté droit de la paire séquentielle sont identiques. Comme nous vous avons déjà expliqué, les dictionnaires monolingues sont lus LR pour l'analyse d'un texte et RL pour la génération. Par conséquent, lorsqu'il existe une différence entre la séquence analysée et la séquence généré (qui n'est pas très courant) l'entrée ne peut pas être écrite moyennant l'élément <i>. Dans les paradigmes, les séquences gauches et droites ne sont jamais identiques, puisque le côté droit doit contenir les symboles grammaticales qui vont passer dans tous les modules du système.


Considérez le fait de nous fournir vos améliorations des données lexicales

Si vous avez ajouté avec succès des données lexicales banalisées dans n'importe quelles paires de langues d'Apertium, merci de considérer le fait de les fournir dans le projet pour que nous puissions offrir un meilleur toolbox à la communauté. Vous pouvez nous adresser vos données (dans trois fichiers XML, un fichier pour chaque dictionnaire monolingue et un autre pour le dictionnaire bilingue) aux adresses suivantes:

Données espagnol-catalan
	Mireia Ginestí: mginesti [at] dlsi [dot] ua [dot] es
Données espagnol-portugais 
	Carme Armentano: carmentano [at] dlsi [dot] ua [dot] es
Données espagnol-galicien
	Xavier Gómez-Guinovart: xgg [at] uvigo [dot] es

Si vous pensez que vous allez contribuer plus profondément dans le projet, vous pouvez vous inscrire dans l'équipe de développement sur www.sourceforge.net. Si vous n'avez pas une compte à sourceforge, merci d'en créer une; puis adressez-vous à Mikel L. Forcada (mlf [at] ua [dot] es), à Sergio Ortiz (sortiz [at] dlsi [dot] ua [dot] es) ou à Xavier Gómez Guinovart, si vous êtes intéressés à la paire de langues espagnol-galicien, et expliquez brièvement vos motivations et vos expériences professionnelles pour vous inscrire dans le projet. La façon la plus courante de contribuer est d'utiliser CVS; tant qu'un membre du projet, vous devrez être capable d'enregistrer directement vos changements dans les dictionnaires.

L'ajout des contributions lexicales simples a été récemment simplifié moyennant des formulaires sur le web à http://xixona.dlsi.ua.es/prototype/webform/, afin que ceux qui y contribuent ne doivent pas traiter directement avec XML.

Vous devriez être conscient du fait que les données que vous avez fourni au projet, une fois ajoutées, seront distribuées librement conformément à l'actuelle licence (GNU General Public License or Creative Commons 2.5 attribution-sharealike-noncommercial, telle qu'elle est indiquée). Assurez-vous que les données fournies ne sont pas affectées par aucun type de licence pouvant être incompatible avec les licences utilisées dans ce projet. Aucune sorte d'engagement ou contrat est fait entre vous et ceux qui développent le projet. Si vous avez des questions ou vous envisagez de faire une contribution massive, contactez Mikel L. Forcada.


Comment ajouter des règles de transfert structural (grammaire)

Les règles de transfert structural réalisent des transformations dans le texte désambiguïsé, ce qui est nécessaire à cause des divergences grammaticales, syntaxiques et lexicales entre les deux langues concernées (des changements de genre et de nombre qui assurent un accord dans la langue d'arrivée, la mise en ordre des mots, des changements des prépositions,etc.). Les règles détectent des motifs (séquences) dans les formes lexicales du texte de départ et leur appliquent les transformations correspondantes. Le module détecte par lecture le motif le plus long gauche-droite; par exemple, la phrase « the big cat » sera détectée et traitée par la règle pour déterminant – adjectif – nom et non pas par la règle pour déterminer – adjectif, car le premier modèle est le plus long. Si deux motifs ont la même longueur, la règle appliquée est celle qui est définie en premier.

Le module de transfert structural (généré à partir du fichier des règles de transfert structural) appelle le module de transfert lexical (généré à partir du dictionnaire bilingue) pendant tout le procès pour déterminer les équivalents de la langue d'arrivée à partir des formes lexicales de la langue de départ.

Les règles de transfert structural sont comprises dans un fichier XML, chacune pour chaque direction de traduction (par exemple, pour la traduction de l'espagnol au catalan, le fichier est apertium-es-ca.trules-es-ca.xml). Vous devez éditer ce fichier si vous voulez ajouter ou modifier des règles de transfert.

Les règles ont un motif et une partie d'action. Le motif précise quels séquences des formes lexicales doivent être détectées et traitées. L'action décrit les vérifications et les transformations qui doivent être faites dans leurs constituants. Les opérations de transformation les plus courantes (telles que l'accord de genre et de nombre) sont définies dans une macroinstruction qui est appelée à l'intérieur de la règle. À la fin de la partie de l'action de la règle, les formes lexicales résultantes de la langue d'arrivée sont envoyées afin qu'elles soient traitées par les modules suivants dans le système de traduction.

Un fichier de règles de transfert contient quatre sections avec les définitions des éléments utilisés dans les règles, et une cinquième section où les règles actuelles sont définies. Les sections sont les suivantes:

  • <section-def-cats>: Cette section contient la définition des catégories qui seront utilisées dans les motifs des règles (c'est-à-dire, le type des formes lexicales qui sera détecté par une règle quelconque). En ce qui concerne la règle présentée ci-dessous, les catégories « det » et « nom » (déterminant et nom) doivent être définies ici. Les catégories sont définies en précisant les symboles grammaticaux correspondantes aux formes lexicales. Un astérisque montre qu'un ou plusieurs symboles suivent ceux qui ont été précisés. L'exemple suivant est la définition de la catégorie « det », qui groupe les déterminants et les prédéterminants dans la même catégorie, car ils jouent le même rôle dans les objectifs de transfert:
                             <def-cat n="det">         
                                     <cat-item tags="det.*"/>
                                     <cat-item tags="predet.*"/>
                             </def-cat>

Il est aussi possible de définir un lemme quelconque comme une catégorie. À continuation, vous pouvez le constater avec la préposition "en":

                           <def-cat n="en">
                                    <cat-item lemma="en" tags="pr"/>
                          </def-cat>


  • <section-def-attrs>: Cette section contient la définition des attributs qui seront utilisés à l'intérieur des règles, dans la partie d'action. Vous avez besoin des attributs pour toutes les catégories définies à la section précédente, lorsqu'ils vont être utilisés dans la partie d'action de la règle (pour les vérifier ou pour les envoyer à la fin de la règle), ainsi que pour les autres attributs nécessaires dans la règle (tels que le genre et le nombre). Les attributs doivent être définis en utilisant leur symboles grammaticaux correspondantes et ils ne peuvent pas avoir des astérisques; son nom doit être unique. L'exemple suivant montre les définitions pour les attributs « a_det » (pour les déterminants) et « gen » (pour le genre):
                             <def-attr n="a_det">         
                                    <attr-item tags="det.def"/>
                                    <attr-item tags="det.ind"/>
                                    <attr-item tags="det.dem"/>
                                    <attr-item tags="det.pos"/>
                                    <attr-item tags="predet"/>
                            </def-attr>

                           <def-attr n="gen">         
                                    <attr-item tags="m"/>
                                    <attr-item tags="f"/>
                                    <attr-item tags="mf"/>
                                    <attr-item tags="nt"/>
                                    <attr-item tags="GD"/>
                            </def-attr>
  • <section-def-vars> : Cette section contient la définition des variables utilisées dans les règles.
                          <def-var n="interrogativa"/>
  • <section-def-macros> : Les macroinstructions sont définies ici. Elles contiennent les séquences de code fréquemment utilisées dans les règles; de cette façon, les linguistes ne doivent pas écrire plusieurs fois les mêmes actions. Il y a, par exemple, des macroinstructions pour les opérations d'accord de genre et de nombre.
  • <section-rules> : Dans cette section les règles de transfert structural sont écrites.

L'exemple suivant montre un règle qui détecte la séquence déterminant – nom:

<rule>
      <pattern>
          <pattern-item n="det"/>
          <pattern-item n="nom"/>
      </pattern>
      <action>
          <call-macro n="f_concord2">
              <with-param pos="2"/>
              <with-param pos="1"/>
          </call-macro>    
          <out>    
              <lu>
                  <clip pos="1" side="tl" part="whole"/>
              </lu>
              <b pos="1"/>       
              <lu>
                  <clip pos="2" side="tl" part="whole"/>
              </lu> 
          </out>     
     </action>
</rule>

Une partie de l'action effectuée dans ce motif est précisée dans la macroinstruction « f_concord2 » et définie à la <section-def-macros>. Cela réalise des opérations d'accord de genre et de nombre: s'il y a un changement de genre ou de nombre entre la langue de départ et la langue d'arrivée (en ce qui concerne le nom), le déterminant change son genre ou son nombre convenablement; en outre, si le genre ou le nombre sont indéterminés (« GD » ou « ND », ce qui est expliqué à la section précédente « Comment ajouter des mots dans les dictionnaires monolingues et bilingues »), le nom reçoit la valeur de genre et de nombre correcte du déterminant précédent. Dans Apertium es-ca, es-gl and es-pt systems, il y a des macroinstructions d'accord définies pour une, deux, trois ou quatre unités lexicales (f_concord1, f_concord2, f_concord3, f_concord4). Lorsque dans une règle les macroinstructions sont appelées, il doit être précisé quelle est l'unité lexicale principal (celle qui détermine convenablement le genre et le nombre des autres unités lexicales) et quelles unités lexicales du motif doivent être incluses dans les opérations d'accord, par ordre d'importance. Cela est fait avec l'élément <with-param pos=""/>. Dans la règle précédente, l'unité lexicale principal est le nom (position « 2 » dans le motif) et la seconde est le déterminant (position « 1 » dans le motif).

Après avoir fait les actions pertinentes, les formes lexicales résultantes sont envoyées à l'élément <out>. Chaque unité lexicale est définie avec un <clip>. Ses attributs signifient:

  • pos: fait référence à la position de la forme lexicale dans le motif. « 1 » est la première forme lexicale (le déterminant) et « 2 » la seconde (le nom).
  • side: indique si la forme lexicale est dans la langue de départ (« sl ») ou dans la langue d'arrivée (« tl »). Bien entendu, les mots sont toujours envoyés dans la langue d'arrivée; les formes lexicales de la langue de départ peuvent être nécessitées dans une règle, lorsqu'on teste ses attributs ou ses caractéristiques.
  • part: indique quelle partie de la forme lexicale est concernée dans le 'clip'. Vous pouvez utiliser quelques valeurs prédéfinies:
                       -whole: la forme lexicale en entière (lemme et symboles grammaticaux). Utilisé seulement lorsque l'unité lexicale est envoyé  (dans un élément <out>).
                       -lem: le lemme de l'unité lexicale.
                       -lemh: la tête du lemme d'un multimot avec une inflexion interne.
                       -lemq: la queue du lemme d'un multimot avec une inflexion interne.

En plus de ces valeurs prédéfinies, vous pouvez utiliser tout attribut défini à <section-def-attrs> (par exemple « gen » ou « a_det »).

Les valeurs « lemh » et « lemq » sont utilisés lorsque des multimots avec une inflexion interne sont envoyés (voyez la section « Comment ajouter des multimots ») pour placer la tête et la queue du lemme dans la correcte position, car le module précédent a changé de place la queue juste après la tête du lemme à cause des plusieurs raisons. Dans la pratique, sur notre système, cela signifie que vous devez utiliser ces valeurs au lieu de 'whole' lorsque des verbes sont envoyés, car dans nos dictionnaires des multimots avec une inflexion interne il y a toujours des verbes. Si vous utilisez la valeur 'whole' lorsqu'ils sont envoyés, le multimot ne serait pas bien formé (la tête et la queue du lemme n'aurait pas la correcte position)

Par conséquent, une règle ayant un verbe dans son motif doit envoyer les formes lexicales comme dans les deux exemples suivants:

<rule>

      <pattern>
          <pattern-item n="verb"/>
      </pattern>
      <action>
          <out>               
             <lu>
                 <clip pos="1" side="tl" part="lemh"/>
                 <clip pos="1" side="tl" part="a_verb"/>
                 <clip pos="1" side="tl" part="temps"/>
                 <clip pos="1" side="tl" part="persona"/>
                 <clip pos="1" side="tl" part="gen"/>
                 <clip pos="1" side="tl" part="nbr"/>
                 <clip pos="1" side="tl" part="lemq"/>
             </lu>       
         </out>
      </action>

</rule>


<rule>

     <pattern>
        <pattern-item n="verb"/>
        <pattern-item n="prnenc"/>
    </pattern>
    <action>
        <out>
            <mlu>
               <lu>
                  <clip pos="1" side="tl" part="lemh"/>
                  <clip pos="1" side="tl" part="a_verb"/>
                  <clip pos="1" side="tl" part="temps"/>
                  <clip pos="1" side="tl" part="persona"/>
                  <clip pos="1" side="tl" part="nbr"/>
               </lu>
               <lu>
                  <clip pos="2" side="tl" part="lem"/>
                  <clip pos="2" side="tl" part="a_prnenc"/>
                  <clip pos="2" side="tl" part="persona"/>
                  <clip pos="2" side="tl" part="gen"/>
                  <clip pos="2" side="tl" part="nbr"/>
                  <clip pos="1" side="tl" part="lemq"/>
              </lu> 
           </mlu>
      </out>
   </action>

</rule>

La première règle détecte un verbe et place la queue dans la correcte position, après cela, les symboles grammaticaux. L'unité lexicale est envoyée tout en précisant les attributs séparément: tête du lemme, catégorie lexicale (verbe), temps, personne, genre (pour les participes), nombre et queue du lemme.

La seconde règle détecte un verbe suivi d'un pronom enclitique et envoi les deux formes lexicales en précisant également les attributs séparément; la première unité lexicale est constituée de: tête du lemme, catégorie lexicale (verbe), temps, personne et nombre; la seconde unité lexicale est constituée de: lemme, catégorie lexicale (pronom enclitique), personne, genre, nombre et queue du lemme. Les deux unités lexicales (verbe et pronom enclitique) sont envoyés à l'élément <mlu>, car ils doivent atteindre le générateur morphologique comme une unité multilexicale (multimot).


Si vous voulez ajouter une nouvelle règle de transfert, vous devez suivre ces étapes:

  1. Précisez le motif que vous voulez détecter. Rappelez-vous que les mots sont traités seulement une fois par règle et que celles-ci sont traités gauche-droite en prenant la séquence la plus longue. Par exemple, imaginez que vous avez dans votre fichier des règles de transfert seulement deux règles, l'une pour le motif « déterminant - nom » et l'autre pour le motif « nom - adjectif ». La phrase espagnole « el valle verde » (la vallée verte) serait détectée et traitée pour la première règle et non pas par la seconde. Vous devrez ajouter une règle pour le motif « déterminant – nom - adjectif » si vous souhaitez que les trois unités lexicales soient traitées dans le même motif.
  2. Décrivez les opérations que vous voulez réaliser dans le motif. Sur Apertium es-ca, es-gl and es-pt, des opérations d'accord simple (accord de genre et de nombre) sont faciles à réaliser dans une règle moyennant une macroinstruction. Pour faire d'autres opérations, vous devez utiliser des éléments plus compliqués; pour une description plus détaillée du langage employé pour créer des règles, consultez la section 3.4.2 de la documentation du système. Vous pouvez également lire la DTD du fichier des règles de transfert structural (transfer.dtd) fournie avec le lot d'Apertium, dans lequel tous les éléments du langage sont décrits en anglais.
  3. Envoyez les unités lexicales du motif à la langue d'arrivée dans l'élément <out>. Chaque unité lexicale doit être incluse dans l'élément <lu>. Si deux ou plusieurs unités doivent être générées comme une unité multilexicale (seulement pour les pronoms enclitiques dans les paires de langues traitées jusqu'à présent), elles doivent être groupées dans l'élément <mlu>.

Tous les mots détectés par une règle (qui font partie du motif) doivent être envoyés à la fin de la règle pour que le module suivant (le générateur) les reçoit. Si une unité lexicale est détectée pour un motif et qu'elle n'est pas incluse dans l'élément <out>, elle ne sera pas générée.


Comment ajouter des données dans le tagger de la partie du discours

À écrire.


Reconversion du tagger de la partie du discours

Main article: Tagger training

À écrire.

Détection des erreurs

Il est facile de commettre des erreurs au moment d'ajouter des nouveaux mots ou des règles de transfert dans le système d'Apertium.

Il est possible qu'au moment de compiler des nouveaux fichiers, le système affiche un message d'erreur. Dans ce cas, c'est une erreur d'usage (l'oubli d'une étiquette XML, une étiquette qui n'est pas permise dans un certain contexte, etc.). Vous n'avez qu'aller au numéro de ligne indiqué pour le message d'erreur et compiler à nouveau. D'autres types d'erreurs ne sont pas détectés au moment de compiler, mais cela peut provoquer que le système ne traduise pas bien un mot ou qu'il donne une séquence textuelle incompréhensible. Il y a des erreurs linguistiques qui peuvent être détectées et corrigées à l'aide des conseils donnés dans ce chapitre. L'information suivante est pour les utilisateurs de Linux, car, pour le moment, Apertium ne travaille qu'avec cet OS.

Comme toutes les données traitées par le système, depuis le texte de départ vers le texte d'arrivée, circulent parmi les huit modules du système en format de texte plat, il est possible d'arrêter le flux de texte à tout moment afin de savoir les entrées et les sorties des données d'un certain module. Vous n'avez qu'à taper les ordres correctes dans le terminal en utilisant une structure pipeline pour que la sortie standard d'un module soit utilisée comme l'entrée du module suivant.

En utilisant les ordres echo ou cat, vous pouvez envoyer un texte dans un ou plusieurs modules pour analyser leurs sorties et détecter ainsi l'origine de l'erreur. Vous devez aller au répertoire où il se sont gardées les données linguistiques et taper les ordres expliqués ci-dessous.

See also

Source

The original version was transferred from source http://apertium.sourceforge.net/extending.html.