Difference between revisions of "Créer une nouvelle paire de langues"

From Apertium
Jump to navigation Jump to search
m (Ajout du paragraphe →‎Notes de bas de page)
 
(41 intermediate revisions by 12 users not shown)
Line 1: Line 1:
[[Apertium New Language Pair HOWTO|In English]]
[http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=85 free ericsson ringtones] [http://wc1.worldcrossing.com/WebX/.1de609fb cheap ortho] [http://wc1.worldcrossing.com/WebX/.1de609ec hgh online] [http://library.cshl.edu/wp/vb/member.php?u=1370 tracfone ringtones] [http://wc1.worldcrossing.com/WebX/.1de609e3 cheap clomid] [http://wc1.worldcrossing.com/WebX/.1de60a29 buy tramadol] [http://students.hsc.unt.edu/housing/item.cfm?type=2889 cheap vigrx] [http://wc1.worldcrossing.com/WebX/.1de60a18 motorola ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=121 free real ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=162 meridia online] [http://students.hsc.unt.edu/housing/item.cfm?type=2886 ortho online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=213 free polyphonic ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=135 cheap ultracet] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30335 nextel ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2881 lisinopril online] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=241 free sony ericsson ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=128 free sony ericsson ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2916 alltel ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2897 nokia ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a0f cheap cialis] [http://wc1.worldcrossing.com/WebX/.1de60a09 cheap viagra] [http://news.engin.brown.edu/forums/thread-view.asp?tid=207 real ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a0e cheap celexa] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=229 cheap valium] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=354 nokia ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2866 levitra online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=200 nokia ringtones] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=200 nexium] [http://news.engin.brown.edu/forums/thread-view.asp?tid=214 cingular ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2910 polyphonic ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2891 buy diethylpropion] [http://students.hsc.unt.edu/housing/item.cfm?type=2885 cheap tenuate] [http://news.engin.brown.edu/forums/thread-view.asp?tid=159 cheap cialis] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30366 jazz ringtones] [http://wc1.worldcrossing.com/WebX/.1de609fa free online pharmacy] [http://wc1.worldcrossing.com/WebX/.1de60a22 but phentermine] [http://news.engin.brown.edu/forums/thread-view.asp?tid=208 motorola ringtones] [http://library.cshl.edu/wp/vb/member.php?u=1357 levitra online] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=195 mono ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=199 zyban online] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=363 free samsung ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2901 mp3 ringtones] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30235 soma online] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=136 ultram online] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=72 ambien online] [http://students.hsc.unt.edu/housing/item.cfm?type=2862 buy vicodin] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30258 vicodin online] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=182 free funny ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2890 online zanaflex] [http://wc1.worldcrossing.com/WebX/.1de609dc buy albuterol] [http://wc1.worldcrossing.com/WebX/.1de60a20 nexium online] [http://students.hsc.unt.edu/housing/item.cfm?type=2875 propecia online] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=165 cheap ambien] [http://wc1.worldcrossing.com/WebX/.1de609f8 free nokia ringtones] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=350 alprazolam online] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=139 viagra online] [http://students.hsc.unt.edu/housing/item.cfm?type=2874 ultracet online] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=91 cheap hoodia] [http://news.engin.brown.edu/forums/thread-view.asp?tid=175 cyclobenzaprine online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=201 free free ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=153 phentermine online] [http://students.hsc.unt.edu/housing/item.cfm?type=2848 soma online] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30337 free real ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=94 jazz ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a0a vicodin online] [http://students.hsc.unt.edu/housing/item.cfm?type=2896 buy zyban] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=178 ericsson ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a01 sagem ringtones] [http://library.cshl.edu/wp/vb/member.php?u=1346 cheap diazepam] [http://news.engin.brown.edu/forums/thread-view.asp?tid=222 sharp ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a1d cingular ringtones] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30230 but adipex] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=138 free verizon ringtones] [http://wc1.worldcrossing.com/WebX/.1de609fe free qwest ringtones] [http://wc1.worldcrossing.com/WebX/.1de609e4 clonazepam online] [http://wc1.worldcrossing.com/WebX/.1de60a31 buy zanaflex] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=106 free mtv ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a1a mtv ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a15 kyocera ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=218 sony ericsson ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=132 cheap tenuate] [http://students.hsc.unt.edu/housing/item.cfm?type=2904 free real ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=137 cheap valium] [http://news.engin.brown.edu/forums/thread-view.asp?tid=168 paxil online] [http://library.cshl.edu/wp/vb/member.php?u=1367 didrex online] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30295 sildenafil online] [http://wc1.worldcrossing.com/WebX/.1de609f7 free nextel ringtones] [http://wc1.worldcrossing.com/WebX/.1de609f3 free midi ringtones] [http://library.cshl.edu/wp/vb/member.php?u=1348 cheap ativan] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=337 xanax online] [http://wc1.worldcrossing.com/WebX/.1de609e6 buy cyclobenzaprine] [http://library.cshl.edu/wp/vb/member.php?u=1360 order lorazepam] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=162 alltel ringtones] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=176 didrex online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=204 mp3 ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2911 free cingular ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a07 free tracfone ringtones] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30241 xanax online] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=356 free tracfone ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=111 norco online] [http://wc1.worldcrossing.com/WebX/.1de60a13 order fioricet] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=191 lorazepam online] [http://library.cshl.edu/wp/vb/member.php?u=1369 free free ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2858 viagra online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=224 free wwe ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2852 xanax online] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30307 cheap zoloft] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30331 free free ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a27 but sildenafil] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=145 xenical online] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30339 free samsung ringtones] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30294 cheap prozac] [http://news.engin.brown.edu/forums/thread-view.asp?tid=176 ultracet online] [http://library.cshl.edu/wp/vb/member.php?u=1352 buy norco] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=189 cheap lipitor] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=362 free motorola ringtones] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=224 free sagem ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=101 buy meridia] [http://wc1.worldcrossing.com/WebX/.1de609ee but hydrocodone] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30244 diazepam online] [http://wc1.worldcrossing.com/WebX/.1de609e0 cheap ativan] [http://students.hsc.unt.edu/housing/item.cfm?type=2861 cheap norco] [http://students.hsc.unt.edu/housing/item.cfm?type=2877 prozac online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=216 free sonyericsson ringtones] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=360 qwest ringtones] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=190 cheap lisinopril] [http://wc1.worldcrossing.com/WebX/.1de60a10 cheap didrex] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=228 order ultram] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=76 cialis] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30259 alprazolam online] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=359 nextel ringtones] [http://wc1.worldcrossing.com/WebX/.1de609e5 free cool ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2888 lortab online] [http://library.cshl.edu/wp/vb/member.php?u=1373 free nextel ringtones] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=216 zyban online] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=206 cheap pharmacy online] [http://library.cshl.edu/wp/vb/member.php?u=1344 xanax online] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=344 online ativan] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30345 free sprint ringtones] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30248 ativan online] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=131 sprint ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2871 cheap wellbutrin] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=146 zanaflex online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=154 carisoprodol online] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30280 propecia online] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=118 prozac online] [http://library.cshl.edu/wp/vb/member.php?u=1341 valium online] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=144 xanax online] [http://students.hsc.unt.edu/housing/item.cfm?type=2905 motorola ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=112 but ortho] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=223 cheap wellbutrin] [http://news.engin.brown.edu/forums/thread-view.asp?tid=169 levitra online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=156 fioricet] [http://library.cshl.edu/wp/vb/member.php?u=1377 samsung ringtones] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30312 ortho online] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30356 free cool ringtones] [http://wc1.worldcrossing.com/WebX/.1de609f0 lorazepam online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=187 cheap celexa] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30230 tramadol online] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=211 polyphonic ringtones] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=214 cheap zanaflex] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=110 free nokia ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=189 cheap ortho] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=237 free samsung ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=151 order soma] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=99 lorazepam online] [http://students.hsc.unt.edu/housing/item.cfm?type=2912 sagem ringtones] [http://students.hsc.unt.edu/housing/item.cfm?type=2907 free sprint ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a17 lipitor online] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30334 free mp3 ringtones] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=234 sprint ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=141 buy vigrx] [http://wc1.worldcrossing.com/WebX/.1de60a23 free polyphonic ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a1f lisinopril online] [http://itcweb.ecsu.edu/portal/forums.asp?ForumId=13&TopicId=197 mp3 ringtones] [http://library.cshl.edu/wp/vb/member.php?u=1349 viagra online] [http://library.cshl.edu/wp/vb/member.php?u=1382 cingular ringtones] [http://www.e.kth.se/cgi-bin/esekt/discussion?command=read&discussionid=4&id=30310 tenuate online] [http://students.hsc.unt.edu/housing/item.cfm?type=2922 kyocera ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=206 free qwest ringtones] [http://wc1.worldcrossing.com/WebX/.1de609f9 order norco] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=351 clonazepam online] [http://students.hsc.unt.edu/housing/item.cfm?type=2878 sildenafil online] [http://students.hsc.unt.edu/housing/item.cfm?type=2902 nextel ringtones] [http://www.psfc.mit.edu/~jinseok/bbse/view.php?id=presentations&no=357 free funny ringtones] [http://library.cshl.edu/wp/vb/member.php?u=1347 but cialis] [http://library.cshl.edu/wp/vb/member.php?u=1365 cheap ultracet] [http://news.engin.brown.edu/forums/thread-view.asp?tid=210 sprint ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=158 cheap diazepam] [http://wc1.worldcrossing.com/WebX/.1de609ea free free ringtones] [http://wc1.worldcrossing.com/WebX/.1de60a25 free samsung ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=88 free free ringtones] [http://library.cshl.edu/wp/vb/member.php?u=1358 cheap hydrocodone] [http://library.cshl.edu/wp/vb/member.php?u=1339 tramadol online] [http://students.hsc.unt.edu/housing/item.cfm?type=2868 ambien online] [http://news.engin.brown.edu/forums/thread-view.asp?tid=228 free mtv ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=104 free motorola ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=89 funny ringtones] [http://news.engin.brown.edu/forums/thread-view.asp?tid=211 music ringtones] [http://www.ees.ufl.edu/alumni/forums.asp?ForumId=5&TopicId=80 free cool ringtones] Apertium est un logiciel de traduction automatique, développé par l'université d'Alicante et financé par le gouvernement. Le code est diffusé sous licence GNU GPL.


Tutoriel de création d'une nouvelle paire de langues pour Apertium
Apertium est l'un des deux projets d'OpenTrad. Au départ, le logiciel était conçu pour traduire des textes dans des langues très proches. Aujourd'hui, le logiciel traite des paires langues qui diffèrent davantage, comme par exemple la paire anglais-catalan.


Ce document est un tutoriel décrivant les étapes nécessaires à la création d'une nouvelle paire de langues pour le logiciel de traduction automatique Apertium.
Le logiciel consiste en
*un moteur de traduction automatique qui ne repose sur aucune langue (humaine) ;
*d'outils destinés à gérer les données linguistiques nécessaires pour concevoir, pour une paire de langue donnée, un système de traduction automatique ;
*de données linguistiques pour un nombre toujours croissant de paires de langues.


Des connaissances de la linguistique ou du système de traduction ne sont pas nécessaires, mais il est tout de même important d'avoir certaines notions de grammaire.
== Installation ==


==Introduction==
Apertium est notamment disponible pour Ubuntu, et pour Ubuntu (Feisty-Universe)


Apertium est une plate-forme de traduction automatique. Le moteur et les outils sont présents dans le but de faciliter la création d'un système de traduction. Les seules autres choses nécessaires au bon fonctionnement d'Apertium sont les données. Les données sont divisées en trois parties principales, les dictionnaires, et en quelques règles.
Pour Ubuntu, une version ancienne existe sur http://packages.ubuntu.com/feisty/libs/apertium.

Pour obtenir plus d'information à propos du projet apertium, veuillez visiter la page suivante : http://apertium.sourceforge.net.

Pour qu'Apertium puisse fonctionner, vous aurez besoin de :

* [[Lttoolbox (français)|lttoolbox]] (>= 3.0.0)
* libxml utils (xmllint etc.)
* apertium (>= 3.0.0)
* Un éditeur de texte

Ce document ne décrit pas les étapes de l'installation. Pour plus d'informations, veuillez consulter la documentation sur le site du projet Apertium.

== Qu'est-ce qu'une paire de langues ? ==

Apertium utilise un type de transfert dit superficiel. Cela signifie que le moteur utilise des dictionnaires et des règles de transfert superficielles. Ce type de transfert est différent de celui dit profond parce qu'il ne fait pas une analyse syntaxique complète. Les règles sont des opérations sur un groupe d'unités lexicales au lieu d'une analyse en arbre. À la base, il y a trois dictionnaires principaux :

#Le [[dictionnaire morphologique]] de la langue xx : il contient les règles d'inflexion des mots dans la langue xx. Dans l'exemple que nous utiliserons, le fichier sera nommé apertium-sh-en.sh.dix<ref>Ce fichier peux avoir éventuellement l'extension [[fichiers metadix et métaparadigmes|metadix]]</ref>
#Le dictionnaire morphologique de la langue yy : il contient les règles d'inflexion des mots dans la langue yy. Dans l'exemple que nous utiliserons, le fichier sera nommé apertium-sh-en.en.dix
#Le [[dictionnaire bilingue]]: il contient la correspondance entre les mots et les symboles dans les deux langues. Dans l'exemple que nous utiliserons, le fichier sera nommé apertium-sh-en.sh-en.dix

Dans une paire de traduction, les deux langues peuvent prendre le rôle de langue source ou langue cible. Ce sont des termes relatifs.

Deux autres fichiers contiennent les règles de transfert. Ces règles sont les lignes directrices de l'ordre des mots dans la phrase. Par exemple : chat noir -> cat black -> black cat. Les règles gouvernent aussi le genre et le nombre. Les règles peuvent aussi êtes utilisées dans le but d'insérer des éléments lexicaux, tel que décrit plus loin. Ces fichiers sont :

* Règles de transfert de la langue xx vers la langue yy : ce fichier contient les règles de transformation de la langue xx vers la langue yy. Dans notre exemple, le fichier sera nommé : apertium-sh-en.sh-en.t1x
* Règles de transfert de la langue xx vers la langue yy : ce fichier contient les règles de transformation de la langue xx vers la langue yy. Dans notre exemple, le fichier sera nommé : apertium-sh-en.en-sh.t1x

Pour certaines paires de langues, il existe des fichiers supplémentaires mais nous n'abordons pas ces fichiers dans ce tutoriel. Les fichiers mentionnés plus haut sont ceux qui sont nécessaires au bon fonctionnement du système.

==Paire de langues==

Comme il est mentionné plus haut, ce tutoriel utilise le croate et l'anglais comme langues pour expliquer la création du système de base. Cette paire n'est pas idéale compte tenu du fait que la relation entre les deux langues est tout de même faible. Néanmoins, cela ne devrait pas poser de problèmes pour les exemples qui suivent.

==Une courte note sur les termes==

Il y a un certain nombre de termes qui doivent être compris avant de continuer.

Le premier est : '''lemme'''. Un lemme est la forme standard d'un mot qui peut être fléchi (conjugué, décliné, etc.). Par exemple, le lemme de la forme "sachions" est "savoir". En anglais, comme la flexion des mots est très limitée, le lemme d'un mot est très souvent sa forme singulière masculine, pour les verbes, le lemme est l'infinitif duquel on retire le "to", par exemple, le verbe "be" est l'infinitif et le lemme de la forme conjugué "was". En français, pour les noms et les adjectifs, le lemme sera la première personne du singulier, pour les verbes ce sera l'infinitif.

Le deuxième est : '''symbole'''. Dans le contexte du système Apertium, un symbole (ou "tag") fait référence à une étiquette grammaticale.
Comme le logiciel a été initialement développé en pays catalan, les abréviations proviennent souvent du catalan. Le mot chats est un mot au pluriel. Deux étiquettes lui seront associées, <n>; pour nom et <pl> pour pluriel. Les symboles sont définis entre balises pour le bon fonctionnement du moteur Apertium. Attention : l'écriture <pl> sera utilisée en "mode texte", alors qu'en "mode XML" le même tag sera noté <s n="pl"/>.

Le troisième est : '''paradigme'''. (En grec, "paradeigma" signifie "exemple".) Dans le contexte du système Apertium, un paradigme fait référence au comportement d'un certain groupe de mots lors de la flexion. Dans le dictionnaire morphologique, les lemmes sont liés à des paradigmes, ce qui permet de connaître la flexion de certains lemmes sans avoir à énumérer toutes les terminaisons possibles. Les paradigmes sont définis dans les éléments <pardef> et appelés par les éléments <par>.

==Les dictionnaires monolingues==


Commençons par définir notre premier dictionnaire. Le dictionnaire est un fichier XML. Ouvrez votre éditeur de texte favori et copiez-y les lignes suivantes.


Si l'on veut profiter des dernières versions, il vaut mieux installer par svn. Installer d'abord svn puis taper :
<pre>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
svn co https://apertium.svn.sourceforge.net/svnroot/apertium
<dictionary>

</dictionary>
</pre>
</pre>


Enregistrez-le sous le nom : apertium-sh-en.sh.dix
==Créer une nouvelle paire de langues==
Pour créer une nouvelle paire de langues, il faut créer cinq nouveaux fichiers :


Pour être utile, nous devons ajouter quelques entrées dans notre dictionnaire. On commencera d'abord par spécifier l'ensemble des caractères susceptibles d'être utilisés dans le dictionnaire entre les balises 'alphabet'. Pour le serbo-croate, l'alphabet ressemblera à ce qui suit :
*deux dictionaires monolingues ;
<pre>
*un dictionaire bilingue ;
<alphabet>ABCČĆDDžĐEFGHIJKLLjMNNjOPRSŠTUVZŽabcčćddžđefghijklljmnnjoprsštuvzž</alphabet>
*deux fichiers de règles de transfert ;
</pre>
Il convient ensuite de remplir l'espace entre les balises <dictionary> et </dictionary>.


Nous devons aussi définir certains symboles. Commençons par des symboles simples tels que nom (n), singulier (sg) et pluriel (pl).
Soient A et B les langues pour lesquelles vous désirez créer une paire. Vous pouvez dans certain cas récupérer un dictionaire monolingue si une paire A-X ou B-X existe déjà (X est une langue quelconque).


<pre>
Nous allons prendre comme exemple la création de la paire français-néerlandais. Nous utiliserons comme abréviation fr pour le français et nl pour le néerlandais. Donc, si vous avez bien suivi, il faudra créer
<sdefs>
<sdef n="n"/>
<sdef n="sg"/>
<sdef n="pl"/>
</sdefs>
</pre>


Les identifiants de symbole peuvent être d'une longueur quelconque. Cependant, il est préférable de définir des symboles abrégés car vous allez les taper très souvent.
*un dictionnaire monolingue nl
*un dictionnaire bilingue fr-nl
*un fichier de règles de transfer fr-->nl
*un fichier de règles de transfer nl-->fr


Malheureusement, les noms ne sont pas si simples en serbo-croate. Les inflexions se font plus qu'en nombre, mais en genre et en cas. Mais à des fins pédagogiques, nous allons utiliser les noms masculins dans le cas nominatif.
Nous devons pas créer le dictionaire monloingue fr, car fr-es


La prochaine étape est de définir une section pour les paradigmes :
Commençons par créer le dictionnaire monolingue nl


<pre>
== Le jargon ==
<pardefs>


</pardefs>
Avant de poursuivre notre exposé, nous allons expliquer deux termes que nous utiliserons par la suite.
</pre>


et une section pour la partie principale du dictionnaire :
Le premier terme est ''lemme'', il s'agit de la « forme dictionnaire » d'un mot, c'est-à-dire la forme sous laquelle ce mot apparaît dans un dictionnaire. Par exemple pour un nom comme ce sera le singulier, pour un adjectif le masculin singulier et pour un verbe l'infinitif.


<pre>
Le deuxième concepte que nous devons aborder est celui de ''symbole'', symbole désigne la catégorie grammaticale sous forme abregée. Comme le logiciel a été initialement développé en Espagne, les abréviations proviennent souvent du catalan.
<section id="main" type="standard">


</section>
== Dictionnaire monolingue nl ==
</pre>


Il existe deux types de section dans un dictionnaire de données. La première est la section standard, qui contient des mots, des clitiques, etc. La deuxième section est dite inconditionnelle et contient des éléments grammaticaux tels que la ponctuation. Nous n'utiliserons pas de section inconditionnelle dans notre exemple.
Le dictionnaire est un fichier xml sous unicode (UTF-8)


Notre fichier devrait maintenant ressembler à ce qui suit :


Créons un fichier texte avec votreéditeur de texte préféré (notepad, gedit, kedit, etc)


<pre>
Taper le texte
<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
<sdefs>
<sdef n="n"/>
<sdef n="sg"/>
<sdef n="pl"/>
</sdefs>
<pardefs>

</pardefs>
<section id="main" type="standard">

</section>
</dictionary>
</pre>

Maintenant que notre squelette est en place, nous pouvons y ajouter un nom. Le nom en question sera 'gramofon' (qui signifie gramophone, un lecteur de musique)

La première chose à faire, compte tenu du fait que nous n'avons pas de paradigmes, est de définir un paradigme.

Souvenez-vous que nous utilisons le masculin dans le cas nominatif pour l'exemple. La forme singulière du mot est 'gramofon' et la forme plurielle est 'gramofoni'.

Par conséquent :

<pre>
<pardef n="gramofon__n">
<e>
<p>
<l/>
<r><s n="n"/><s n="sg"/></r>
</p>
</e>
<e>
<p>
<l>i</l>
<r><s n="n"/><s n="pl"/></r>
</p>
</e>
</pardef>
</pre>
Note : la balise '<l/>' (équivalente à <l></l>) signifie qu'il n'y a rien à ajouter dans la section "sg" pour le mot 'gramofon'.

Vous vous demandez sans doute à quoi servent les diverses balises de l'exemple ci-dessus.

* e est utilisé pour 'entrée'.
* p est utilisé pour 'pair'.
* l est utilisé pour 'left'(gauche).
* r est utilisé pour 'right'(droite).

L'explication de la présence des balises <l> et <r> est simple : les dictionnaires morphologiques seront compilés en machines à état fini. La compilation Gauche/Droite produit des analyses à partir de mots tandis que la compilation Droite/Gauche produit des mots à partir d'analyses.

Par exemple :

* gramofoni (gauche à droite) gramofon<n><pl> (analyse)
* gramofon<n><pl> (droite à gauche) gramofoni (génération d'un mot)

À présent que nous avons défini un paradigme, nous devons le lier au lemme 'gramofon'. Nous ajoutons ce lien dans la section précédemment définie.

L'entrée dans <section> ressemble à ceci :

<pre>
<e lm="gramofon"><i>gramofon</i><par n="gramofon__n"/></e>
</pre>

* lm est utilisé pour 'lemme'.
* i est utilisé pour 'identité' (gauche et droite sont les mêmes).
* par est pour 'paradigme'.

Cette entrée définit , pour le lemme 'gramofon', le paradigme qui lui est associé 'gramofon__n'. La différence entre un lemme et une racine est que le lemme est la forme citation du mot, tandis que la racine est une sous-chaîne du lemme à laquelle on ajoute des ((((souches)))). Cela deviendra plus clair alors que nous ajouterons des nouvelles entrées.

Nous sommes maintenant prêts à tester le dictionnaire. Sauvegardez-le. Rendez vous dans une interface en ligne de commande.

Pour commencer, nous devons compiler notre dictionnaire avec lt-comp.

<pre>
$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
</pre>

Nous pouvons ensuite tester le dictionnaier avec lt-proc.

La sortie devrait être la suivante :

<pre>
main@standard 12 12
</pre>

En compilant de gauche à droite, nous obtenons un analyseur. Maintenant, créons un générateur.

<pre>
$ lt-comp rl apertium-sh-en.sh.dix sh-en.autogen.bin
</pre>

À ce stade, la sortie devrait être la même que plus haut.

Testons l'analyseur avec lt-proc.

<pre>
$ lt-proc sh-en.automorf.bin
</pre>

Maintenant, essayons-le avec 'gramofoni'.

La sortie devrait être la suivante :

<pre>
^gramofoni/gramofon<n><pl>$
</pre>

Maintenant, nous devons appliquer la même procédure pour le dictionnaire anglais, en prenant soin de substituer le mot 'gramofon' par 'gramophone' et de changer l'inflexion au pluriel.

Il devrait maintenant y avoir deux fichiers dans le dossier :

* apertium-sh-en.sh.dix qui contient un dictionnaire morphologique très basique du serbo-croate
* apertium-sh-en.en.dix qui contient un dictionnaire morphologique très basique de l'anglais

==Les dictionnaires bilingues==

Jusqu'à présent, nous avons créé deux dictionnaires morphologiques unilingues. La prochaine étape est de créer un dictionnaire bilingue, dictionnaire qui décrit les liens entre les mots des deux dictionnaires. Tous les dictionnaires utilisent le même format (spécifié dans la DTD dix.dtd).

Créez un nouveau fichier, nommez-le apertium-sh-en.sh-en.dix et ajoutez-y le squelette de base :


<pre>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
<dictionary>
<alphabet/>
<sdefs>
<sdef n="n"/>
<sdef n="sg"/>
<sdef n="pl"/>
</sdefs>

<section id="main" type="standard">

</section>
</dictionary>
</dictionary>
</pre>
</pre>

Nous devons maintenant ajouter une entrée pour la traduction entre les deux mots :

<pre>
<pre>
<e><p><l>gramofon<s n="n"/></l><r>gramophone<s n="n"/></r></p></e>
</pre>


Comme un dictionnaire compte d'ordinaire de très nombreuses entrées, il est préférable d'utiliser une ligne par entrée pour la facilité de lisibilité du fichier. En compilant le dictionnaire de gauche à droite, nous obtenons un dictionnaire serbo-croate -> anglais et en le compilant de droite à gauche, nous obtenons un dictionnaire anglais -> serbo-croate.
Sauver le texte sous le nom de « apertium-fr-nl.nl.dix »


Une fois l'entrée ajoutée, tapez les commandes suivantes :


<pre>
Il convient ensuite de remplir l'espace entre <pre><sdefs> </sdefs></pre>
$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
$ lt-comp rl apertium-sh-en.en.dix sh-en.autogen.bin


$ lt-comp lr apertium-sh-en.en.dix en-sh.automorf.bin
Pour cela tapons
$ lt-comp rl apertium-sh-en.sh.dix en-sh.autogen.bin

$ lt-comp lr apertium-sh-en.sh-en.dix sh-en.autobil.bin
$ lt-comp rl apertium-sh-en.sh-en.dix en-sh.autobil.bin
</pre>
Cela génère un analyseur morphologique (automorf), un générateur morphologique (autogen) et un chercheur de mots (autobil) (bil pour bilingue).

==Règles de transfert==

Maintenant, nous avons deux dictionnaires morphologiques et un dictionnaire bilingue. Tout ce que nous avons à faire est une règle de transfert pour les noms. Les fichiers de règles de transfert sont dans des fichiers DTD (transfer.dtd) qui sont dans l'ensemble Apertium. Si vous voulez implémenter une règle, il est optimal de regarder dans d'autres fichier de règles et de s'en inspirer, question de recycler ce qui a déjà été fait. Par exemple, celle qui suit sera utile pour toutes langues ne nécessitant pas un sujet.

Copiez le squelette comme dans les autres fichiers :


<pre>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<sdefs>
<transfer>


</sdefs>
</transfer>
</pre>
</pre>
À ce moment, parce que nous ignorons les cas, nous devons seulement faire une règle qui prend les symboles grammaticaux entrés et les transforme en sortie.


Nous devons d'abord définir des catégories et des attributs. Ceux-ci nous permettent de grouper les symboles grammaticaux.
== Abréviations utilisées ==
Les catégories servent aussi à grouper les symboles dans un but d'appariement (Par exemple 'n.*' représente tous les noms).
Les attributs servent à grouper un ensemble de symboles dans lequel il est facile de faire une sélection (Par exemple 'sg' et 'pl' peuvent être groupées avec un attribut 'nombre')


Ajoutons maintenant les sections nécessaires :
*dix : dictionary (dictionnaire)

*fr : français
<pre>
*nl : néerlandais
<section-def-cats>

</section-def-cats>
<section-def-attrs>

</section-def-attrs>
</pre>


Puisque nous faisons seulement l'inflexion des noms singuliers et pluriels, nous devons ajouter une catégorie pour les noms avec un attribut nombre. Cela suffira :

Dans la section : section-def-cats

<pre>
<def-cat n="nom">
<cat-item tags="n.*"/>
</def-cat>
</pre>

Cela réfère à tous les noms (les lemmes suivi de <n> et de n'importe quoi)
Dans la section section-def-attrs, ajoutez:

<pre>
<def-attr n="nbr">
<attr-item tags="sg"/>
<attr-item tags="pl"/>
</def-attr>
</pre>

et ensuite

<pre>
<def-attr n="a_nom">
<attr-item tags="n"/>
</def-attr>
</pre>

La première définit l'attribut nbr (number), qui peut être singulier(sg) ou pluriel (pl)
La deuxième définit l'attribut a_nom (l'attribut du nom)

Ensuite, nous devons ajouter une section pour les variables globales :

<pre>
<section-def-vars>

</section-def-vars>
</pre>

Ces variables sont utilisés pour conserver ou transférer les attributs entre les règles. Nous avons besoin d'une seule variable
à cette étape-ci.


<pre>
<def-var n="number"/>
</pre>

Finalement, nous devons ajouter une règle, qui prendra le nom et qui créera une sortie dans le bon format. Une section de règles est nécessaire.

<pre>
<section-rules>

</section-rules>
</pre>

Voici un exemple de règle :

<pre>
<rule>
<pattern>
<pattern-item n="nom"/>
</pattern>
<action>
<out>
<lu>
<clip pos="1" side="tl" part="lem"/>
<clip pos="1" side="tl" part="a_nom"/>
<clip pos="1" side="tl" part="nbr"/>
</lu>
</out>
</action>
</rule>
</pre>

La première balise définit une règle. La deuxième balise signifie au programme d'appliquer la règle si ce le patron(motif) est trouvé. Dans cet exemple, le motif est un nom singulier. Notez que les motifs ont une correspondance avec les plus longs résultats. Si vous avez trois règles et que la première concorde avec "<prn><vblex><n>", la deuxième avec "<prn><vblex>" et la troisième avec "<n>", le motif qui sera choisit sera le premier.

Pour chacun des motifs, il y a une action associée, qui produit une certaine sortie. La sortie est une unité lexicale (lu).

La balise "clip" permet à l'utilisateur de sélectionner et de manipuler des attributs et des items lexicaux du langage source (side="sl") et du langage cible (side="tl").

Compilons et testons.

<pre>
$ apertium-preprocess-transfer apertium-sh-en.sh-en.t1x sh-en.t1x.bin
</pre>

Ce qui générera un fichier sh-en.t1x.bin.

Nous sommes maintenant prêts à tester notre système de traduction.

Pour commencer, voyons voir le résultat avec le mot 'gramofoni' :

<pre>
$ echo "gramofoni" | lt-proc sh-en.automorf.bin
</pre>

La sortie devrait être la suivante :

<pre>
^gramofon/gramofon<n><pl>$
</pre>

Maintenant,

<pre>
$ echo "gramofoni" | lt-proc sh-en.automorf.bin | \
gawk 'BEGIN{RS="$"; FS="/";}{nf=split($1,COMPONENTS,"^"); for(i = 1; i<nf; i++) printf COMPONENTS[i]; if($2 != "") printf("^%s$",$2);}' | \
^gramofon<n><pl>$
</pre>

Essayons maintenant la règle de transfert :

<pre>
$ echo "gramofoni" | lt-proc sh-en.automorf.bin | \
gawk 'BEGIN{RS="$"; FS="/";}{nf=split($1,COMPONENTS,"^"); for(i = 1; i<nf; i++) printf COMPONENTS[i]; if($2 != "") printf("^%s$",$2);}' | \
apertium-transfer apertium-sh-en.sh-en.t1x sh-en.t1x.bin sh-en.autobil.bin
</pre>


== Liens externes ==


=== Génération ===
*http://apertium.sourceforge.net/ Le site officiel d'Apertium
*http://ilazki.thinkgeek.co.uk/apertium/graph.svg
*http://xixona.dlsi.ua.es/wiki/index.php/Main_Page


=== Notes de bas de page ===
== Sources ==
<references/>


== Voir aussi ==
*http://apertium.sourceforge.net/index_fr.html
*http://apertium.sourceforge.net/#documentation
*http://ilazki.thinkgeek.co.uk/apertium/index.php


*[[Fabriquer des dictionnaires]]
*[[Finding_errors_in_dictionaries]]
*[[Livre de cuisine]]
*[[Fragmentation]]
*[[Comment contribuer à une paire de langues existante]]


[[Category:Documentation]]
[[Category:Documentation en français]]
[[Category:HOWTO]]

Latest revision as of 07:17, 28 November 2015

In English

Tutoriel de création d'une nouvelle paire de langues pour Apertium

Ce document est un tutoriel décrivant les étapes nécessaires à la création d'une nouvelle paire de langues pour le logiciel de traduction automatique Apertium.

Des connaissances de la linguistique ou du système de traduction ne sont pas nécessaires, mais il est tout de même important d'avoir certaines notions de grammaire.

Introduction[edit]

Apertium est une plate-forme de traduction automatique. Le moteur et les outils sont présents dans le but de faciliter la création d'un système de traduction. Les seules autres choses nécessaires au bon fonctionnement d'Apertium sont les données. Les données sont divisées en trois parties principales, les dictionnaires, et en quelques règles.

Pour obtenir plus d'information à propos du projet apertium, veuillez visiter la page suivante : http://apertium.sourceforge.net.

Pour qu'Apertium puisse fonctionner, vous aurez besoin de :

  • lttoolbox (>= 3.0.0)
  • libxml utils (xmllint etc.)
  • apertium (>= 3.0.0)
  • Un éditeur de texte

Ce document ne décrit pas les étapes de l'installation. Pour plus d'informations, veuillez consulter la documentation sur le site du projet Apertium.

Qu'est-ce qu'une paire de langues ?[edit]

Apertium utilise un type de transfert dit superficiel. Cela signifie que le moteur utilise des dictionnaires et des règles de transfert superficielles. Ce type de transfert est différent de celui dit profond parce qu'il ne fait pas une analyse syntaxique complète. Les règles sont des opérations sur un groupe d'unités lexicales au lieu d'une analyse en arbre. À la base, il y a trois dictionnaires principaux :

  1. Le dictionnaire morphologique de la langue xx : il contient les règles d'inflexion des mots dans la langue xx. Dans l'exemple que nous utiliserons, le fichier sera nommé apertium-sh-en.sh.dix[1]
  2. Le dictionnaire morphologique de la langue yy : il contient les règles d'inflexion des mots dans la langue yy. Dans l'exemple que nous utiliserons, le fichier sera nommé apertium-sh-en.en.dix
  3. Le dictionnaire bilingue: il contient la correspondance entre les mots et les symboles dans les deux langues. Dans l'exemple que nous utiliserons, le fichier sera nommé apertium-sh-en.sh-en.dix

Dans une paire de traduction, les deux langues peuvent prendre le rôle de langue source ou langue cible. Ce sont des termes relatifs.

Deux autres fichiers contiennent les règles de transfert. Ces règles sont les lignes directrices de l'ordre des mots dans la phrase. Par exemple : chat noir -> cat black -> black cat. Les règles gouvernent aussi le genre et le nombre. Les règles peuvent aussi êtes utilisées dans le but d'insérer des éléments lexicaux, tel que décrit plus loin. Ces fichiers sont :

  • Règles de transfert de la langue xx vers la langue yy : ce fichier contient les règles de transformation de la langue xx vers la langue yy. Dans notre exemple, le fichier sera nommé : apertium-sh-en.sh-en.t1x
  • Règles de transfert de la langue xx vers la langue yy : ce fichier contient les règles de transformation de la langue xx vers la langue yy. Dans notre exemple, le fichier sera nommé : apertium-sh-en.en-sh.t1x

Pour certaines paires de langues, il existe des fichiers supplémentaires mais nous n'abordons pas ces fichiers dans ce tutoriel. Les fichiers mentionnés plus haut sont ceux qui sont nécessaires au bon fonctionnement du système.

Paire de langues[edit]

Comme il est mentionné plus haut, ce tutoriel utilise le croate et l'anglais comme langues pour expliquer la création du système de base. Cette paire n'est pas idéale compte tenu du fait que la relation entre les deux langues est tout de même faible. Néanmoins, cela ne devrait pas poser de problèmes pour les exemples qui suivent.

Une courte note sur les termes[edit]

Il y a un certain nombre de termes qui doivent être compris avant de continuer.

Le premier est : lemme. Un lemme est la forme standard d'un mot qui peut être fléchi (conjugué, décliné, etc.). Par exemple, le lemme de la forme "sachions" est "savoir". En anglais, comme la flexion des mots est très limitée, le lemme d'un mot est très souvent sa forme singulière masculine, pour les verbes, le lemme est l'infinitif duquel on retire le "to", par exemple, le verbe "be" est l'infinitif et le lemme de la forme conjugué "was". En français, pour les noms et les adjectifs, le lemme sera la première personne du singulier, pour les verbes ce sera l'infinitif.

Le deuxième est : symbole. Dans le contexte du système Apertium, un symbole (ou "tag") fait référence à une étiquette grammaticale. Comme le logiciel a été initialement développé en pays catalan, les abréviations proviennent souvent du catalan. Le mot chats est un mot au pluriel. Deux étiquettes lui seront associées, <n>; pour nom et <pl> pour pluriel. Les symboles sont définis entre balises pour le bon fonctionnement du moteur Apertium. Attention : l'écriture <pl> sera utilisée en "mode texte", alors qu'en "mode XML" le même tag sera noté .

Le troisième est : paradigme. (En grec, "paradeigma" signifie "exemple".) Dans le contexte du système Apertium, un paradigme fait référence au comportement d'un certain groupe de mots lors de la flexion. Dans le dictionnaire morphologique, les lemmes sont liés à des paradigmes, ce qui permet de connaître la flexion de certains lemmes sans avoir à énumérer toutes les terminaisons possibles. Les paradigmes sont définis dans les éléments <pardef> et appelés par les éléments <par>.

Les dictionnaires monolingues[edit]

Commençons par définir notre premier dictionnaire. Le dictionnaire est un fichier XML. Ouvrez votre éditeur de texte favori et copiez-y les lignes suivantes.

<?xml version="1.0" encoding="UTF-8"?>
<dictionary>

</dictionary>

Enregistrez-le sous le nom : apertium-sh-en.sh.dix

Pour être utile, nous devons ajouter quelques entrées dans notre dictionnaire. On commencera d'abord par spécifier l'ensemble des caractères susceptibles d'être utilisés dans le dictionnaire entre les balises 'alphabet'. Pour le serbo-croate, l'alphabet ressemblera à ce qui suit :

<alphabet>ABCČĆDDžĐEFGHIJKLLjMNNjOPRSŠTUVZŽabcčćddžđefghijklljmnnjoprsštuvzž</alphabet>

Il convient ensuite de remplir l'espace entre les balises <dictionary> et </dictionary>.

Nous devons aussi définir certains symboles. Commençons par des symboles simples tels que nom (n), singulier (sg) et pluriel (pl).

<sdefs>
   <sdef n="n"/>
   <sdef n="sg"/>
   <sdef n="pl"/>
</sdefs>

Les identifiants de symbole peuvent être d'une longueur quelconque. Cependant, il est préférable de définir des symboles abrégés car vous allez les taper très souvent.

Malheureusement, les noms ne sont pas si simples en serbo-croate. Les inflexions se font plus qu'en nombre, mais en genre et en cas. Mais à des fins pédagogiques, nous allons utiliser les noms masculins dans le cas nominatif.

La prochaine étape est de définir une section pour les paradigmes :

<pardefs>

</pardefs>

et une section pour la partie principale du dictionnaire :

<section id="main" type="standard">

</section>

Il existe deux types de section dans un dictionnaire de données. La première est la section standard, qui contient des mots, des clitiques, etc. La deuxième section est dite inconditionnelle et contient des éléments grammaticaux tels que la ponctuation. Nous n'utiliserons pas de section inconditionnelle dans notre exemple.

Notre fichier devrait maintenant ressembler à ce qui suit :


<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
   <sdefs>
     <sdef n="n"/>
     <sdef n="sg"/>
     <sdef n="pl"/>
   </sdefs>
   <pardefs>

   </pardefs>
   <section id="main" type="standard">

   </section>
</dictionary>

Maintenant que notre squelette est en place, nous pouvons y ajouter un nom. Le nom en question sera 'gramofon' (qui signifie gramophone, un lecteur de musique)

La première chose à faire, compte tenu du fait que nous n'avons pas de paradigmes, est de définir un paradigme.

Souvenez-vous que nous utilisons le masculin dans le cas nominatif pour l'exemple. La forme singulière du mot est 'gramofon' et la forme plurielle est 'gramofoni'.

Par conséquent :

<pardef n="gramofon__n">
   <e>
     <p>
       <l/>
       <r><s n="n"/><s n="sg"/></r>
     </p>
   </e>
   <e>
     <p>
       <l>i</l>
       <r><s n="n"/><s n="pl"/></r>
     </p>
   </e>
</pardef>

Note : la balise '<l/>' (équivalente à <l></l>) signifie qu'il n'y a rien à ajouter dans la section "sg" pour le mot 'gramofon'.

Vous vous demandez sans doute à quoi servent les diverses balises de l'exemple ci-dessus.

  • e est utilisé pour 'entrée'.
  • p est utilisé pour 'pair'.
  • l est utilisé pour 'left'(gauche).
  • r est utilisé pour 'right'(droite).

L'explication de la présence des balises <l> et <r> est simple : les dictionnaires morphologiques seront compilés en machines à état fini. La compilation Gauche/Droite produit des analyses à partir de mots tandis que la compilation Droite/Gauche produit des mots à partir d'analyses.

Par exemple :

  • gramofoni (gauche à droite) gramofon<n><pl> (analyse)
  • gramofon<n><pl> (droite à gauche) gramofoni (génération d'un mot)

À présent que nous avons défini un paradigme, nous devons le lier au lemme 'gramofon'. Nous ajoutons ce lien dans la section précédemment définie.

L'entrée dans </dictionary>

Nous devons maintenant ajouter une entrée pour la traduction entre les deux mots :

<e><p><l>gramofon<s n="n"/></l><r>gramophone<s n="n"/></r></p></e>

Comme un dictionnaire compte d'ordinaire de très nombreuses entrées, il est préférable d'utiliser une ligne par entrée pour la facilité de lisibilité du fichier. En compilant le dictionnaire de gauche à droite, nous obtenons un dictionnaire serbo-croate -> anglais et en le compilant de droite à gauche, nous obtenons un dictionnaire anglais -> serbo-croate.

Une fois l'entrée ajoutée, tapez les commandes suivantes :

$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
$ lt-comp rl apertium-sh-en.en.dix sh-en.autogen.bin

$ lt-comp lr apertium-sh-en.en.dix en-sh.automorf.bin
$ lt-comp rl apertium-sh-en.sh.dix en-sh.autogen.bin

$ lt-comp lr apertium-sh-en.sh-en.dix sh-en.autobil.bin
$ lt-comp rl apertium-sh-en.sh-en.dix en-sh.autobil.bin

Cela génère un analyseur morphologique (automorf), un générateur morphologique (autogen) et un chercheur de mots (autobil) (bil pour bilingue).

Règles de transfert[edit]

Maintenant, nous avons deux dictionnaires morphologiques et un dictionnaire bilingue. Tout ce que nous avons à faire est une règle de transfert pour les noms. Les fichiers de règles de transfert sont dans des fichiers DTD (transfer.dtd) qui sont dans l'ensemble Apertium. Si vous voulez implémenter une règle, il est optimal de regarder dans d'autres fichier de règles et de s'en inspirer, question de recycler ce qui a déjà été fait. Par exemple, celle qui suit sera utile pour toutes langues ne nécessitant pas un sujet.

Copiez le squelette comme dans les autres fichiers :

<?xml version="1.0" encoding="UTF-8"?>
<transfer>

</transfer>

À ce moment, parce que nous ignorons les cas, nous devons seulement faire une règle qui prend les symboles grammaticaux entrés et les transforme en sortie.

Nous devons d'abord définir des catégories et des attributs. Ceux-ci nous permettent de grouper les symboles grammaticaux. Les catégories servent aussi à grouper les symboles dans un but d'appariement (Par exemple 'n.*' représente tous les noms). Les attributs servent à grouper un ensemble de symboles dans lequel il est facile de faire une sélection (Par exemple 'sg' et 'pl' peuvent être groupées avec un attribut 'nombre')

Ajoutons maintenant les sections nécessaires :

<section-def-cats>

</section-def-cats>
<section-def-attrs>

</section-def-attrs>


Puisque nous faisons seulement l'inflexion des noms singuliers et pluriels, nous devons ajouter une catégorie pour les noms avec un attribut nombre. Cela suffira :

Dans la section : section-def-cats

<def-cat n="nom">
   <cat-item tags="n.*"/>
</def-cat>

Cela réfère à tous les noms (les lemmes suivi de <n> et de n'importe quoi) Dans la section section-def-attrs, ajoutez:

<def-attr n="nbr">
   <attr-item tags="sg"/>
   <attr-item tags="pl"/>
</def-attr>

et ensuite

<def-attr n="a_nom">
   <attr-item tags="n"/>
</def-attr>

La première définit l'attribut nbr (number), qui peut être singulier(sg) ou pluriel (pl) La deuxième définit l'attribut a_nom (l'attribut du nom)

Ensuite, nous devons ajouter une section pour les variables globales :

<section-def-vars>

</section-def-vars>

Ces variables sont utilisés pour conserver ou transférer les attributs entre les règles. Nous avons besoin d'une seule variable à cette étape-ci.


<def-var n="number"/>

Finalement, nous devons ajouter une règle, qui prendra le nom et qui créera une sortie dans le bon format. Une section de règles est nécessaire.

<section-rules>

</section-rules>

Voici un exemple de règle :

<rule>
   <pattern>
     <pattern-item n="nom"/>
   </pattern>
   <action>
     <out>
       <lu>
         <clip pos="1" side="tl" part="lem"/>
         <clip pos="1" side="tl" part="a_nom"/>
         <clip pos="1" side="tl" part="nbr"/>
       </lu>
     </out>
   </action>
</rule>

La première balise définit une règle. La deuxième balise signifie au programme d'appliquer la règle si ce le patron(motif) est trouvé. Dans cet exemple, le motif est un nom singulier. Notez que les motifs ont une correspondance avec les plus longs résultats. Si vous avez trois règles et que la première concorde avec "<prn><vblex><n>", la deuxième avec "<prn><vblex>" et la troisième avec "<n>", le motif qui sera choisit sera le premier.

Pour chacun des motifs, il y a une action associée, qui produit une certaine sortie. La sortie est une unité lexicale (lu).

La balise "clip" permet à l'utilisateur de sélectionner et de manipuler des attributs et des items lexicaux du langage source (side="sl") et du langage cible (side="tl").

Compilons et testons.

$ apertium-preprocess-transfer apertium-sh-en.sh-en.t1x sh-en.t1x.bin

Ce qui générera un fichier sh-en.t1x.bin.

Nous sommes maintenant prêts à tester notre système de traduction.

Pour commencer, voyons voir le résultat avec le mot 'gramofoni' :

$ echo "gramofoni" | lt-proc sh-en.automorf.bin 

La sortie devrait être la suivante :

^gramofon/gramofon<n><pl>$

Maintenant,

$ echo "gramofoni" | lt-proc sh-en.automorf.bin | \
  gawk 'BEGIN{RS="$"; FS="/";}{nf=split($1,COMPONENTS,"^"); for(i = 1; i<nf; i++) printf COMPONENTS[i]; if($2 != "") printf("^%s$",$2);}' | \
^gramofon<n><pl>$

Essayons maintenant la règle de transfert :

$ echo "gramofoni" | lt-proc sh-en.automorf.bin | \
  gawk 'BEGIN{RS="$"; FS="/";}{nf=split($1,COMPONENTS,"^"); for(i = 1; i<nf; i++) printf COMPONENTS[i]; if($2 != "") printf("^%s$",$2);}' | \
  apertium-transfer apertium-sh-en.sh-en.t1x sh-en.t1x.bin sh-en.autobil.bin


Génération[edit]

Notes de bas de page[edit]

  1. Ce fichier peux avoir éventuellement l'extension metadix

Voir aussi[edit]