Multi-mots

From Apertium
Jump to navigation Jump to search

In English

Aperçu[edit]

lttoolbox (français) présente actuellement trois mécanismes pour créer des multi-mots, de complexité variable :

  1. insertion simple de blancs ; utilisez-le si vous voulez un mot avec un espace interne, mais seulement l'inflection à la fin
    • entrée : <e><i>record<b/>player</i><par n="house__n"/></e>
    • analyse : ^record player/record player<n><sg>$
    • analyse : ^record players/record player<n><pl>$
  2. <g/> est utilisé (en combinaison avec ) quand vous avez une inflection au milieu du mot, et une partie invariante à la fin
    • entrée : <e><i>café</i><par n="house__n"/><p><l><b/>au<b/>lait</l><r><g><b/>au<b/>lait</g></r></p></e>
    • analyse : ^café au lait/café<n><sg># au lait$
    • analyse : ^cafés au lait/café<n><pl># au lait$
  3. <j/> est utilisé quand vous voulez que le multi-mot soit séparé en deux unités lexicales, chacune avec sa propre analyse (ensemble de tags), où chaque partie peut varier indépendemment
    • entrée : <e>wr</i><par n="wr/ite__vblex"/><p><l><b/>about</l><r><j/>about<s n="pr"/></r></p></e>
    • analyse : ^write about/write<vblex><inf>+about<pr>/write<vblex><pres>+about<pr>$
    • analyse : ^writes about/write<vblex><pri><p3><sg>+about<pr>$

Plus d'information là dessus dans Utilisation simple et documentation (esp. sec.3.1.2.6).


Les multi-mots suivants ne sont pas très bien supportés pour l'instant:

  • Multi-mots d'accord : multi-mots complexes où deux parties (ou plus) montrent une sorte d'accord / dépendance des balises (ou ceux où certaines combinaisons de balises sont illégales)
    • lt-mwpp prend un fichier qui spécifie quelles combinaisons de lemmes sont multi-mots, et quelles balises doivent s'accorder, et générer toutes les combinaisons légales dans le format .dix de lttoolbox
  • Multi-mots discontinus : multi-mots qui ont un nombre arbitraire de mots sans relations entre eux, par exemple les verbes séparables dans les langues Germaniques

(mais voir les hacks ci-dessous)

Utilisation simple[edit]

Utilisation simple de <g/> et <b/>[edit]

Il y a un exemple de l'anglais à l'espéranto avec inflexion interne suivie par une partie invariante avec des espaces.

Dans en.dix on trouve

<e lm="become"><i>bec</i><par n="bec/ome__vblex"/></e>
<e lm="become acquainted">
  <i>bec</i>
  <par n="bec/ome__vblex"/>
  <p>
    <l><b/>acquainted</l>  
    <r><g><b/>acquainted</g></r>    
  </p>
</e>
<e lm="become acquainted with">
  <i>bec</i>
  <par n="bec/ome__vblex"/>
  <p>
    <l><b/>acquainted<b/>with</l>
    <r><g><b/>acquainted<b/>with</g></r>
  </p>
</e>

Donc become est conjugué comme un verbe normal et le reste est fixe (invariant). Notez que <b/> est un espace et que les mots fixes sont à l'intérieur de <g> </g>.

En espéranto, "become" (devenir) est "iĝi" (ou "fariĝi"), "become acquainted" (prendre connaissance) est "konatiĝi" et "become acquainted with" (prendre connaissance de) est "konatiĝi kun". Le iĝi/konatiĝi devrait être conjugué comme become. Ainsi, les entrées du bidix sont

<e><p><l>iĝi<s n="vblex"/></l><r>become<s n="vblex"/></r></p></e>
<e><p><l>konatiĝi<s n="vblex"/></l><r>become<g><b/>acquainted</g><s n="vblex"/></r></p></e>
<e><p><l>konatiĝi<g><b/>kun</g><s n="vblex"/></l><r>become<g><b/>acquainted<b/>with</g><s n="vblex"/></r></p></e>

Et le monodix espéranto

