# Apertium

Apertium est un logiciel de traduction automatique basé sur des dictionnaires et des règles de transfert développé initialement par l'Université d'Alicante. C'est un logiciel libre distribué selon les termes de la licence GNU GPL 2.0.

## Origine et évolution du projet

Le projet Apertium a été créé par le groupe de recherche Transducens du département de langages et systèmes informatiques de l'université d'Alicante.
C'est l'une des deux réponses au projet Opentrad (Logiciel libre de traduction automatique pour les langues de l'État espagnol) lancé en 2004–2005.
À l'origine, Apertium a donc été conçu pour permettre la traduction de paires de langues proches comme les langues parlées en Espagne. Les toutes premières paires de langues validées en 2005 permettent les traductions espagnol ⇆ catalan, espagnol ⇆ galicien et espagnol ⇆ portugais.
Au fil des années, le projet Apertium s'est ouvert à d'autres paires de langues : aussi bien des groupes de langues proches entre elles comme les langues scandinaves, que pour la traduction de langues plus éloignées. En 2012 il y a même des ébauches de traducteurs entre certaines langues asiatiques et l'anglais.
Actuellement des étudiants de diverses universités d'Europe et du reste du monde et des enseignants s'investissent sur ce projet, certains dans le cadre de la préparation d'un doctorat. Depuis 2008, l'équipe du projet Apertium propose des sujets d'étude dans le cadre du Google Summer of Code qui permet à des étudiants de travailler sur des logiciels libres durant l'été.

## Fonctionnement d'Apertium

Apertium est un système de traduction à base de dictionnaires et de règles de transfert. Il est composé de 3 parties :
* Un moteur de traduction automatique indépendant des langues (même s'il a été perfectionné au fil des années pour pouvoir traiter les particularités de nouvelles langues). Il est écrit en C++.
* Des outils pour gérer les données linguistiques nécessaires à la traduction d'une paire de langues.
* Des paires de langues. Elles sont présentées sous la forme de fichiers XML utilisant actuellement le jeu de caractères UTF-8.
Dans la pratique, les fichiers XML constituant la paire de langues sont compilés avant de pouvoir être utilisés par le moteur de traduction. Le moteur de traduction est constitué par un ensemble d'outils, chacun réalisant une partie du traitement :
* déformatage (simple pour du texte classique, on met des espaces autour de la ponctuation, c'est cette étape qui permet de marquer comme à ne pas traduire les balises HTML ou d'autres informations liées à la mise en page des documents issus de divers outils de traitement de texte).
* analyse morphologique (après chaque mot trouvé, on indique sa catégorie grammaticale (nom, adjectif, verbe...) et d'autres caractéristiques (genre, nombre, temps pour les verbes, etc.)
* transfert superficiel des structures d'une langue à l'autre
* transfert lexical (c'est ici qu'on passe d'une langue à l'autre)
* génération morphologique (c'est l'étape inverse de l'analyse, on reconstitue les mots à partir de leur description
* post génération (pour certaines langues dont le français, permet de faire des traitements spéciaux entre mots voisins, par exemple remplacer "le arbre" (obtenu à l'étape de génération) par "l'arbre")
* reformatage (l'inverse de la première étape de déformatage).
Pour fonctionner avec une paire de langues, le moteur de traduction d'Apertium utilise des fichiers dictionnaires et des fichiers de transfert.

### Les dictionnaires morphologiques

Tout d'abord, chaque paire de langue comporte un dictionnaire morphologique par langue qui permet, pour chaque mot répertorié de cette langue, de retrouver dans un texte les différentes formes que peut avoir ce mot :
* au singulier ou au pluriel pour les noms,
* également au masculin et au féminin pour les adjectifs,
* conjugué aux différents temps et aux différentes personnes pour les verbes.
Le dictionnaire morphologique commence par l'alphabet des caractères utilisés.
Dans le cas de l'anglais, on peut se contenter des caractères non accentués :
L'alphabet français suppose que l'on prévoie des caractères supplémentaires. Les chiffres y ont également été ajoutés :
Ensuite, il faut définir les différents types de mots qu'on va rencontrer et leurs caractéristiques. Par exemple :
Dans la pratique, les balises <sdef> sont beaucoup plus nombreuses (plusieurs dizaines) et les types énumérés ont des noms abrégés.
Enfin, la plus grosse partie est celle qui permettra de retrouver les différents mots de la langue sous toutes leur forme. Le dictionnaire morphologique comporte également des indications sur la nature du mot et les caractéristiques grammaticales de ses différentes formes.
Par exemple pour le nom bière, on pourra avoir :
Le mot peut être trouvé sous deux formes lexicales :
* bière : qui est un nom au féminin singulier,
* bières : qui est un nom au féminin pluriel.
Comme pour tous les mots de la langue, il faut pouvoir analyser les différentes formes lexicales possibles (ce qui se trouve dans la balise <l>), l'écriture de dictionnaires morphologiques peut rapidement devenir fastidieuse.
Aussi, le projet Apertium a prévu de définir des paradigmes pour fabriquer automatiquement les différentes formes des mots à partir d'un exemple.
Ainsi, beaucoup de noms en français (et en anglais) passent du singulier au pluriel en rajoutant la lettre s.
Il suffit de définir cette règle pour l'un d'entre eux, par exemple le mot bière. Il suffit d'englober le texte précédent de balises <pardef> :
L'identificateur "bière__n" correspond à une catégorie de mots qui se comportent en français comme le nom féminin bière, c'est-à-dire qui passent du singulier au pluriel en rajoutant un s.
Il faudra de la même manière faire un paradigme similaire pour mes noms masculins qui passent du singulier au pluriel en rajoutant un s. Par exemple le nom "accessoire".
D'autres noms existent au masculin et au féminin, par exemple loup pour lequel il existe le paradigme suivant :
On pourra ensuite définir plus simplement les mots en utilisant les paradigmes :
Les paradigmes sont encore plus intéressants pour les verbes réguliers. On définit une fois pour toutes comment ces verbes se conjuguent, et ensuite, il suffit d'énumérer les différents verbes d'un type particulier à l'infinitif.
La définition du mot contient une partie invariante à l'intérieur des balises <i>...</i>. Pour certains mots, la partie invariante correspond au lemme. Mais quelquefois elle est plus courte comme pour le mot loup et plus généralement pour les verbes.

### Les dictionnaires bilingues

Les dictionnaires bilingues permettent de traduire des mots entre 2 langues. Comme dans le cas des dictionnaires morphologiques, les caractéristiques grammaticales des mots des deux langues sont précisées. Exemple :
peut être interprété ainsi :
* Le mot skingomz est un nom au féminin que l'on traduit en français par radio qui est aussi un nom au féminin.
* Le mot skinwel est un nom au masculin que l'on traduit en français par télévision qui est un nom au féminin.
On peut voir au passage que les termes noms, masculin, féminin sont ici sous forme abrégée. L'emploi de mnémoniques courts et beaucoup plus fréquente dans les fichiers Apertium que les noms complets.
Dans le cas de ces 2 lignes, la traduction peut se faire dans les 2 sens :
* soit de la partie gauche (left en anglais) à la partie droite (right en anglais). Dans ce cas, à l'étape de transfert lexical, le texte entre <l>... et ...</l> sera remplacé par celui entre <r>... et ...</r>
* soit de la partie droite à la partie gauche. Dans ce cas, le texte entre <r>... et ...</r> sera remplacé par celui entre <l>... et ...</l>
Examinons un exemple un peu plus compliqué :
peut être interprété ainsi :
* Le mot adeiladour employé comme nom au masculin se traduit en français par architecte qui est un nom au masculin ou au féminin.
* Le mot adeiladour employé comme nom au féminin se traduit en français par architecte qui est un nom au masculin ou au féminin.
* Le mot architecte qui est un nom au masculin ou au féminin se traduit par le nom adeiladour.
En réalité, (le dictionnaires bilingue n'en parle pas, mais le problème a été abordé dans le dictionnaire morphologique), le mot adeiladour présente plusieurs écritures selon notamment qu'il soit au masculin ou au féminin. Si l'on tient compte également du singulier et du pluriel, on obtient au total 6 possibilités :
Reprenons les explications précédentes :
Pour traduire vers le français :
* Le mot adeiladour est un nom au masculin singulier qui se traduit en français par architecte qui est un nom au masculin ou au féminin singulier.
* Le mot adeiladourien est un nom au masculin pluriel qui se traduit en français par architectes qui est un nom au masculin ou au féminin pluriel.
* Le mot adeiladourez est un nom au féminin singulier qui se traduit en français par architecte qui est un nom au masculin ou au féminin singulier.
* Le mot adeiladourezed est un nom au féminin pluriel qui se traduit en français par architectes qui est un nom au masculin ou au féminin pluriel.
Pour traduire du français à la langue de gauche :
* Le mot architecte qui est un nom au masculin ou au féminin singulier se traduit par le mot adeiladour employé au singulier. L'écriture précise de ce mot (en l'occurrence adeiladour ou adeiladourez) se décidera en fonction du genre du mot qui est à déterminer.
* Le mot architectes qui est un nom au masculin ou au féminin pluriel se traduit par le mot adeiladour employé au pluriel. L'écriture précise de ce mot (en l'occurrence adeiladourien ou adeiladourezed) se décidera en fonction du genre du mot qui est à déterminer.
Si l'on revient au début de ce 2e exemple :
on constate la présence d'attributs r="LR" ou r="RL" qui permet de définir pour quel sens de traduction (LR = de gauche à droite, RL = de droite à gauche) les données dans l'expression <e r="..">... </e> s'appliquent.
On constate également la présence de n="GD" pour genre à déterminer.
Enfin, on peut constater qu'on a utilisé le même dictionnaire bilingue pour traduire dans les deux sens. C'est le choix qui a été fait pour les paires de langues Apertium.

### Les transferts

Les étapes de transfert consistent à traiter les ensembles mots + description grammaticale pour passer d'une langue à l'autre.

#### Lever les ambiguïtés du texte source

Tout d'abord, il faut lever les ambiguïtés sur la langue d'origine. Prenons par exemple 2 phrases :
* La porte est ouverte.
* Je porte une valise.
La compréhension de ces 2 phrases n'offre pas de difficulté particulière pour un humain francophone.
Dans le cas d'Apertium, l'analyse du mot porte va donner trois résultats :
* un nom féminin au singulier qui correspond à un truc en bois servant à permettre ou empêcher l'accès à des pièces ou bâtiments,
* le verbe porter conjugué au présent, à la première ou à la troisième personne du singulier (2 cas en tout).
En sortie de la phase d'analyse (qui utilise le dictionnaire morphologique), pour les 2 phrases, on récupère ces trois résultats pour le mot porte.
C'est l'analyse de la nature des mots environnants qui permet de lever l'ambiguïté.
Pour la phrase La porte est ouverte, si on choisit le verbe porter, on obtient la structure de phrase :
On a notamment 2 verbes consécutifs avec le verbe être en 2e position.
La structure de phrase :
est plus logique. On peut même déduire que le premier mot est un article.
De même, dans le cas de la phrase Je porte une valise, si pour porte, on choisit la nom, on a la structure :
D'une part, un pronom est suivi d'un nom, d'autre part, la phrase n'a pas de verbe.
Au contraire, la structure
donne une structure de phrase courante en français. De plus, le pronom "je" permet de choisir entre la première et la 3e personne du singulier pour le verbe.
À partir de statistiques sur la structure des phrases dans la langue d'origine (obtenue au préalable par l'analyse d'un grand nombre de phrases avec leur traduction) l'étape de désambiguïsation permet de ne conserver pour chacun des mots du texte source qu'une seule analyse, c'est-à-dire la partie droite de la description d'un mot <r>...</r> .
Remarque : Même si on a utilisé des paradigmes pour définir les différents mots de la langue, l'analyse obtenue détaillera toutes les caractéristiques du mot. Par exemple pour le verbe porter, l'analyse sélectionné indiquera la personne du verbe choisie : <p1><sg> pour la première personne du singulier, <p3><sg> pour la troisième personne du singulier.

#### Le transfert lexical

Chaque mot dans la langue source ayant été analysé de manière unique, il pourra être traduit d'une manière unique en utilisant le dictionnaire bilingue. Par exemple, pour le mot "porte", donnera le mot door (nom) dans le cas de la première phrase et carry (verbe) pour la seconde, si l'on fait une traduction en anglais.

#### Le transfert de structure

On vient de passer de la langue source à la langue cible. Mais le travail n'est pas fini. Il faut respecter les contraintes grammaticales de la langue cible. Par exemple :
* Dans certaines langues dont le français, l'adjectif s'accorde en genre et en nombre avec le nom. Dans d'autres dont l'anglais, il est invariable.
* La plupart des adjectifs se mettent en français après le nom, en anglais ils sont toujours avant.
* On a vu dans le chapitre sur les dictionnaires bilingues qu'un mot peut être masculin dans une langue et féminin dans une autre.
Cette étape de transfert consiste à prendre en compte ces particularités à savoir :
* dans certaines langues accorder certains mots avec d'autres,
* changer quelquefois l'ordre des mots par rapport au texte dans la langue source (ces changements d'ordre peuvent être parfois très considérables, comme dans le cas de la traduction du basque à l'espagnol ou l'anglais),
* éliminer certains mots de la langue source (par exemple, l'adverbe ''pas'' de la négation du français lors de la traduction à l'espagnol ou au catalan),
* ajouter certains mots à la langue cible (par exemple, l'adverbe ''pas'' de la négation du français lors de la traduction de l'espagnol ou du catalan).

### En résumé

* L'étape d'analyse utilise le dictionnaire morphologique de la langue source et remplace chaque mot du texte d'origine par une ou plusieurs descriptions telles qu'on les trouve dans la partie <r>...</r> . Par exemple le mot bières donnera <r>bière<s n="nom"/><s n="pluriel"/></r> ou plutôt avec des abréviations : <r>bière<s n="n"/><s n="p"/></r>
* Une première étape de transfert va lever les ambigüités pour les mots présentant plusieurs descriptions possibles
* on peut alors traduire chaque mot. Le résultat pour le mot bières traduit en anglais sera un truc du genre : <r>beer<s n="n"/><s n="p"/></r>
* Il y a une autre étape de transfert pour tenir compte des particularités de la langue cible.
* Enfin, l'étape de gérération va utiliser le dictionnaire morphologique de la langue cible dans l'autre sens, c'est-à-dire qu'on passera d'une forme du genre <r>beer<s n="n"/><s n="p"/></r> au mot beers.

## Les couples de langues disponibles

Les paires de langues développées pour Apertium sont classées en 4 catégories en fonction de leur état d'avancement :
* Trunk (le tronc). Il s'agit des paires de langues validées, même si elles peuvent être perfectionnées. Certaines permettent la traduction dans les 2 sens, d'autres dans un seul sens.
* Staging : les paires de langues demandant encore quelques semaines de travail pour être opérationnelles. Peu nombreuses, elles restent dans cet état tant qu'aucun développeur n'est en mesure de fignoler le travail déjà fait.
* Nursery : les paires de langues nécessitant encore plusieurs mois de travail pour passer au niveau Trunk.
* Incubator (l'incubateur) pour les paires de langues en construction pour lesquelles beaucoup de travail reste à faire.
Au début 2012, les langues validées sont:
| Nom de paire | Première version | Langues | Version actuelle |
| apertium-es-ca | 2005 | espagnol ⇆ catalan | 1.0.5 |
| apertium-es-gl | 2005 | espagnol ⇆ galicien | 1.0.6 |
| apertium-es-pt | 2005 | espagnol ⇆ portugais | 1.0.3 |
| apertium-en-ca | 2006 | anglais ⇆ catalan | 0.8.4 |
| apertium-oc-ca | 2006 | occitan ⇆ catalan | 1.0.5 |
| apertium-fr-ca | 2006 | français ⇆ catalan | 1.0.0 |
| apertium-es-ro | 2007 | espagnol ← roumain | 0.7.1 |
| apertium-fr-es | 2007 | français ⇆ espagnol | 0.8.0 |
| apertium-cy-en | 2008 | gallois ⇆ anglais | 0.1.0 |
| apertium-en-es | 2008 | anglais ⇆ espagnol | 0.6.0 |
| apertium-eo-ca | 2008 | espéranto ← catalan | 0.9.0 |
| apertium-eo-es | 2008 | espéranto ← espagnol | 0.9.0 |
| apertium-eo-en | 2008 | espéranto ⇆ anglais | 1.0.2 |
| apertium-eu-es | 2008 | basque ⇆ espagnol | 0.3.1 |
| apertium-oc-es | 2008 | occitan ⇆ espagnol | 1.0.5 |
| apertium-pt-ca | 2008 | portugais ⇆ catalan | 0.8.1 |
| apertium-en-gl | 2008 | anglais ⇆ galicien | 0.5.1 |
| apertium-pt-gl | 2008 | portugais ⇆ galicien | 0.9.1 |
| apertium-nn-nb | 2009 | norvégien nynorsk ⇆ Norwegian Bokmål | 0.6.5 |
| apertium-sv-da | 2009 | suédois → danois | 0.6.0 |
| apertium-br-fr | 2009 | breton → français | 0.4.0 |
| apertium-es-ast | 2009 | espagnol → asturien | 1.0.0 |
| apertium-is-en | 2010 | islandais → anglais | 0.1.0 |
| apertium-mk-bg | 2010 | macédonien ⇆ bulgare | 0.2.0 |
| apertium-mk-en | 2010 | macédonien ⇆ anglais | 0.1.0 |
| apertium-ca-it | 2011 | catalan ← italien | 0.1.0 |
| apertium-eo-fr | 2011 | espéranto ← français | 0.9.0 |
| apertium-es-an | 2011 | espagnol ⇆ aragonais | 0.2.1 |
| apertium-af-nl | 2012 | afrikaans ↔ hollandais | ? |
| apertium-es-it | ? | espagnol ↔ italien | ? |
| apertium-eu-en | ? | basque → anglais | ? |
| apertium-sh-mk | ? | serbo-croate ↔ macédonien | ? |
| apertium-tr-az | ? | turc → azerbaïdjanais | ? |
| apertium-tr-ky | ? | turc → kirghiz | ? |
| apertium-sme-nob | 2012 | Northern Sámi → Norwegian Bokmål | 0.5.0 |
| apertium-kaz-tat | 2013 | Kazakh ⇆ Tatar | 0.1.0 |
La Liste complète des paires de langues classées selon leur état d'avancement est visible sur le wiki d'Apertium dont beaucoup de pages explicatives ont été traduites en français depuis septembre 2011.