Difference between revisions of "Paire Occitan-Français"

From Apertium
Jump to navigation Jump to search
Line 202: Line 202:
*'''accord en genre entre sujet et attribut''' : par exemple, ''la maison est <u>grande</u>'' devient ''l'ostal es <u>grand</u>''.
*'''accord en genre entre sujet et attribut''' : par exemple, ''la maison est <u>grande</u>'' devient ''l'ostal es <u>grand</u>''.
*'''règles pour le superlatif''' : par exemple, ''la montagne <u>la plus</u> haute'' devient ''la montanha <u>mai</u> nauta''.
*'''règles pour le superlatif''' : par exemple, ''la montagne <u>la plus</u> haute'' devient ''la montanha <u>mai</u> nauta''.

Le fichier de règles est apertium-oci-fra.fra-oci.t2x.


=====Deuxième étape=====
=====Deuxième étape=====

Revision as of 21:44, 27 March 2022

Cette page documente l'architecture de la paire bidirectionnelle occitan-français.

L'occitan est analysé et produit dans deux variétés : languedocien et gascon. La première est appelée improprement "occitan" parce qu'elle a été la variété de référence pour Apertium initialement. Le gascon aranais, présent dans les paires catalan-occitan et espagnol-occitan n'est pas actuellement supporté par le traducteur occitan-français.

Histoire

Les premiers traducteurs occitan-catalan et espagnol-catalan sont des premiers développés sur Apertium. Par conséquent, ils étaient (et continuent au printemps 2022) structurés dans un seul répertoire, sans partager le dictionnaire morphologique occitan. Deux variétés occitanes peuvent être produites : le languedocien et l'aranais. Beaucoup plus tard, sur cette base, un répertoire apertium-oci a été créé et, grâce à une bourse Google Summer of Code, en 2018 Claudi Balaguer a développé un traducteur du français à l'occitan languedocien. En 2019 Lo Congrès Permanent de la Lenga Occitana a commencé le développement d'un traducteur bidirectionnel avec le languedocien et le gascon comme variétés source et cible. La première version de ce document-ci est écrit à la veille de la publication de la première version du Congrès pour documenter l'architecture du traducteur.

Dictionnaire bilingue

Les balises

Il est important à retenir que les différences entre les variétés de l'occitan sont considérables. Chaque variété occitane pose de gros problèmes d'homographie, mais si encore on les combine ensemble sous un fourre-tout "occitan" les problèmes deviennent insolubles. Cela fait que le dictionnaire bilingue n'utilise pas la balise v pour différencier les variétés, bien qu'elle soit utilisée pour d'autres langues où Apertium accepte une multiplicité de variétés, comme le catalan ou le portugais. On utilise ici la balise alt. La balise v="var" fait que la traduction ne puisse être produite que pour la variété "var", mais soit reconnue pour les autres variétés. Par contre, la balise alt="var" fait que la traduction ne soit valable que pour la variété "var". Si on le veut, il faut explicitement, dans d'autres lignes, déclarer que la traduction est valable pour d'autres variétés. Par exemple, on a :

<e alt="oci"><p><l>genièr<s n="n"/><s n="m"/></l><r>janvier<s n="n"/><s n="m"/></r></p></e>
<e alt="oci@gascon"><p><l>genèr<s n="n"/><s n="m"/></l><r>janvier<s n="n"/><s n="m"/></r></p></e>

Ceci fait que "genièr" ne soit pas traduit dans un texte gascon, ni "genèr" dans un texte languedocien. C'est ce qui arriverait avec la balise v. Pour ce faire, il faudrait ajouter deux lignes :

<e alt="oci@gascon" r="LR"><p><l>genièr<s n="n"/><s n="m"/></l><r>janvier<s n="n"/><s n="m"/></r></p></e>
<e alt="oci" r="LR"><p><l>genèr<s n="n"/><s n="m"/></l><r>janvier<s n="n"/><s n="m"/></r></p></e>

L'utilisation de la balise alt cause, contrairement aux traductions du catalan ou du portugais, que, quand on traduit de l'occitan, il faut choisir si l'on traduit du languedocien ou du gascon : on ne traduit pas génériquement de "l'occitan".


La balise alt est traitée par le programme xsltproc, qui est invoqué dans le fichier Makefile.am :

.deps/$(PREFIX2).dix: $(BASENAME).$(PREFIX1).dix .deps/.d
         xsltproc --stringparam alt $(LANG1) alt.xsl $(BASENAME).$(PREFIX1).dix >$@

Le contenu du dictionnaire bilingue