<e lm="iĝi"><i>iĝ</i><par n="verb__vblex"/></e>
<e lm="konatiĝi"><i>konatiĝ</i><par n="verb__vblex"/></e>
<e lm="konatiĝi kun">
  <i>konatiĝ</i>
  <par n="verb__vblex"/>
  <p>
    <l><b/>kun</l>
    <r><g><b/>kun</g></r>
  </p>
</e>	

Notez comment l'anglais fixe les mots <g><b/>acquaintedwith</g> devient <g><b/>kun</g>

Notez aussi que vous avez besoin au moins d'une règle de transfert de verbe pour vous assurer que la partie invariante ("lemq") est mise après les balises morphologiques (a_verb, temps):

    <rule comment="VBLEX">
      <pattern>
	<pattern-item n="vblex"/>
      </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="lemq"/>
          </lu>
        </out>
      </action>
    </rule>

Utilisation simple de <j/>[edit]

La documentation donne l'exemple suivant du monodix :

<e lm="del" r="LR"> 
  <p> 
    <l>del</l> 
    <r>de<s n="pr"/><j/>el<s n="det"/><s n="def"/><s n="m"/><s n="sg"/></r> 
  </p> 
</e> 

(C'est marqué r="LR" et donc sera utilisé seulement dans l'analyse.) Quand "del" est lu, la sortie de l'analyseur est

^del/de<pr>+el<det><def><m><sg>$

C'est passé comme ça au tagger, mais apertium-pretransfer le remplace par

^de<pr>$ ^el<det><def><m><sg>$^

avant l'examen du bidix.

Les cas compliqués[edit]

Il est possible d'avoir des combinaisons multi-mot plutôt complexes.

    <e lm="zračna luka">
      <i>zračn</i>
      <par n="zračn/a__adj"/>
      <p>
        <l><b/>luk</l>
        <r><g><b/>luk</g></r>
      </p>
      <par n="stolic/a__n"/>
    </e>
$ echo "zračna luka" |  lt-proc sh-mk.automorf.bin 
^zračna luka/zračna<adj><f><sg><nom># luka<n><f><gen><pl>/zračna<adj><f><sg><nom># luka<n><f><nom><sg>$

$ echo "zračna luka" |  lt-proc sh-mk.automorf.bin  | apertium-tagger -g sh-mk.prob 
^zračna<adj><f><sg><nom># luka<n><f><gen><pl>$

$ echo "zračna luka" |  lt-proc sh-mk.automorf.bin  | apertium-tagger -g sh-mk.prob  | apertium-pretransfer
^zračna# luka<adj><f><sg><nom><n><f><gen><pl>$
Vous avez besoin de considérer
  • Analyse
  • Transfert (ex. dans le bidix)
  • Génération
  • Multi-mots de tête initiale, et de tête finale (ex: adj + nom et verbes de phrase (?))
Problèmes 
  • Comment résoudre ^zračna# luka<adj><f><sg><nom><n><f><gen><pl>$ dans le bidix ?
Solutions
  • Avoir deux paradigmes pour chaque adjectif, un avec balises, un sans. (mauvais)
Cela nous laisserait avec : ^zračna luka<n><f><gen><pl>$ (essentiellement un paradigme orthographique).
  • Avoir plus d'une entrée par multi-mot — ce qui est fait dans apertium-es-ca, voir "dirección general", "direcciones generales". (mauvais)
  • Avoir un paradigme paramétré, qui quand il est appelé dans un sens émet un paradigme avec des symboles, et dans l'autre sens émet un paradigme sans symboles.
Ça devrait être seulement dans un sens, le problème viendrait quand on essaierait de générer. Comment récupère-on l'adjectif pour l'accorder avec le nom ?

Le hack espagnol[edit]

