Création d'une nouvelle paire avec 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.
Contents
Pré requis[edit]
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[edit]
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[edit]
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[edit]
(à écrire...)
Analyse avec Freeling[edit]
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[edit]
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[edit]
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[edit]
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[edit]
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[edit]
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[edit]
Transfert lexical[edit]
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[edit]
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[edit]
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[edit]
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[edit]
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[edit]
$ 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[edit]
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[edit]
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[edit]
Intra-fragment[edit]
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+]
).