Le contenu du dico bilingue vient de plusieurs couches :

  • Initialement, les traductions à l'occitan existantes dans le Wiktionnaire (presque toujours des formes languedociennes)
  • Des milliers de mots languedociens introduits par Claudi Balaguer lors du GSoC 2018
  • Des noms propres ajoutés automatiquement de la paire catalan-français (ceux qui sont égaux en catalan et français, ce qui porte à penser qu'ils le seront aussi en occitan et français) : surtout des prénoms, des noms de famille, mais aussi des noms d'entreprises et organisations et des toponymes.
  • Les mots du Basic du Congrès Permanent de la Lenga Occitana
  • Des toponymes de top'Òc du Congrès Permanent de la Lenga Occitana
  • Quelques milliers d'autres mots introduits manuellement

Chiffres

Le traducteur français-occitan a près de 25 000 mots non propres et de 37 000 noms propres, desquels 8200 toponymes (fins mars 2022). Du côté occitan-français, le nombre est un peu plus grand à cause de la reconnaissance de lemmes occitans très semblables (par exemple, cinq formes gasconnes pour février : heurèr, hrevèr, hrevèr, herbèr et hiurèr).

La couverture (dite naïve) du traducteur français-occitan est de 93,7% pour un corpus de 100 000 phrases (3 millions de mots) choisi aléatoirement de Wikipédia et de 94,8% pour le corpus de 125 millions de mots de l'Est Républicain (fins mars 2022).

Tube

Pour une info plus générale, voir Apertium_system_architecture.

Comme toujours chez Apertium, le tube de processus est défini dans le fichier modes.xml.

Français-Occitan

Tagueur

Comme d'habitude chez Apertium, le procès de tagage (analyse morphologique) se décompose en trois phases.

Analyseur

En partant du dictionnaire français (apertium-fra.fra.metadix) dans le répertoire apertium-fra on obtient toutes les analyses morphologiques des mots, par exemple le mot occitan peut être un nom masculin singulier ou un adjectif masculin singulier :

$ echo "occitan" | apertium -d . fra-disam
"<occitan>"
	"occitan" adj m sg
	"occitan" n m sg

Désambiguïsateur par règles

Dans les premiers temps d'Apertium, le choix entre les différentes analyses possibles d'un mot se faisait avec un système mixte de règles et statistique. Actuellement, on utilise une couche intermédiaire avec de règles écrites en utilisant Constraint Grammar (CG). Ces contraintes grammaticales sont définies dans le fichier apertium-fra.fra.rlx du répertoire apertium-fra. Par exemple, dans "livre occitan" les contraintes choisissent "livre" comme un nom (au lieu d'un forme verbale) et "occitan" comme un adjectif :

$ echo "livre occitan" | apertium -d . fra-oci-disam
"<livre>"
	"livre" n m sg
;	"livrer" vblex pri p3 sg REMOVE:791
;	"livrer" vblex pri p1 sg REMOVE:791
;	"livrer" vblex prs p3 sg REMOVE:791
;	"livrer" vblex prs p1 sg REMOVE:791
;	"livrer" vblex imp p2 sg REMOVE:795
"<occitan>"
	"occitan" adj m sg
;	"occitan" n m sg REMOVE:2760

Désambiguïsateur statistique

Comme désambiguïsateur statistique, on utilise le fichier fra.prob du répertoire apertium-fra. Il est copié sur apertium-oci-fra et renommé fra-oci.prob par Makefile.am.

Assemblage de mots discontinus

On utilise le module apertium separable pour traiter les mots discontinus.

Le problème se pose quand on a des locutions dans les dictionnaires, mais elles sont "coupées" par des mots à l'intérieur. L'exemple typique pour l'occitan et le français sont les locutions verbales au négatif. Prenons, par exemple :

<e alt="oci" a="Congrès"><p><l>aver<g><b/>léser</g><s n="vblex"/></l><r>avoir<g><b/>le<b/>temps</g><s n="vblex"/></r></p></e>

Si on trouve "avoir le temps" (avec une forme conjuguée du verbe avoir) on traduit par "aver léser". Mais quand on trouve "je n'ai pas le temps", l'expression n'est plus reconnue puisque "pas" rompt la continuité de l'expression. C'est dans ces cas que le module vient en aide.

L'assemblage de mots discontinus, moyennant des règles pour chaque expression, les traque dans les textes tout en réordonnant les mots. Ainsi "je + ne + ai + pas + le + temps" devient "je + ne + ai le temps + pas" :

$ echo "je n'ai pas le temps" | apertium -d . fra-oci-lsx1
^je<prn><tn><p1><mf><sg>$ ^ne<adv>$ ^avoir# le temps<vblex><pri><p1><sg>$ ^pas<adv>$^.<sent>$

Ces règles se trouvent dans le fichier apertium-oci-fra.fra-oci.l1x.

Certaines locutions se trouvent dans le bidixe pour une des variétés occitanes, mais pas pour l'autre. Dans ce cas, il faut activer la règle d'assemblage seulement dans le traducteur à la variété concernée. Pour ce, il faudrait utiliser l'utilité apertium-filter-rules, mais elle n'est pas encore préparée pour traiter les fichiers apertium-separable (ça devrait être fait dans les prochains jours). En ce moment, l'assemblage (et le désassemblage) ne marchent que pour la traduction au languedocien.

Transfert lexical

Le transfert lexical est simplement le "collage" des possibles traductions de chaque mot, d'après le bidixe (apertium-oci-fra.oci-fra.dix). Par exemple, dans le cas du nom (masculin singulier) "fruit", il peut être traduit comme "fruch" ou "frucha" en languedocien :

$ echo "fruit" | apertium -d . fra-oci-biltrans
^fruit<n><m><sg>/fruch<n><m><sg>/frucha<n><f><sg>$^.<sent>/.<sent>$

Sélection lexicale

La sélection des différentes traductions possibles d'un mot se fait moyennant le module apertium-lex-tools et le fichier de règles apertium-oci-fra.fra-oci.metalrx (voir How to get started with lexical selection rules pour plus de détail sur la syntaxe, bien que c'est assez intuitif). Plusieurs macros d'autres paires de langues ont été réutilisées ou adaptées. Ainsi, par exemple, en languedocien, "fruit" devint "fruch" dans "un fruit", mais "frucha" (au singulier) dans "des fruits" :

$ echo "un fruit" | apertium -d . fra-oci-lextor
1:SELECT:0.8:fruit<n><m><sg>:2:fruch<n><m><sg>
^un<det><ind><m><sg>/un<det><ind><m><sg>$ ^fruit<n><m><sg>/fruch<n><m><sg>$^.<sent>/.<sent>$

$ echo "des fruits" | apertium -d . fra-oci-lextor
1:SELECT:1:fruit<n><m><pl>:3:frucha<n><f><sg>
^de<pr>/de<pr>$ ^le<det><def><mf><pl>/lo<det><def><GD><pl>$ ^fruit<n><m><pl>/frucha<n><f><sg>$^.<sent>/.<sent>$

S'il y a plusieurs possibles traductions pour un mot mais pas de règles dans la sélection lexicale, tout se passe comme si la sélection serait aléatoire. Il ne faut pas penser que l'ordre des mots dans le bidixe est décisif, d'autant plus que les dictionnaires peuvent être reformatés et réordonnés.

Les règles de sélection lexicale dépendent souvent de la variété occitane. Par exemple, pour "fruit", ce sont "fruch" et "frucha" qui entrent en concurrence pour le languedocien, mais "hrut" et "hruta" pour le gascon. La balise v est utilisée pour exprimer la variété concernée. Presque toujours, quand les lemmes sont différents, les règles restent exactement les mêmes. Pour faciliter la lisibilité et la maintenance, on tâche de ne pas recopier les règles, mais de ne changer que les lemmes à l'aide de la balise. Comme toujours, le travail sur les balises est faite par le module apertium-filter-rules, qui est invoqué dans Makefile.am.

Transfert structurel

Jusqu'ici, la traduction se réalise, en fait, mot à mot. Le transfert structurel s'occupe des transformations requises quand la traduction mot à mot est insuffisante.

Actuellement, Apertium a un modèle de traduction en trois étapes appelées en anglais chunker (transfert intra-segmental), interchunker (transfert inter-segmental) et postchunker (transfert post-segmental). Cependant, déjà plusieurs traducteurs utilisent une généralisation de ce modèle en n étapes. Dans la traduction au languedocien, le transfert post-segmental est divisé en quatre étapes et pour le gascon, en six (voir ci-dessus). En plus, une dernière étape est ajoutée après de transfert post-segmental. Au total, le transfert structurel français-languedocien a sept étapes et le français-gascon en a neuf.

Les dizaines, parfois centaines, de règles dans les fichiers pour chaque étape sont regroupées dans des blocs avec un commentaire en tête commençant par

<!-- RÈGLAS (description) -->

et finissant par

<!-- FIN RÈGLAS (description) -->

Cela aide à s'orienter là-dedans. Ce sont ces blocs qui vont être présentés ci-dessous.

Transfert intra-segmental

Le transfert intra-segmental est l'étape qui crée les segments (chunks) dans lesquels des mots se regroupent. Ces segments sont les unités qui vont être traités dans le transfert inter-segmental. Chaque segment reçoit un en-tête, qui peut être accédé par le transfert inter-segmental, et un contenu qui, lui, est inaccessible. En même temps, le transfert résout déjà un bon nombre de questions.

Les blocs du transfert intra-segmental sont les suivants :

  • règles de concordance : s'occupent de la concordance des syntagmes nominaux, en particulier dans les nombreux cas où en français un nom ou un adjectif a la même forme en masculin et féminin (cf. académique) ou en singulier et pluriel (cf. français), mais en occitan ces formes sont différentes.
  • règles -ci/-là : transforment des structures comme cette fois-ci et cette fois-là en aqueste còp et aquèl cop, respectivement.
  • règles de toponymes : éliminent l'article défini devant des noms de pays, régions, rivières, etc.
  • règles d'heures : changent des structures comme il est deux heures par son doas oras.
  • règles de dates : changent des structures comme 20 novembre 1998 par 20 de novembre de 1998.
  • règles de changement de verbe auxiliaire : pour le verbe être l'auxiliaire dans les temps composés devient èsser (languedocien) ou estar (gascon).
  • règles pour les verbes pronominaux qui deviennent non-pronominaux : par exemple, Jean se rend chez lui devient Jean va a casa.
  • règles d'élision de ne dans les négations : par exemple, Jean n'est pas devient Jean es pas (Il faut signaler que cela se fait aussi pour le gascon, bien qu'ensuite ne soit ajouté à nouveau lorsqu'on inclut les énonciatifs).
  • règles d'élision du pronom personnel sujet : par exemple, il arrive devient arriba.
  • règles de transformation de on : par exemple, on peut devient se pòt.
  • règles de transformation de on + devoir + infinitif : par exemple, on doit manger devient cal manjar.
  • règles de réarrangement des pronoms avec des verbes modaux : par exemple, auraient pu l'imaginer devient l'aurián pogut imaginar.
  • règles de transformation de être en train de : par exemple, Jean est en train de dormir devient Jean dòrm.
  • règles de transformation de ne... que : par exemple, ne veut que manger devient vòl pas que manjar.
  • règles d'élision de ce devant être : par exemple, ce fut devient foguèt.
  • autres règles.

C'est aussi dans cette étape qu'on fait les transformations suivantes :

  • changer les majuscules pour les gentilés par des minuscules (les Français devient los franceses).
  • changer l'ordre de certains adjectifs (le nouveau livre devient lo libre novèl ou lo libe navèth).
  • changer l'impératif par le subjonctif présent dans les phrases négatives (no chante oas devient cantes pas.
  • changer certains verbes non-pronominaux, qui deviennent pronominaux : par exemple, l'avion décolle devient l'avion s'enlaira (ces changements se produisent au sein des nombreuses règles de traitement de structures verbales, sans qu'il y ait un bloc de règles spécifique pour cela).