Voici comment c'est pris en compte dans la paire actuelle apertium-es-ca, ce qui est tenable pour l'espagnol, mais n'a aucune chance de marcher avec les langues slaves.

    <e lm="dirección general">
      <p>
        <l>dirección<b/>general</l>
        <r>dirección<b/>general<s n="n"/><s n="f"/><s n="sg"/></r>
      </p>
    </e>
    <e lm="dirección general">
      <p>
        <l>direcciones<b/>generales</l>
        <r>dirección<b/>general<s n="n"/><s n="f"/><s n="pl"/></r>
      </p>
    </e>

Le hack polonais[edit]

L'analyseur polonais utilise les fichiers metadix et métaparadigmes pour résoudre le problème des multi-mots, ce qui n'est pas souhaitable :

<pardef n="kamie/ń [nazębn]y__n">
  <e>
    <p>with the following entries
      <l>ń<b/></l>
      <r>ń<b/></r>
    </p>
    <i><prm/></i>
    <p>
      <l>y</l>
      <r>y<s n="n"/><s n="mi"/><s n="sg"/><s n="nom"/></r>
    </p>
  </e>
  <e>
    <p>
      <l>nia<b/></l>
      <r>ń<b/></r>
    </p>
    <i><prm/></i>
    <p>
      <l>ego</l>
      <r>y<s n="n"/><s n="mi"/><s n="sg"/><s n="gen"/></r>
    </p>
  </e>
  [etc.]
</pardef>

avec les entrées suivantes :

<e lm="kamień nazębny"><i>kamie</i><par n="kamie/ń [nazębn]y__n" prm="nazębn"/></e>
<e lm="kamień szlachetny"><i>kamie</i><par n="kamie/ń [nazębn]y__n" prm="szlachetn"/></e>

Le hack nynorsk[edit]

(Voir cette discussion sur mailing list pour les versions alternatives.)

Ce qu'on veut :

anbefale<vblex> => rå til
anbefale<vblex> ikke<adv> => rå ikkje til
publisere<vblex> => gje ut
publisere<vblex> helst<adv> daglig<adv> => gje helst dagleg ut

Par exemple, on veut qu'un verbe simple Bokmål soit traduit en verbe à particule, et que chaque chaîne suivant des adverbes soit placée entre le verbe (infléchi) et les particules (non infléchies / invariantes).

Lhe hack:

Pour la génération on n'a pas besoin actuellement des multi-mots dans le monodix (mais ça ne fait pas de mal). On a l'entrée multi-mot régulière dans le bidix :

 <e>       <p><l>rå<g><b/>til</g></l><r>anbefale</r></p><par n="vblex"/></e>

et la règle de transfert qui reconnait "vblex adv" s'écrit

      <out>
        <lu>
          <clip pos="1" side="tl" part="lemh"/>
          <clip pos="1" side="tl" part="a_verb"/>
          <clip pos="1" side="tl" part="temps"/>
        </lu>
        
        <lu><clip pos="2" side="tl" part="whole"/></lu>
        
        <lu><clip pos="1" side="tl" part="lemq"/></lu>
      </out>

Donc maintenant le transfert nous donnera le résultat suivant :

 echo ^anbefale<vblex><pret>$ ^ikke<adv>$ | apertium-transfer apertium-nn-nb.nb-nn.t1x nb-nn.t1x.bin nb-nn.autobil.bin
 ^rå<vblex><pret>$ ^ikkje<adv>$ ^# til$

Ainsi on a trois "lemmes" qui utilisent les entrées de dictionnaire pour la génération, le premier pour ("rå" et "ikkje") y sont déjà comme entrées régulière simple, le dernier est "# til", qu'on ajoute de cette manière :

   <e lm="# til" r="RL"><p><l>til</l><r># til</r></p></e>

Moche, mais ça fonctionne. Et comme il n'existe pas beaucoup de ces particules, le monodix Nynorsk n'a pas besoin de tellement d'entrées laides.

Bien sûr, le monodix Nynorsk pourrait aussi avoir des entrées "régulières" pour les multi-mots avec inflection interne pour prendre "rå til" quand il n'y a pas d'adverbes entre les deux, mais on ne sera pas capable d'analyser "rå ikkje/helst/dagleg til" avec la méthode ci-dessus.

Voir aussi[edit]