Difference between revisions of "Création d'une nouvelle paire avec Matxin"
(Création page (début de traduction)) |
(Fin de la tradiction) |
||
Line 1: | Line 1: | ||
Cette page prétend donner un cheminement pas à pas sur la manière de créer un nouveau traducteur avec la plate-forme [[Matxin]]. |
Cette page prétend donner un cheminement pas à pas sur la manière de créer un nouveau traducteur avec la plate-forme [[Matxin (français)|Matxin]]. |
||
== Pré requis == |
== Pré requis == |
||
Line 12: | Line 12: | ||
et au choix : |
et au choix : |
||
* [[Freeling]] (depuis SVN) et les outils <code>fl-*</code> pour Freeling (pour le moment ceux-ci peuvent être trouvés dans <code>apertium-tools/freeling</code> dans [[SVN|apertium SVN |
* [[Freeling (français)]] (depuis SVN) et les outils <code>fl-*</code> pour Freeling (pour le moment ceux-ci peuvent être trouvés dans <code>apertium-tools/freeling</code> dans [[Utiliser SVN|apertium SVN]]), si vous prévoyez d'utiliser Freeling pour les étapes d'analyse/tagging/dépendance |
||
ou |
ou |
||
* [[vislcg3]] (depuis SVN), si vous prévoyez d'utiliser lttoolbox/apertium-tagger et [[Contraintes grammaticales|Constraint Grammar]] pour les étapes d'analyse/tagging/dépendance |
* [[Apertium et les contraintes grammaticales (vislcg3)|vislcg3]] (depuis SVN), si vous prévoyez d'utiliser lttoolbox/apertium-tagger et [[Contraintes grammaticales|Constraint Grammar]] pour les étapes d'analyse/tagging/dépendance |
||
== Aperçu == |
== Aperçu == |
||
Comme mentionné au début, cette page prétend donner un guide pas à pas pour créer une nouvelle paire de langues avec [[Matxin]] depuis le début. Aucune connaissance en programmation n'est requise, tout ce qu'on a besoin de définir est quelques dictionnaires et grammaires. La plate-forme Matxin est décrite en détail dans [[Documentation de Matxin |
Comme mentionné au début, cette page prétend donner un guide pas à pas pour créer une nouvelle paire de langues avec [[Matxin (français)|Matxin]] depuis le début. Aucune connaissance en programmation n'est requise, tout ce qu'on a besoin de définir est quelques dictionnaires et grammaires. La plate-forme Matxin est décrite en détail dans [[Documentation de Matxin]] et sur la [http://matxin.sourceforge.net page Matxin de sourceforge]. Cette page se concentrera seulement sur la création d'une nouvelle paire de langues, et évitera les problèmes théoriques et méthodologiques. |
||
La paire de langue pour le tutoriel sera breton vers anglais. Elle a été choisie puisque les deux langues ont un ordre de mot assez divergent (le breton est assez libre, permettant VSO, OVS et SVO, là où l'anglais est assez uniformément SVO) ce qui peut montrer quelques avantages que Matxin a sur Apertium. La phrase que nous allons utiliser pour ce propos est : |
La paire de langue pour le tutoriel sera breton vers anglais. Elle a été choisie puisque les deux langues ont un ordre de mot assez divergent (le breton est assez libre, permettant VSO, OVS et SVO, là où l'anglais est assez uniformément SVO) ce qui peut montrer quelques avantages que Matxin a sur Apertium. La phrase que nous allons utiliser pour ce propos est : |
||
Line 24: | Line 24: | ||
:''Ur yezh indezeuropek eo ar brezhoneg.'' |
:''Ur yezh indezeuropek eo ar brezhoneg.'' |
||
:[<sub>{{sc|compl}}</sub> A language indo-european] [<sub>{{sc|verb}}</sub> is] [<sub>{{sc|subj}}</sub> the breton]. |
:[<sub>{{sc|compl}}</sub> A language indo-european] [<sub>{{sc|verb}}</sub> is] [<sub>{{sc|subj}}</sub> the breton]. |
||
:Breton is an Indo-European language. |
:Breton is an Indo-European language (Le breton est une langue Indo-Européenne). |
||
Il y a deux problèmes principaux avec le transfert dans ce cas, le premier est de ré-ordonner, <code>OVS → SVO</code>, le second est d'enlever l'article défini précédant un nom de langue <code>ar brezhoneg → Breton</code>. |
Il y a deux problèmes principaux avec le transfert dans ce cas, le premier est de ré-ordonner, <code>OVS → SVO</code>, le second est d'enlever l'article défini précédant un nom de langue <code>ar brezhoneg → Breton</code>. |
||
Line 34: | Line 34: | ||
Pour les étapes d'analyse/désambiguïsation/dépendance, il y a deux options principales ouvertes : |
Pour les étapes d'analyse/désambiguïsation/dépendance, il y a deux options principales ouvertes : |
||
# utiliser l'outil Apertium [[Lttoolbox (français)|lttoolbox]] pour la désambiguïsation morphologique, [[Contraintes grammaticales|Constraint Grammar]] pour la désambiguïsation basée sur les règles et le marquage syntaxique, [[apertium-tagger (français)]] pour la désambiguïsation statistique et finalement Constraint Grammar pour l'analyse des dépendances |
# utiliser l'outil Apertium [[Lttoolbox (français)|lttoolbox]] pour la désambiguïsation morphologique, [[Contraintes grammaticales|Constraint Grammar]] pour la désambiguïsation basée sur les règles et le marquage syntaxique, [[apertium-tagger (français)]] pour la désambiguïsation statistique et finalement Constraint Grammar pour l'analyse des dépendances |
||
# utiliser [[ |
# utiliser [[Freeling (français)|Freeling]] pour toutes ces étapes. |
||
Typiquement le choix |
Typiquement le choix dépendra de quelles ressources vous disposez, et les forces et faiblesses de chacun de ces outils. |
||
== Analyse avec Apertium et Constraint Grammar == |
== Analyse avec Apertium et Constraint Grammar == |
||
Line 42: | Line 42: | ||
(à écrire...) |
(à écrire...) |
||
== Analyse avec |
== Analyse avec Freeling == |
||
Le processus d'analyse dans Matxin est fait par [[Freeling]], une suite libre d'analyseurs de langues. L'analyse est faite en quatre étapes, nécessitant quatre (ou plus) ensembles ou fichiers séparés. Le premier est le dictionnaire morphologique, lequel est principalement une liste de formes complète (ex: [[Speling format (français)]]) compilée dans un format BerkeleyDB. Il y a ensuite des fichiers pour la désambiguïsation des catégories de mots et pour spécifier les règles de fragmentation et de dépendances. Il y a deux autres étapes qui viennent avant l'analyse morphologique, la tokenisation et le découpage des phrases, mais pour les propos de ce tutoriel elles seront considérées le long de l'analyse morphologique. |
Le processus d'analyse dans Matxin est fait par [[Freeling (français)|Freeling]], une suite libre d'analyseurs de langues. L'analyse est faite en quatre étapes, nécessitant quatre (ou plus) ensembles ou fichiers séparés. Le premier est le dictionnaire morphologique, lequel est principalement une liste de formes complète (ex: [[Speling format (français)]]) compilée dans un format BerkeleyDB. Il y a ensuite des fichiers pour la désambiguïsation des catégories de mots et pour spécifier les règles de fragmentation et de dépendances. Il y a deux autres étapes qui viennent avant l'analyse morphologique, la tokenisation et le découpage des phrases, mais pour les propos de ce tutoriel elles seront considérées le long de l'analyse morphologique. |
||
Normalement un programme unique est utilisé pour faire toutes les différentes étapes d'analyses, prendre en entrée du texte brut ou déformatté, et envoyer en sortie une analyse de dépendances, le comportement de ce programme est contrôlé par un fichier appelé <code>config.cfg</code>. Dans Matxin ce programme s'appelle <code>Analyzer</code>, toutefois dans les étapes suivantes, on va utiliser des outils séparés et laisser créer le fichier config jusqu'à la dernière minute comme il peut devenir compliqué. |
Normalement un programme unique est utilisé pour faire toutes les différentes étapes d'analyses, prendre en entrée du texte brut ou déformatté, et envoyer en sortie une analyse de dépendances, le comportement de ce programme est contrôlé par un fichier appelé <code>config.cfg</code>. Dans Matxin ce programme s'appelle <code>Analyzer</code>, toutefois dans les étapes suivantes, on va utiliser des outils séparés et laisser créer le fichier config jusqu'à la dernière minute comme il peut devenir compliqué. |
||
Comme compagnon la lecture de cette section de la [http://garraf.epsevg.upc.es/freeling/index.php?option=com_content&task=view&id=18&Itemid=47 documentation Freeling] est hautement recommandée. Ce tutoriel saute des caractéristiques de Freeling qui ne sont pas nécessaires pour faire un système de traduction automatique |
Comme compagnon la lecture de cette section de la [http://garraf.epsevg.upc.es/freeling/index.php?option=com_content&task=view&id=18&Itemid=47 documentation Freeling] est hautement recommandée. Ce tutoriel saute des caractéristiques de Freeling qui ne sont pas nécessaires pour faire un système de traduction automatique de base avec Matxin, et notez qu'il est également possible d'utiliser d'autres analyseurs comme entrée dans les parties fragmentation / dépendance analyse de Freeling, pour plus d'information voir [[Freeling (français)|ici]]. |
||
=== Morphologique === |
=== Morphologique === |
||
Afin de créer votre analyseur morphologique dans Freeling vous avez besoin principalement de faire une liste de formes complète. S'il y a déjà un dictionnaire Apertium pour la langue, vous pouvez utiliser les scripts dans [[SVN|apertium SVN]] (module <code>apertium-tools/freeling</code>) pour générer un dictionnaire depuis le début, sinon, construisez-la quand même depuis le début, ou construisez un dictionnaire dans [[Lttoolbox (français)|lttoolbox]] et ensuite générez la liste. |
Afin de créer votre analyseur morphologique dans Freeling vous avez besoin principalement de faire une liste de formes complète. S'il y a déjà un dictionnaire Apertium pour la langue, vous pouvez utiliser les scripts dans [[Utiliser SVN|apertium SVN]] (module <code>apertium-tools/freeling</code>) pour générer un dictionnaire depuis le début, sinon, construisez-la quand même depuis le début, ou construisez un dictionnaire dans [[Lttoolbox (français)|lttoolbox]] et ensuite générez la liste. |
||
Pour le but de cet exercice, vous pouvez juste taper (??) dans un petit dictionnaire à la main. On appellera le dictionnaire <code>matxin-br-en.br.dicc</code>, et il contiendra |
Pour le but de cet exercice, vous pouvez juste taper (??) dans un petit dictionnaire à la main. On appellera le dictionnaire <code>matxin-br-en.br.dicc</code>, et il contiendra |
||
Line 133: | Line 133: | ||
</pre> |
</pre> |
||
Le fichier (qu'on appellera <code>matxin-br-en.br.relax</code> est fait de deux sections, la première <code>SETS</code> définit les ensembles de balises ou lemmes, vraiment (?) comme les taggers <code>LIST</code> et <code>SET</code> dans VISL [[ |
Le fichier (qu'on appellera <code>matxin-br-en.br.relax</code> est fait de deux sections, la première <code>SETS</code> définit les ensembles de balises ou lemmes, vraiment (?) comme les taggers <code>LIST</code> et <code>SET</code> dans VISL [[Contraintes grammaticales]]. La deuxième section définit une série de contraintes de poids, dans le format 'poids', suivi par un espace, suivi par la balise suivi par un autre espace and et ensuite le contexte. Le contexte est défini comme une série de positions relatives à la balise en question. |
||
Donc, en utilisant ce fichier on devrait être capables d'obtenir une sortie désambiguïsée : |
Donc, en utilisant ce fichier on devrait être capables d'obtenir une sortie désambiguïsée : |
||
Line 252: | Line 252: | ||
=== Fichier de configuration === |
=== Fichier de configuration === |
||
Donc maintenant nous avons une étape d'analyse qui fonctionne plus ou moins bien, il nous faut obtenir cette analyse dans une forme |
Donc maintenant nous avons une étape d'analyse qui fonctionne plus ou moins bien, il nous faut obtenir cette analyse dans une forme qui peut être utilisé par Matxin. Ceci impliquera d'écrire un fichier de configuration qui spécifie tous les modules qu'on a utilisé auparavant à un endroit. Ci dessous voici un fichier de configuration minimal pour les modules que nous avons utilisé ci-dessus. Toutes les options sont obligatoires, si une est omise, des messages d'erreur étonnants peuvent se produire, donc le mieux est juste de copier et coller ceci, changer les chemins et ensuite y ajouter as we go along (???). |
||
<pre> |
<pre> |
||
Line 305: | Line 305: | ||
GrammarFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br.gram |
GrammarFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br.gram |
||
# Options |
# Options dépendance parser |
||
DepParser=txala |
DepParser=txala |
||
DepTxalaFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br.dep |
DepTxalaFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br.dep |
||
</pre> |
</pre> |
||
Quand on a installé le fichier de configuration on |
Quand on a installé le fichier de configuration on peut utiliser le programme <code>Analyzer</code> du paquet Matxin. La sortie finale de <code>Analyzer</code> sera : |
||
<pre> |
<pre> |
||
Line 344: | Line 344: | ||
</pre> |
</pre> |
||
ce qui est une représentation XML (voir [[Documentation |
ce qui est une représentation XML (voir [[Documentation de Matxin]]) de l'analyse des dépendances qu'on a vu précédemment. |
||
== Transfert == |
== Transfert == |
||
Line 352: | Line 352: | ||
La prochaine étape dans le processus est le transfert lexical, il prend les formes lexicales de la langue source et retourne les formes lexicales de la langue cible. Il y a trois fichiers impliqués dans le transfert lexical : |
La prochaine étape dans le processus est le transfert lexical, il prend les formes lexicales de la langue source et retourne les formes lexicales de la langue cible. Il y a trois fichiers impliqués dans le transfert lexical : |
||
* Le dictionnaire bilingue (<code>matxin-br-en.br-en.dix</code>), qui utilise le familier |
* Le dictionnaire bilingue (<code>matxin-br-en.br-en.dix</code>), qui utilise le format familier des dictionnaires [[Lttoolbox (français)|lttoolbox]], bien que légèrement différent comme résultat des [[balisage des mots]] |
||
* Le dictionnaire de sémantique des noms (<code>matxin-br-en.br.sem_info</code>), un fichier avec des tabulations comme séparateur |
* Le dictionnaire de sémantique des noms (<code>matxin-br-en.br.sem_info</code>), un fichier avec des tabulations comme séparateur |
||
* Le dictionnaire de type de fragment (<code>matxin-br-en.br.chunk_type</code>), un fichier avec des tabulations comme séparateur |
* Le dictionnaire de type de fragment (<code>matxin-br-en.br.chunk_type</code>), un fichier avec des tabulations comme séparateur |
||
Line 389: | Line 389: | ||
</pre> |
</pre> |
||
par le module de transfert lexical. Comme ces modèles sont répétés fréquemment, typiquement ils sont mis dans des paradigmes, mais au lieu d'être des paradigmes morphologiques, comme dans Apertium, ce sont des paradigmes de transfert lexical, donc par exemple pour les noms on |
par le module de transfert lexical. Comme ces modèles sont répétés fréquemment, typiquement ils sont mis dans des paradigmes, mais au lieu d'être des paradigmes morphologiques, comme dans Apertium, ce sont des paradigmes de transfert lexical, donc par exemple pour les noms on pourrait avoir : |
||
<pre> |
<pre> |
||
Line 400: | Line 400: | ||
</pre> |
</pre> |
||
Transfert des noms féminins et masculins singulier et pluriel en breton dans leurs équivalents anglais. Les entrées correspondantes pour nos deux noms dans la section main seraient, |
|||
Transferring both feminine and masculine singular and plural nouns in Breton to their English equivalents. The corresponding entries for our two nouns in the main section would be, |
|||
<pre> |
<pre> |
||
Line 407: | Line 407: | ||
</pre> |
</pre> |
||
En utilisant l'information pour les noms et le XML généré après le transfert lexical ci-dessous vous devriez être capable de créer un dictionnaire bilingue complet pour notre phrase de test. |
|||
==== |
==== Dictionnaire sémantique des noms ==== |
||
Le dictionnaire sémantique des noms un un simple fichier qui permet le marquage sémantique de base des lemmes. Ils fonctionnent quelque peu comme des listes dans les fichiers de transfert Apertium, et permettent la catégorisation des noms dans des classes sémantiques, par exemple ''langue'', ''animacy (??)'', ''matériel'', ''moyen de communication'' etc. Le fichier est une liste séparée par des tabulations de lemmes et balises sémantiques, par exemple pour notre phrase on pourrait vouloir marquer ''brezhoneg'' 'breton' comme <code>[HZK]</code> (une abréviation de ''hizkuntzak'' 'langues'). |
|||
Donc faites le fichier <code>matxin-br-en.br.sem_info</code> avec le contenu qui suit : |
|||
<pre> |
<pre> |
||
Line 421: | Line 421: | ||
</pre> |
</pre> |
||
Vous pouvez ajouter d'autres langues comme ''euskareg'' 'basque' et ''kembraeg'' 'gallois'. Le symbole <code>+</code> signifie que cette caractéristique est positive, la caractéristique peut aussi être suivie de <code>-</code> pour négative ou <code>?</code> pour incertaine. Le module de transfert lexical ne semble pas utiliser cette information directement, mais a besoin de la présence du fichier. |
|||
==== Dictionnaire de transfert des types de fragments ==== |
|||
==== Chunk-type transfer dictionary ==== |
|||
Le dictionnaire final nécessaire pour l'étape de transfert lexical est le dictionnaire de transfert des types de fragments. Il transfère les types de fragments (ex: <code>sn</code> ''syntagme nominal'' 'groupe nominal' et <code>sp</code> ''syntagme prépositionnel'' 'groupe prépositionnel') dans les types de fragments de la langue cible. Comme on maintient les mêmes types de fragments entre les langues on peut juste avoir un fichier vide pour ça. Quoique ça vaut probablement la peine d'ajouter un commentaire avec le format, par exemple faire un fichier appelé <code>matxin-br-en.br-en.chunk_type</code> avec les contenus suivants, |
|||
<pre> |
<pre> |
||
# |
#Catégorie (SL) #Catégorie (TL) #Description (SL) #Description (TL) |
||
sn |
sn sn #groupe nominal groupe nominal |
||
</pre> |
</pre> |
||
==== Fichier de configuration ==== |
==== Fichier de configuration ==== |
||
Maintenant on en vient à éditer le fichier de configuration, on ouvre le fichier, ajoute les options suivantes au bas du fichier et on le sauvegarde. |
|||
Now we come to editting the configuration file, we open the file, add the following options at the bottom of the file and save it. |
|||
<pre> |
<pre> |
||
# Options de transfert |
|||
# Transfer options |
|||
TransDictFile=/home/fran/MATXIN/source/matxin-br-en/br-en.autobil.bin |
TransDictFile=/home/fran/MATXIN/source/matxin-br-en/br-en.autobil.bin |
||
Line 445: | Line 445: | ||
</pre> |
</pre> |
||
==== |
==== Sortie du transfert lexical ==== |
||
<pre> |
<pre> |
||
Line 476: | Line 476: | ||
</pre> |
</pre> |
||
Note: |
Note: La sortie ci-dessus a été post-traitée par <code>xmllint --format -</code> pour donner un formatages plus lisible pour un humain. |
||
=== |
=== Transfert intra-fragment === |
||
Le rôle du transfert intra-fragment est de déplacer l'information des noeuds dans un fragment au fragment, par exemple pour faire concorder un groupe nominal sujet et le verbe dans un groupe verbal. On va juste copier l'information morphologique directement, donc faites un fichier appelé <code>matxin-br-en.br-en.intra1</code> et mettez-y ce qui suit. |
|||
<pre> |
<pre> |
||
Line 487: | Line 487: | ||
</pre> |
</pre> |
||
Le fichier est comporte des séparations par tabulations et slash et possède cinq colonnes : |
|||
The file is tab and forward-slash separated and has five columns: |
|||
# |
# Spécification du noeud : Définit de quel noeuds prendre l'information, dans ce cas <code>mi!=<nowiki>''</nowiki></code> où l'information morphologique n'est pas nulle. |
||
# |
# Attribut source : Quel attribut source copier, dans ce cas l'information morphologique. |
||
# |
# Condition fragment : Restreint le fragment vers lequel l'information peut être déplacée. Dans ce cas il n'y a pas de restriction, mais par exemple, vous pourriez vouloir déplacer l'information seulement quand le sujet est un nom commun, dans ce cas <code>si='ncsubj'</code> ferait le truc. |
||
# |
# Attribut de destination : L'attribut dans lesquels l'information devrait être mise. |
||
# |
# Mode d'écriture : Peut être l'un des trois, parmi ''no-overwrite'' (ne pas écrire par dessus l'information précédente), ''overwrite'' (écrire par dessus l'information précédente), ''concat'' (concaténer l'information à celle qui existait déjà). |
||
Après avoir fabriqué le fichier, ajoutez les détails en bas du fichier de configuration comme suit, |
|||
<pre> |
<pre> |
||
Line 501: | Line 501: | ||
</pre> |
</pre> |
||
Après que ça ait été rajouté, on est prêt pour lancer le module de transfert syntaxique intra-fragment. On le fait avec le programme <code>ST_intra</code>, qui peut être appelé comme suit : |
|||
<pre> |
<pre> |
||
$ echo "Ur yezh indezeuropek eo ar brezhoneg." | Analyzer -f matxin-br-en.br-en.cfg | |
$ echo "Ur yezh indezeuropek eo ar brezhoneg." | Analyzer -f matxin-br-en.br-en.cfg | \ |
||
ST_intra -f matxin-br-en.br-en.cfg |
iconv -f latin1 | LT -f matxin-br-en.br-en.cfg ST_intra -f matxin-br-en.br-en.cfg |
||
<?xml version="1.0" encoding="UTF-8"?> |
<?xml version="1.0" encoding="UTF-8"?> |
||
Line 531: | Line 531: | ||
</pre> |
</pre> |
||
L'information morphologique a été déplacée du noeud tête de fragment vers le fragment lui-même. |
|||
The morphological information has been moved from the node head of the chunk to the chunk itself. |
|||
=== |
=== Transfert inter-fragment === |
||
La prochaine étape est similaire à la précédente, mais s'occupe des mouvement entre les fragments. Dans notre exemple on n'a pas besoin d'utiliser ça. |
|||
The next stage is similar to the previous stage, but deals with movement between chunks themselves. In our example we don't need to use this. |
|||
== |
== Génération == |
||
=== Intra- |
=== Intra-fragment === |
||
Comme le breton et l'anglais diffèrent par la structure interne des groupes nominaux, la prochaine chose qu'on veut faire est de transférer la structure du breton en anglais, cela supposera de changer {{sc|det nom adj}} en {{sc|det adj nom}}. Un autre processus intra-fragment dont on veut s'occuper est la suppression de l'article définit avant un nom qui a la balise sémantique pour une langue (<code>[HZK+]</code>). |
|||
[[Category:Matxin]] |
[[Category:Matxin]] |
Revision as of 00:09, 11 November 2012
Cette page prétend donner un cheminement pas à pas sur la manière de créer un nouveau traducteur avec la plate-forme Matxin.
Contents
Pré requis
Article principal : Matxin (français)
Cette page ne donne pas des instructions sur l'installation de Matxin, mais présume que les paquets suivants sont correctement installés.
et au choix :
- Freeling (français) (depuis SVN) et les outils
fl-*
pour Freeling (pour le moment ceux-ci peuvent être trouvés dansapertium-tools/freeling
dans apertium SVN), si vous prévoyez d'utiliser Freeling pour les étapes d'analyse/tagging/dépendance
ou
- vislcg3 (depuis SVN), si vous prévoyez d'utiliser lttoolbox/apertium-tagger et Constraint Grammar pour les étapes d'analyse/tagging/dépendance
Aperçu
Comme mentionné au début, cette page prétend donner un guide pas à pas pour créer une nouvelle paire de langues avec Matxin depuis le début. Aucune connaissance en programmation n'est requise, tout ce qu'on a besoin de définir est quelques dictionnaires et grammaires. La plate-forme Matxin est décrite en détail dans Documentation de Matxin et sur la page Matxin de sourceforge. Cette page se concentrera seulement sur la création d'une nouvelle paire de langues, et évitera les problèmes théoriques et méthodologiques.
La paire de langue pour le tutoriel sera breton vers anglais. Elle a été choisie puisque les deux langues ont un ordre de mot assez divergent (le breton est assez libre, permettant VSO, OVS et SVO, là où l'anglais est assez uniformément SVO) ce qui peut montrer quelques avantages que Matxin a sur Apertium. La phrase que nous allons utiliser pour ce propos est :
- Ur yezh indezeuropek eo ar brezhoneg.
- [compl A language indo-european] [verb is] [subj the breton].
- Breton is an Indo-European language (Le breton est une langue Indo-Européenne).
Il y a deux problèmes principaux avec le transfert dans ce cas, le premier est de ré-ordonner, OVS → SVO
, le second est d'enlever l'article défini précédant un nom de langue ar brezhoneg → Breton
.
Pour commencer
Ce HOWTO suppose que l'utilisateur est familier avec les bases de la plate-forme Apertium, si ce n'est pas le cas, veuillez regarder les pages : Lttoolbox (français), Dictionnaire bilingue et Créer une nouvelle paire de langues.
Pour les étapes d'analyse/désambiguïsation/dépendance, il y a deux options principales ouvertes :
- utiliser l'outil Apertium lttoolbox pour la désambiguïsation morphologique, Constraint Grammar pour la désambiguïsation basée sur les règles et le marquage syntaxique, apertium-tagger (français) pour la désambiguïsation statistique et finalement Constraint Grammar pour l'analyse des dépendances
- utiliser Freeling pour toutes ces étapes.
Typiquement le choix dépendra de quelles ressources vous disposez, et les forces et faiblesses de chacun de ces outils.
Analyse avec Apertium et Constraint Grammar
(à écrire...)
Analyse avec Freeling
Le processus d'analyse dans Matxin est fait par Freeling, une suite libre d'analyseurs de langues. L'analyse est faite en quatre étapes, nécessitant quatre (ou plus) ensembles ou fichiers séparés. Le premier est le dictionnaire morphologique, lequel est principalement une liste de formes complète (ex: Speling format (français)) compilée dans un format BerkeleyDB. Il y a ensuite des fichiers pour la désambiguïsation des catégories de mots et pour spécifier les règles de fragmentation et de dépendances. Il y a deux autres étapes qui viennent avant l'analyse morphologique, la tokenisation et le découpage des phrases, mais pour les propos de ce tutoriel elles seront considérées le long de l'analyse morphologique.
Normalement un programme unique est utilisé pour faire toutes les différentes étapes d'analyses, prendre en entrée du texte brut ou déformatté, et envoyer en sortie une analyse de dépendances, le comportement de ce programme est contrôlé par un fichier appelé config.cfg
. Dans Matxin ce programme s'appelle Analyzer
, toutefois dans les étapes suivantes, on va utiliser des outils séparés et laisser créer le fichier config jusqu'à la dernière minute comme il peut devenir compliqué.
Comme compagnon la lecture de cette section de la documentation Freeling est hautement recommandée. Ce tutoriel saute des caractéristiques de Freeling qui ne sont pas nécessaires pour faire un système de traduction automatique de base avec Matxin, et notez qu'il est également possible d'utiliser d'autres analyseurs comme entrée dans les parties fragmentation / dépendance analyse de Freeling, pour plus d'information voir ici.
Morphologique
Afin de créer votre analyseur morphologique dans Freeling vous avez besoin principalement de faire une liste de formes complète. S'il y a déjà un dictionnaire Apertium pour la langue, vous pouvez utiliser les scripts dans apertium SVN (module apertium-tools/freeling
) pour générer un dictionnaire depuis le début, sinon, construisez-la quand même depuis le début, ou construisez un dictionnaire dans lttoolbox et ensuite générez la liste.
Pour le but de cet exercice, vous pouvez juste taper (??) dans un petit dictionnaire à la main. On appellera le dictionnaire matxin-br-en.br.dicc
, et il contiendra
ul un DI0CN0 un un DI0CN0 ur un DI0CN0 yezhoù yezh NCFPV0 yezh yezh NCFSV0 yezh AQ0CN0 indezeuropek indezeuropek AQ0CN0 eo bezañ VMIP3S0 al an DA0CN0 ar an DA0CN0 an an DA0CN0 brezhoneg brezhoneg NCMSV0 prezhoneg brezhoneg NCMSV0 vrezhoneg brezhoneg NCMSV0 . . Fp
Le fichier est séparé par des espaces avec trois colonnes ou plus. La première est pour le forme de surface du mot, les colonnes suivantes sont pour une liste de lemmes et de balises de mots.
Après avoir keyed (??) ceci, on peut le compiler au format BerkeleyDB en utilisant l'outil indexdict
des utilitaires Freeling. Il est bon de noter que Freeling supporte seulement actuellement l'encodage latin1
des caractères, donc si vous travaillez en UTF-8, convertissez le dictionnaire à latin1 d'abord.
$ cat matxin-br-en.br.dicc | iconv -f utf-8 -t latin1 | indexdict br-en.br.db
Maintenant vous devriez avoir deux fichiers, matxin-br-en.br.dicc
, qui est le dictionnaire source, et br-en.br.db
qui est le dictionnaire dans le format BerkeleyDB. On ne peut toutefois pas utiliser cet analyseur sans spécifier un tokeniseur et un splitter. Ces fichiers définissent comment les mots et les phrases seront tokenisées. Pour l'instant on va utiliser un fichier de configuration minimal pour le splitter, donc écrire ce qui suit dans le fichier matxin-br-en.spt.dat
<SentenceEnd> . 0 </SentenceEnd>
Bien sûr, d'autre ponctuation de fin de phrase comme '?' et '!' pourrait aussi être ajouté ici. Et maintenant pour le tokeniseur de mot, on va écrire dans matxin-br-en.tok.dat
<Macros> ALPHANUM [^\]<>[(\.,";:?!'`)^@~|}{_/\\+=&$#*+%\s\-] OTHERS [\]<>[(\.,";:?!'`)^@~|}{_/\\+=&$#*+%\-] </Macros> <RegExps> WORD 0 {ALPHANUM}+ OTHERS_C 0 {OTHERS}+ </RegExps>
Les macros définissent des expressions régulières qui sont utilisées pour tokeniser l'entrée en mots et ponctuation. L'expression régulière WORD
est définie comme une séquence d'un ALPHANUM
ou plus qui à son tour est défini comme n'importe quoi sauf un caractère de ponctuation.
Donc maintenant si on veut analyser morphologiquement une phrase, nous faisons juste :
$ echo "Ur yezh eo ar brezhoneg." | fl-morph matxin-br-en.tok.dat matxin-br-en.spt.dat br-en.br.db | iconv -f latin1 Ur un DI0CN0 -1 -1 yezh yezh NCFSV0 -1 yezh AQ0CN0 -1 eo bezañ VMIP3S0 -1 -1 ar an DA0CN0 -1 -1 brezhoneg brezhoneg NCMSV0 -1 -1 . . Fp -1
Le -1
après chaque analyse est la probabilité a priori de l'analyse et est calculé à partir d'un corpus balisé au préalable. Comme on n'a pas de corpus balisé au préalable, ceci est désactivé.
Désambiguïsation des catégories
Après avoir travaillé sur l'analyse morphologique, l'étape suivante est de créer un tagger de parties de discours. Freeling offre diverses façons de le faire, celles basées HMM et celles basées Relax Constraint Grammar (RelaxCG) sont toutes deux supportées. On va démontrer comment créer un tagger RelaxCG puisque c'est plus facile et que ça ne requiert pas d'entraînement de tagger.
Notre tagger sera très simple puisqu'on a seulement une ambiguïté, yezh 'langue' peut être un nom ou un adjectif. Comme les adjectifs se mettent après le nom en Breton, on va mettre un très faible poids pour les adjectifs après les déterminants,
SETS CONSTRAINTS %% après un déterminant faible poids pour l'adjectif -8.0 AQ* (-1 D*);
Le fichier (qu'on appellera matxin-br-en.br.relax
est fait de deux sections, la première SETS
définit les ensembles de balises ou lemmes, vraiment (?) comme les taggers LIST
et SET
dans VISL Contraintes grammaticales. La deuxième section définit une série de contraintes de poids, dans le format 'poids', suivi par un espace, suivi par la balise suivi par un autre espace and et ensuite le contexte. Le contexte est défini comme une série de positions relatives à la balise en question.
Donc, en utilisant ce fichier on devrait être capables d'obtenir une sortie désambiguïsée :
$ echo "Ur yezh eo ar brezhoneg." | fl-morph matxin-br-en.tok.dat matxin-br-en.spt.dat br-en.br.db | \ fl-tagger matxin-br-en.br.relax | iconv -f latin1 Ur un DI0CN0 -1 yezh yezh NCFSV0 -1 eo bezañ VMIP3S0 -1 ar an DA0CN0 -1 brezhoneg brezhoneg NCMSV0 -1 . . Fp -1
Fragmentation
Donc, après le balisage la prochaine étape est l'analyse du fragment. C'est un peu comme la fragmentation disponible dans Apertium (voir Fragmentation), toutefois aucun transfert n'est réalisé, on groupe juste des mots dans des fragments. La grammaire est assez familière, le côté gauche montre le non-terminal, et le côté droit peut être aussi bien un terminal (dans le cas d'une balise, ex: NCM*
) ou un non-terminal (dans le cas de n-m
). Cette grammaire extrêmement simple va fragmenter l'entrée balisée en constituants (groupe nominal sn
et verb-eo
) pour une utilisation ultérieure par l'analyseur de dépendance. Ça devrait être assez direct, |
est une opération ou, et +
marque le gouverneur (??), ou la tête du fragment. La fin de chaque règle est marqué avec un point .
et les commentaires ils sont placés avec %
.
n-m ==> NCM* . n-f ==> NCF* . adj ==> AQ* . def ==> DA0CN0 . indef ==> DI0CN0 . verb-eo ==> VMIP3S0(eo). %% Un type de fragment spécifique pour la forme 'eo' de bezañ verb ==> VL* . punt ==> Fp . sn ==> def, +n-f, adj | def, +n-f | +n-f, adj | +n-f . sn ==> def, +n-m, adj | def, +n-m | +n-m, adj | +n-m . sn ==> indef, +n-m, adj | indef, +n-m | +n-m, adj | +n-m . sn ==> indef, +n-f, adj | indef, +n-f | +n-f, adj | +n-f . @START S.
La directive @START
indique que le noeud de début de la phrase devrait être étiqueté S
. Donc, la sortie de cette grammaire sera :
$ echo "Ur yezh indezeuropek eo ar brezhoneg." | fl-morph matxin-br-en.tok.dat matxin-br-en.spt.dat br-en.br.db | \ fl-tagger matxin-br-en.br.relax | fl-chunker matxin-br-en.br.gram | iconv -f latin1 S_[ sn_[ indef_[ +(Ur un DI0CN0) ] +n-f_[ +(yezh yezh NCFSV0) ] adj_[ +(indezeuropek indezeuropek AQ0CN0) ] ] verb-eo_[ +(eo bezañ VMIP3S0) ] sn_[ def_[ +(ar an DA0CN0) ] +n-m_[ +(brezhoneg brezhoneg NCMSV0) ] ] punt_[ +(. . Fp) ] ]
Notez que la phrase est fragmentée en sn verb-eo sn
. Ça peut valoir la peine de jouer un peu avec la grammaire pour obtenir un meilleur ressenti pour ça.
Analyse des dépendances
La prochaine étape est de créer une grammaire de dépendance. La grammaire de dépendance décrit et étiquette les dépendances entre constituants. Elle est constituée de deux sections principales, <GRPAR>
qui arrange l'analyse fournie par le fragmenteur. Dans l'exemple, le verbe est déplacé au début de la phrase, avant le complément, et <GRLAB>
qui étiquette les parties de l'analyse.
Notez qu'en breton, les phrases avec eo (une forme de bezañ 'être') a toujours la structure Objet—Verbe—Sujet, et donc nécessite une attention spéciale. Ainsi on étiquette le côté gauche comme le prédicat complément et le côté droit comme le sujet.
<GRPAR> 1 - - (sn,verb-eo) top_right RELABEL - % (Ur yezh keltiek (eo)) </GRPAR> <GRLAB> verb-eo attr-pred d.label=sn d.side=left p.label=verb-eo %% Étiquette dépendant de la gauche du verb-eo comme attr-pred verb-eo ncsubj d.label=sn d.side=right p.label=verb-eo %% Étiquette dépendant de la droite du verb-eo comme ncsubj </GRLAB>
Dans la grammaire ci-dessus, d.side
indique le côté du dépendant, et p.label
indique l'étiquette du parent. Ce fichier est documenté de manière compréhensible dans la section Dependency parser rule file dans la documentation Freeling.
On va mettre le fichier dans matxin-br-en.br.dep
, et la sortie résultante de l'analyse est :
$ echo "Ur yezh indezeuropek eo ar brezhoneg." | fl-morph matxin-br-en.tok.dat matxin-br-en.spt.dat br-en.br.db | \ fl-tagger matxin-br-en.br.relax | fl-parser matxin-br-en.br.gram matxin-br-en.br.dep | iconv -f latin1 verb-eo/top/(eo bezañ VMIP3S0) [ sn/attr-pred/(yezh yezh NCFSV0) [ indef/modnorule/(Ur un DI0CN0) adj/modnorule/(indezeuropek indezeuropek AQ0CN0) ] sn/ncsubj/(brezhoneg brezhoneg NCMSV0) [ def/modnorule/(ar an DA0CN0) ] punt/modnomatch/(. . Fp) ]
Fichier de configuration
Donc maintenant nous avons une étape d'analyse qui fonctionne plus ou moins bien, il nous faut obtenir cette analyse dans une forme qui peut être utilisé par Matxin. Ceci impliquera d'écrire un fichier de configuration qui spécifie tous les modules qu'on a utilisé auparavant à un endroit. Ci dessous voici un fichier de configuration minimal pour les modules que nous avons utilisé ci-dessus. Toutes les options sont obligatoires, si une est omise, des messages d'erreur étonnants peuvent se produire, donc le mieux est juste de copier et coller ceci, changer les chemins et ensuite y ajouter as we go along (???).
#### Langue Lang=br ## Les formats d'entrée/sortie valides sont : plain, token, splitted, morfo, tagged, parsed InputFormat=plain OutputFormat=dep # Considérer chaque passage à la ligne comme une fin de phrase AlwaysFlush=no # Options tokeniser TokenizerFile="/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.tok.dat" # Options splitter (découpeur) SplitterFile="/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.spt.dat" # Options d'analyse morphologique SuffixFile="" SuffixAnalysis=no MultiwordsDetection=no LocutionsFile="" DecimalPoint="." ThousandPoint="," QuantitiesFile="" NumbersDetection=no PunctuationDetection=no PunctuationFile="" DatesDetection=no QuantitiesDetection=no DictionarySearch=yes DictionaryFile=/home/fran/MATXIN/source/matxin-br-en/br-en.br.db ProbabilityAssignment=no ProbabilityFile="" # Options NER NERecognition=none NPDataFile="" # Options Tagger Tagger=relax TaggerRelaxFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br.relax TaggerRelaxMaxIter=500 TaggerRelaxScaleFactor=670.0 TaggerRelaxEpsilon=0.001 TaggerRetokenize=no TaggerForceSelect=tagger # Options Parser GrammarFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br.gram # Options dépendance parser DepParser=txala DepTxalaFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br.dep
Quand on a installé le fichier de configuration on peut utiliser le programme Analyzer
du paquet Matxin. La sortie finale de Analyzer
sera :
$ echo "Ur yezh indezeuropek eo ar brezhoneg." | Analyzer -f matxin-br-en.br-en.cfg | iconv -f latin1 <?xml version='1.0' encoding='UTF-8' ?> <corpus> <SENTENCE ord='1' alloc='0'> <CHUNK ord='2' alloc='21' type='verb-eo' si='top'> <NODE ord='4' alloc='21' form='eo' lem='bezañ' mi='VMIP3S0'> </NODE> <CHUNK ord='1' alloc='0' type='sn' si='attr-pred'> <NODE ord='2' alloc='3' form='yezh' lem='yezh' mi='NCFSV0'> <NODE ord='1' alloc='0' form='Ur' lem='un' mi='DI0CN0'> </NODE> <NODE ord='3' alloc='8' form='indezeuropek' lem='indezeuropek' mi='AQ0CN0'> </NODE> </NODE> </CHUNK> <CHUNK ord='3' alloc='24' type='sn' si='ncsubj'> <NODE ord='6' alloc='27' form='brezhoneg' lem='brezhoneg' mi='NCMSV0'> <NODE ord='5' alloc='24' form='ar' lem='an' mi='DA0CN0'> </NODE> </NODE> </CHUNK> <CHUNK ord='4' alloc='36' type='punt' si='modnomatch'> <NODE ord='7' alloc='36' form='.' lem='.' mi='Fp'> </NODE> </CHUNK> </CHUNK> </SENTENCE> </corpus>
ce qui est une représentation XML (voir Documentation de Matxin) de l'analyse des dépendances qu'on a vu précédemment.
Transfert
Transfert lexical
La prochaine étape dans le processus est le transfert lexical, il prend les formes lexicales de la langue source et retourne les formes lexicales de la langue cible. Il y a trois fichiers impliqués dans le transfert lexical :
- Le dictionnaire bilingue (
matxin-br-en.br-en.dix
), qui utilise le format familier des dictionnaires lttoolbox, bien que légèrement différent comme résultat des balisage des mots - Le dictionnaire de sémantique des noms (
matxin-br-en.br.sem_info
), un fichier avec des tabulations comme séparateur - Le dictionnaire de type de fragment (
matxin-br-en.br.chunk_type
), un fichier avec des tabulations comme séparateur
Le module qui réalise le transfert lexical s'appelle LT
, et le format des dictionnaires décrit ci-dessus sera expliqué en bas.
Dictionnaire bilingue
Le format de base du dictionnaire bilingue est le même que dans Apertium,
<dictionary> <alphabet/> <sdefs> <sdef n="mi" c="Information morphologique"/> <sdef n="parol" c="style de balise PAROLE"/> </sdefs> <section id="main" type="standard"> </section> </dictionary>
Contrairement à Apertium où les symboles sont utilisés pour supporter l'information morphologique (ex: <sdef n="adj"/>
et
pour les adjectifs), dans Matxin les symboles sont utilisés pour définir les attributs de l'élément noeud. Par exemple,
fabrique un attribut dans le noeud appelé parol
avec la valeur des balises qui suivent. Les balises suivantes sont habituellement entourées de crochets []
.
Donc, pour transférer la balise de parole d'un nom féminin singulier (NCFSV0
) en Breton dans la représentation appropriée en anglais pour le reste des étapes de transfert, ex: nom singulier sans genre parol="NC" mi="[NUMS]"
, on peut utiliser l'entrée suivante dans le dictionnaire bilingue :
<e><p><l>yezh<s n="parol"/>NCFSV0</l><r>language<s n="parol"/>NC<s n="mi"/>[NUMS]</r></p></e>
ce qui donnera en sortie
<NODE ref="2" alloc="3" UpCase="none" lem="language" parol="NC" mi="[NUMS]">
par le module de transfert lexical. Comme ces modèles sont répétés fréquemment, typiquement ils sont mis dans des paradigmes, mais au lieu d'être des paradigmes morphologiques, comme dans Apertium, ce sont des paradigmes de transfert lexical, donc par exemple pour les noms on pourrait avoir :
<pardef n="NC_STD"> <e><p><l><s n="parol"/>NCFSV0</l><r><s n="parol"/>NC<s n="mi"/>[NUMS]</r></p></e> <e><p><l><s n="parol"/>NCFPV0</l><r><s n="parol"/>NC<s n="mi"/>[NUMP]</r></p></e> <e><p><l><s n="parol"/>NCMSV0</l><r><s n="parol"/>NC<s n="mi"/>[NUMS]</r></p></e> <e><p><l><s n="parol"/>NCMPV0</l><r><s n="parol"/>NC<s n="mi"/>[NUMP]</r></p></e> </pardef>
Transfert des noms féminins et masculins singulier et pluriel en breton dans leurs équivalents anglais. Les entrées correspondantes pour nos deux noms dans la section main seraient,
<e><p><l>yezh</l><r>language</r></p><par n="NC_STD"/></e> <e><p><l>brezhoneg</l><r>Breton</r></p><par n="NC_STD"/></e>
En utilisant l'information pour les noms et le XML généré après le transfert lexical ci-dessous vous devriez être capable de créer un dictionnaire bilingue complet pour notre phrase de test.
Dictionnaire sémantique des noms
Le dictionnaire sémantique des noms un un simple fichier qui permet le marquage sémantique de base des lemmes. Ils fonctionnent quelque peu comme des listes dans les fichiers de transfert Apertium, et permettent la catégorisation des noms dans des classes sémantiques, par exemple langue, animacy (??), matériel, moyen de communication etc. Le fichier est une liste séparée par des tabulations de lemmes et balises sémantiques, par exemple pour notre phrase on pourrait vouloir marquer brezhoneg 'breton' comme [HZK]
(une abréviation de hizkuntzak 'langues').
Donc faites le fichier matxin-br-en.br.sem_info
avec le contenu qui suit :
##[HZK]: Languages / Yezhoù (hizkuntzak) brezhoneg [HZK+]
Vous pouvez ajouter d'autres langues comme euskareg 'basque' et kembraeg 'gallois'. Le symbole +
signifie que cette caractéristique est positive, la caractéristique peut aussi être suivie de -
pour négative ou ?
pour incertaine. Le module de transfert lexical ne semble pas utiliser cette information directement, mais a besoin de la présence du fichier.
Dictionnaire de transfert des types de fragments
Le dictionnaire final nécessaire pour l'étape de transfert lexical est le dictionnaire de transfert des types de fragments. Il transfère les types de fragments (ex: sn
syntagme nominal 'groupe nominal' et sp
syntagme prépositionnel 'groupe prépositionnel') dans les types de fragments de la langue cible. Comme on maintient les mêmes types de fragments entre les langues on peut juste avoir un fichier vide pour ça. Quoique ça vaut probablement la peine d'ajouter un commentaire avec le format, par exemple faire un fichier appelé matxin-br-en.br-en.chunk_type
avec les contenus suivants,
#Catégorie (SL) #Catégorie (TL) #Description (SL) #Description (TL) sn sn #groupe nominal groupe nominal
Fichier de configuration
Maintenant on en vient à éditer le fichier de configuration, on ouvre le fichier, ajoute les options suivantes au bas du fichier et on le sauvegarde.
# Options de transfert TransDictFile=/home/fran/MATXIN/source/matxin-br-en/br-en.autobil.bin ChunkTypeDict=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br-en.chunk_type NounSemFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br.sem_info
Sortie du transfert lexical
$ echo "Ur yezh indezeuropek eo ar brezhoneg." | Analyzer -f matxin-br-en.br-en.cfg | iconv -f latin1 | \ LT -f matxin-br-en.br-en.cfg <?xml version="1.0" encoding="UTF-8"?> <corpus> <SENTENCE ref="1" alloc="0"> <CHUNK ref="2" type="verb-eo" alloc="21" si="top"> <NODE ref="4" alloc="21" slem="bezañ" smi="VMIP3S0" UpCase="none" lem="be" parol="VM" mi="[IND][PRES][P3][NUMS]"/> <CHUNK ref="1" type="sn" alloc="0" si="attr-pred"> <NODE ref="2" alloc="3" slem="yezh" smi="NCFSV0" UpCase="none" lem="language" parol="NC" mi="[NUMS]"> <NODE ref="1" alloc="0" slem="un" smi="DI0CN0" UpCase="none" lem="a" parol="DI"/> <NODE ref="3" alloc="8" slem="indezeuropek" smi="AQ0CN0" UpCase="none" lem="Indo-European" parol="AQ" mi="[PST]"/> </NODE> </CHUNK> <CHUNK ref="3" type="sn" alloc="24" si="ncsubj"> <NODE ref="6" alloc="27" slem="brezhoneg" smi="NCMSV0" UpCase="none" lem="Breton" parol="NC" mi="[NUMS]"> <NODE ref="5" alloc="24" slem="an" smi="DA0CN0" UpCase="none" lem="the" parol="DA"/> </NODE> </CHUNK> <CHUNK ref="4" type="punt" alloc="36" si="modnomatch"> <NODE ref="7" alloc="36" slem="." smi="Fp" UpCase="none" lem="." parol="Fp"/> </CHUNK> </CHUNK> </SENTENCE> </corpus>
Note: La sortie ci-dessus a été post-traitée par xmllint --format -
pour donner un formatages plus lisible pour un humain.
Transfert intra-fragment
Le rôle du transfert intra-fragment est de déplacer l'information des noeuds dans un fragment au fragment, par exemple pour faire concorder un groupe nominal sujet et le verbe dans un groupe verbal. On va juste copier l'information morphologique directement, donc faites un fichier appelé matxin-br-en.br-en.intra1
et mettez-y ce qui suit.
# 1/2 3/4 5 mi!=''/mi /mi no-overwrite
Le fichier est comporte des séparations par tabulations et slash et possède cinq colonnes :
- Spécification du noeud : Définit de quel noeuds prendre l'information, dans ce cas
mi!=''
où l'information morphologique n'est pas nulle. - Attribut source : Quel attribut source copier, dans ce cas l'information morphologique.
- Condition fragment : Restreint le fragment vers lequel l'information peut être déplacée. Dans ce cas il n'y a pas de restriction, mais par exemple, vous pourriez vouloir déplacer l'information seulement quand le sujet est un nom commun, dans ce cas
si='ncsubj'
ferait le truc. - Attribut de destination : L'attribut dans lesquels l'information devrait être mise.
- Mode d'écriture : Peut être l'un des trois, parmi no-overwrite (ne pas écrire par dessus l'information précédente), overwrite (écrire par dessus l'information précédente), concat (concaténer l'information à celle qui existait déjà).
Après avoir fabriqué le fichier, ajoutez les détails en bas du fichier de configuration comme suit,
IntraMoveFile=/home/fran/MATXIN/source/matxin-br-en/matxin-br-en.br-en.intra1
Après que ça ait été rajouté, on est prêt pour lancer le module de transfert syntaxique intra-fragment. On le fait avec le programme ST_intra
, qui peut être appelé comme suit :
$ echo "Ur yezh indezeuropek eo ar brezhoneg." | Analyzer -f matxin-br-en.br-en.cfg | \ iconv -f latin1 | LT -f matxin-br-en.br-en.cfg ST_intra -f matxin-br-en.br-en.cfg <?xml version="1.0" encoding="UTF-8"?> <corpus> <SENTENCE ref="1" alloc="0"> <CHUNK ref="2" type="verb-eo" alloc="21" si="top" mi="[IND][PRES][P3][NUMS]"> <NODE ref="4" alloc="21" UpCase="none" lem="be" parol="VM" mi="[IND][PRES][P3][NUMS]" /> <CHUNK ref="1" type="sn" alloc="0" si="attr-pred" mi="[NUMS]"> <NODE ref="2" alloc="3" UpCase="none" lem="language" parol="NC" mi="[NUMS]"> <NODE ref="1" alloc="0" UpCase="none" lem="a" parol="DI"/> <NODE ref="3" alloc="8" UpCase="none" lem="Indo-European" parol="AQ" mi="[PST]"/> </NODE> </CHUNK> <CHUNK ref="3" type="sn" alloc="24" si="ncsubj" mi="[NUMS]"> <NODE ref="6" alloc="27" UpCase="none" lem="Breton" parol="NC" mi="[NUMS]"> <NODE ref="5" alloc="24" UpCase="none" lem="the" parol="DA"/> </NODE> </CHUNK> <CHUNK ref="4" type="punt" alloc="36" si="modnomatch"> <NODE ref="7" alloc="36" UpCase="none" lem="." parol="Fp"/> </CHUNK> </CHUNK> </SENTENCE> </corpus>
L'information morphologique a été déplacée du noeud tête de fragment vers le fragment lui-même.
Transfert inter-fragment
La prochaine étape est similaire à la précédente, mais s'occupe des mouvement entre les fragments. Dans notre exemple on n'a pas besoin d'utiliser ça.
Génération
Intra-fragment
Comme le breton et l'anglais diffèrent par la structure interne des groupes nominaux, la prochaine chose qu'on veut faire est de transférer la structure du breton en anglais, cela supposera de changer det nom adj en det adj nom. Un autre processus intra-fragment dont on veut s'occuper est la suppression de l'article définit avant un nom qui a la balise sémantique pour une langue ([HZK+]
).