Le fichier de règles est apertium-oci-fra.fra-oci.t1x. Il y a de multiples règles différentes pour le languedocien et le gascon, ce qui cause l'utilisation de la valise v. Fin mars 2022, il y avait 199 règles pour le languedocien et 194 pour le gascon, 219 au total.

Transfert inter-segmental

Le transfert inter-segmental permet de faire des transformations à plus longue distance que celles de l'étape précédente qui ne pouvait tenir en compte que quelques mots adjacents.

De nombreuses transformations doivent être faites. Le problème, c'est que la plupart tournent autour des verbes. Si on mettait toutes les règles dans un seul fichier, elles entreraient en concurrence les unes avec autres. Cela causerait que des règles pertinentes ne seraient pas exécutées. La solution est de placer ces transformations en plusieurs étapes.

Première étape

Les blocs de la première étape du transfert inter-segmental sont les suivants :

  • changement de l'article partitif : par exemple, je veux de l'eau devient vòli d'aiga en languedocien et vòli aiga en gascon.
  • accord en genre entre sujet et attribut : par exemple, la maison est grande devient l'ostal es grand.
  • règles pour le superlatif : par exemple, la montagne la plus haute devient la montanha mai nauta.

Le fichier de règles est apertium-oci-fra.fra-oci.t2x.

Deuxième étape

interchunk_bis

Troisième étape

interchunk_pas

Quatrième étape

interchunk_pro

Cinquième étape

interchunk_supersn

gascon

Sixième étape

interchunk_enon

gascon

Transfert post-segmental

apertium-oci-fra.fra-oci.t3x

Étape finale

apertium-oci-fra.fra-oci.t4x

Découpage de mots discontinus

(apertium-oci-fra.fra-oci.l2x)

Génération

Générateur morphologique

Pré-post-générateur

(gascon)

Post-générateur

Occitan-Français

Nous ne répétons pas ici les explications générales de la section "français-occitan" précédente.

Tagueur

Analyseur

On part du dictionnaire occitan (apertium-oci.oci.metadix) dans le répertoire apertium-oci. Le rôle de la balise alt (voir ci-dessus) est essentiel ici.

Désambiguïsateur par règles

Les contraintes grammaticales sont définies dans le fichier apertium-oci.oci.rlx du répertoire apertium-oci.

À présent, les règles CG sont, en principe, indépendantes de la variété d'occitan, c'est-à-dire qu'il n'y a pas de valise par ou v dans ces règles (ce qui, en fait, n'est pas encore prévu dans Apertium, mais qu'on pourrait demander). Ce qui arrive, c'est que les règles s'appliquent sur le dictionnaire défini pour la variété qu'en est en train de traiter. Par exemple, "que" ne reçoit pas comme possible analyse "énonciatif" pour le languedocien, par conséquent, les règles de désambiguïsation de l'énonciatif "que" ne s'appliquent pas pour le languedocien. La désambiguïsation est, en fait, déjà faite au niveau du dictionnaire. On peut voir cette différence dans ces deux analyses de la même phrase pour le languedocien et le gascon :

$ echo "vòli que cantes" | apertium -d . oci-fra-disam
"<vòli>"
	"voler" vblex pri p1 sg SELECT:742
;	"volar" vblex pri p1 sg SELECT:742
;	"volar" vblex prs p1 sg SELECT:742
"<que>"
	"que" cnjsub SELECT:554
;	"que" rel mf sp SELECT:554
;	"qué" prn itg mf sg SELECT:554
"<cantes>"
	"cantar" vblex prs p2 sg

$ echo "vòli que cantes" | apertium -d . oci_gascon-fra-disam
"<vòli>"
	"voler" vblex pri p1 sg SELECT:742
;	"volar" vblex pri p1 sg SELECT:742
;	"volar" vblex prs p1 sg SELECT:742
;	"volar" vblex prs p3 sg SELECT:742
"<que>"
	"que" cnjsub SELECT:554
;	"que" adv enon SELECT:554
;	"que" rel mf sp SELECT:554
;	"qué" prn itg mf sg SELECT:554
"<cantes>"
	"cantar" vblex prs p2 sg

Désambiguïsateur statistique

Comme désambiguïsateur statistique, on utilise le fichier oci.prob du répertoire apertium-oci. Il est copié sur apertium-oci-fra et renommé oci-fra.prob par Makefile.am.

oci.prob est le très ancien désambiguïsateur statistique utilisé pour les paires occitan-catalan et occitan-espagnol.

Sur le répertoire apertium-oci/texts on a désambiguïsé des textes languedociens et gascons (14 000 mots pour le languedocien, 13 000 pour le gascon - fin mars 2022), mais on n'est pas (encore) arrivé à produire un désambiguïsateur statistique nettement meilleur. L'aménagement de ce désambiguïsateur est essentielle pour l'amélioration du traducteur occitan-français. On peut tester les fichiers prob générés dans ce répertoire (un pour le languedocien et un autre pour le gascon) en utilisant les modes oci-fra-unigram et oci_gascon-fra-unigram :

$ echo "lo can es verd" | apertium -d . oci-fra-unigram
Le chien est vert
$ echo "lo can qu'ei verd" | apertium -d . oci_gascon-fra-unigram
Le chien est vert

Assemblage de mots discontinus

Les règles d'assemblage de mots discontinus se trouvent dans le fichier apertium-oci-fra.oci-fra.l1x.

Transfert lexical

apertium-oci-fra.oci-fra.t1x

Sélection lexicale

apertium-oci-fra.oci-fra.metalrx

Transfert structurel

Transfert intra-segmental

apertium-oci-fra.fra-oci.t1x

Transfert inter-segmental

Première étape

oci-fra.t2ax.bin

Seconde étape

oci-fra.t2ax.bin


Troisième étape

oci-fra.t2bx.bin


Quatrième étape

oci-fra.t2cx.bin


Cinquième étape

oci-fra.t2dx.bin


Sixième étape

oci-fra.t2ex.bin


Transfert post-segmental

apertium-oci-fra.oci-fra.t3x

Étape finale

apertium-oci-fra.oci-fra.t4x

Découpage de mots discontinus

apertium-oci-fra.oci-fra.l2x

Génération

Générateur morphologique

Post-générateur