Difference between revisions of "Bases sur les dictionnaires unilingues"

From Apertium
Jump to navigation Jump to search
(Mise à jour)
Line 3: Line 3:
 
Cette page suppose que vous êtes à l'aise avec HTML et XML, que vous pouvez distinguer un élément d'un attribut et savez ce que sont les données caractères. Si vous voulez un résumé rapide, ceci devrait vous aider :
 
Cette page suppose que vous êtes à l'aise avec HTML et XML, que vous pouvez distinguer un élément d'un attribut et savez ce que sont les données caractères. Si vous voulez un résumé rapide, ceci devrait vous aider :
   
:<element attribute="value">character data</element>
+
:<element attribute=&quot;value&quot;>character data</element>
   
 
Si cela n'a aucune signification pour vous, vous devriez probablement lire un peu plus sur le XML.
 
Si cela n'a aucune signification pour vous, vous devriez probablement lire un peu plus sur le XML.
Line 9: Line 9:
 
== Introduction ==
 
== Introduction ==
   
Donc, au niveau global, le dictionnaire le plus basique a besoin de 3 sections. Nous allons, pas à pas, définir un dictionnaire qui va analyser et générer le mot français "bière" et sa forme plurielle, "bières".
+
Donc, au niveau global, le dictionnaire le plus basique a besoin de 3 sections. Nous allons, pas à pas, définir un dictionnaire qui va analyser et générer le mot français &quot;bière&quot; et sa forme plurielle, &quot;bières&quot;.
   
 
La première section définit l'alphabet qui est utilisé par le dictionnaire. C'est assez explicite et ça ressemblera à quelque-chose comme :
 
La première section définit l'alphabet qui est utilisé par le dictionnaire. C'est assez explicite et ça ressemblera à quelque-chose comme :
Line 19: Line 19:
 
La liste de caractères est valable pour un dictionnaire anglais, mais dans d'autres langues, il ne faut pas oublier les caractères accentués ou spéciaux genre ç.
 
La liste de caractères est valable pour un dictionnaire anglais, mais dans d'autres langues, il ne faut pas oublier les caractères accentués ou spéciaux genre ç.
   
La seconde section définit les symboles grammaticaux<ref>Dans d'autres documents linguistiques ils sont quelquefois appelés "features" (caractéristiques), ou "catégories" et "sous-catégories".</ref> de la langue sur laquelle vous travaillez. C'est normalement là où les gens disent, attendez... que sont les symboles grammaticaux ? Hé bien, il y a plusieurs façons de décrire les mots, et les différentes formes que les mots peuvent prendre, donc je suppose que vous savez ce qu'est une ''partie de discours''<ref>une partie de discours (ou catégorie lexicale, classe de mot, classe lexicale, etc.) est une catégorie linguistique de mots, qui est généralement définie par le comportement syntaxique ou morphologique du mot en question. Les catégories linguistiques communes comprennent le nom et le verbe, entre autres. Il y a des classes de mots ouvertes, qui acquièrent constamment de nouveaux membres, et des classes de mots fermées, qui n'acquièrent de nouveaux membres que rarement si ça arrive.</ref>. Par exemple: les noms (maison, bière, bateau, chat, ...), que vous pouvez distinguer des adjectifs (rouge, bon, transparent, ...) et des verbes (manger, multiplier, écrire, ...). La manière de les spécifier est la suivante :
+
La seconde section définit les symboles grammaticaux<ref>Dans d'autres documents linguistiques ils sont quelquefois appelés &quot;features&quot; (caractéristiques), ou &quot;catégories&quot; et &quot;sous-catégories&quot;.</ref> de la langue sur laquelle vous travaillez. C'est normalement là où les gens disent, attendez... que sont les symboles grammaticaux ? Hé bien, il y a plusieurs façons de décrire les mots, et les différentes formes que les mots peuvent prendre, donc je suppose que vous savez ce qu'est une ''partie de discours''<ref>une partie de discours (ou catégorie lexicale, classe de mot, classe lexicale, etc.) est une catégorie linguistique de mots, qui est généralement définie par le comportement syntaxique ou morphologique du mot en question. Les catégories linguistiques communes comprennent le nom et le verbe, entre autres. Il y a des classes de mots ouvertes, qui acquièrent constamment de nouveaux membres, et des classes de mots fermées, qui n'acquièrent de nouveaux membres que rarement si ça arrive.</ref>. Par exemple: les noms (maison, bière, bateau, chat, ...), que vous pouvez distinguer des adjectifs (rouge, bon, transparent, ...) et des verbes (manger, multiplier, écrire, ...). La manière de les spécifier est la suivante :
   
 
<pre>
 
<pre>
 
<sdefs>
 
<sdefs>
<sdef n="nom"/>
+
<sdef n=&quot;nom&quot;/>
<sdef n="verbe"/>
+
<sdef n=&quot;verbe&quot;/>
<sdef n="adjectif"/>
+
<sdef n=&quot;adjectif&quot;/>
 
</sdefs>
 
</sdefs>
 
</pre>
 
</pre>
Line 32: Line 32:
 
<pre>
 
<pre>
 
<sdefs>
 
<sdefs>
<sdef n="noun"/>
+
<sdef n=&quot;noun&quot;/>
<sdef n="verb"/>
+
<sdef n=&quot;verb&quot;/>
<sdef n="adjective"/>
+
<sdef n=&quot;adjective&quot;/>
 
</sdefs>
 
</sdefs>
 
</pre>
 
</pre>
   
Les gens se plaignent souvent de la brièveté de ces symboles, et typiquement même les valeurs sont abrégées, ainsi le nom devient "n", le verbe devient "vb" et l'adjectif devient "adj" etc... (voir [[Liste de symboles]] pour quelques abréviations courantes). La brièveté présente toutefois un intérêt, quand vous écrivez, ou copiez vous voulez que les symboles restent aussi petits que possible. Par exemple, <code><sdef></code> veut dire "définition de symbole", et <code><sdefs></code> est simplement la même chose au pluriel.
+
Les gens se plaignent souvent de la brièveté de ces symboles, et typiquement même les valeurs sont abrégées, ainsi le nom devient &quot;n&quot;, le verbe devient &quot;vb&quot; et l'adjectif devient &quot;adj&quot; etc... (voir [[Liste des symboles]] pour quelques abréviations courantes). La brièveté présente toutefois un intérêt, quand vous écrivez, ou copiez vous voulez que les symboles restent aussi petits que possible. Par exemple, <code><sdef></code> veut dire &quot;définition de symbole&quot;, et <code><sdefs></code> est simplement la même chose au pluriel.
   
Après avoir spécifié l'alphabet et les symboles, on a besoin de spécifier les mots, c'est la partie la plus importante du dictionnaire ! Pour supporter les mots on utilise une section. Il peut y avoir plus d'une section dans un dictionnaire, et il y a plus d'un type de section. On ne rentrera pas dans les détails ici, mais traditionnellement la plus grande section est appelée "main" et est de type "standard".
+
Après avoir spécifié l'alphabet et les symboles, on a besoin de spécifier les mots, c'est la partie la plus importante du dictionnaire ! Pour supporter les mots on utilise une section. Il peut y avoir plus d'une section dans un dictionnaire, et il y a plus d'un type de section. On ne rentrera pas dans les détails ici, mais traditionnellement la plus grande section est appelée &quot;main&quot; et est de type &quot;standard&quot;.
   
 
<pre>
 
<pre>
<section id="main" type="standard">
+
<section id=&quot;main&quot; type=&quot;standard&quot;>
   
 
</section>
 
</section>
Line 52: Line 52:
 
== Entrées ==
 
== Entrées ==
   
Les dictionnaires unilingues dans Apertium sont des dictionnaires ''morphologiques''<ref>Un dictionnaire morphologique modélise les règles qui régissent la structure interne des mots dans une langue. Par exemple, les francophones se rendent compte que les mots "chien" et "chiens" sont liés, que "chiens" est à "chien" ce que "chats" est à "chat". Les règles comprises par le locuteur reflètent des modèles spécifiques et des régularités des modèles spécifiques et des régularités dans la façon dont les mots sont formés à partir des plus petites unités et comment ces plus petites unités interagissent.</ref>, cela signifie qu'ils ne supportent pas seulement les mots, mais qu'ils supportent aussi comment ils s'infléchissent, et ce que leur infléchissement signifie. Dans Apertium on utilise les dictionnaires morphologiques pour deux traitements :
+
Les dictionnaires unilingues dans Apertium sont des dictionnaires ''morphologiques''<ref>Un dictionnaire morphologique modélise les règles qui régissent la structure interne des mots dans une langue. Par exemple, les francophones se rendent compte que les mots &quot;chien&quot; et &quot;chiens&quot; sont liés, que &quot;chiens&quot; est à &quot;chien&quot; ce que &quot;chats&quot; est à &quot;chat&quot;. Les règles comprises par le locuteur reflètent des modèles spécifiques et des régularités des modèles spécifiques et des régularités dans la façon dont les mots sont formés à partir des plus petites unités et comment ces plus petites unités interagissent.</ref>, cela signifie qu'ils ne supportent pas seulement les mots, mais qu'ils supportent aussi comment ils s'infléchissent, et ce que leur infléchissement signifie. Dans Apertium on utilise les dictionnaires morphologiques pour deux traitements :
   
 
# Analyse &mdash; récupération de toutes les [[unité lexicale|unités lexicales]] possibles à partir de la [[forme de surface]] d'un mot.
 
# Analyse &mdash; récupération de toutes les [[unité lexicale|unités lexicales]] possibles à partir de la [[forme de surface]] d'un mot.
 
# Génération &mdash; production de la [[forme de surface]] d'un mot à partir d'une [[unité lexicale]].
 
# Génération &mdash; production de la [[forme de surface]] d'un mot à partir d'une [[unité lexicale]].
   
Bon, maintenant pour expliquer ''unité lexicale'' et ''forme de surface''. Rappelez-vous l'exemple de "bière" et "bières". Nous savons que "bière" est un nom, nous savons aussi qu'il est au singulier, nous savons aussi que la seule différence entre "bière" et "bières" est que "bières" est au pluriel. Donc, pour résumer les connaissances ci-dessous, on trouve les 2 faits suivants :
+
Bon, maintenant pour expliquer ''unité lexicale'' et ''forme de surface''. Rappelez-vous l'exemple de &quot;bière&quot; et &quot;bières&quot;. Nous savons que &quot;bière&quot; est un nom, nous savons aussi qu'il est au singulier, nous savons aussi que la seule différence entre &quot;bière&quot; et &quot;bières&quot; est que &quot;bières&quot; est au pluriel. Donc, pour résumer les connaissances ci-dessous, on trouve les 2 faits suivants :
   
 
# bière &mdash; est un nom au singulier,
 
# bière &mdash; est un nom au singulier,
# bières &mdash; est la forme au pluriel du nom "bière".
+
# bières &mdash; est la forme au pluriel du nom &quot;bière&quot;.
   
Ce qu'on entend par ''unité lexicale'' est la combinaison du lemme<ref>Le lemme (or forme de citation, forme de base) est la forme canonique d'un mot. C'est la forme du mot qui est typiquement utilisée dans les dictionnaires papier.</ref>, par exemple "bière" et des symboles grammaticaux. La forme de surface d'un mot est le mot tel que vous le lisez.<ref>Les formes de surface peuvent être ambiguës, mais pas les unités lexicales. Une forme de surface peut avoir plusieurs analyses, par exemple "porte" peut être un verbe (''Je porte une valise''), ou un nom (''La porte est ouverte'').</ref> Dans le style Apertium ils devraient être représentés par quelque-chose comme ce qui suit :
+
Ce qu'on entend par ''unité lexicale'' est la combinaison du lemme<ref>Le lemme (or forme de citation, forme de base) est la forme canonique d'un mot. C'est la forme du mot qui est typiquement utilisée dans les dictionnaires papier.</ref>, par exemple &quot;bière&quot; et des symboles grammaticaux. La forme de surface d'un mot est le mot tel que vous le lisez.<ref>Les formes de surface peuvent être ambiguës, mais pas les unités lexicales. Une forme de surface peut avoir plusieurs analyses, par exemple &quot;porte&quot; peut être un verbe (''Je porte une valise''), ou un nom (''La porte est ouverte'').</ref> Dans le style Apertium ils devraient être représentés par quelque-chose comme ce qui suit :
   
 
:{|class=wikitable
 
:{|class=wikitable
Line 73: Line 73:
 
|}
 
|}
   
Afin de pouvoir faire la conversion entre ces deux formes, on a besoin de les définir comme paire. Les paires de forme de surface et d'unités lexicales dans Apertium sont indiquées par l'élément <code>&lt;p&gt;</code> . C'est plutôt intuitif, à partir du moment où vous connaissez l'abréviation ! Ces éléments paires peuvent contenir un "coté gauche" (<code>&lt;l&gt;</code> abréviation de l'anglais ''left'') et un "coté droit" (<code>&lt;r&gt;</code> abréviation de l'anglais ''right''). Le coté gauche contient presque toujours la forme de surface du mot, alors que le coté droit contient l'unité lexicale. Donc, notre première entrée (<code>&lt;e&gt;</code>) devrait ressembler à quelque-chose comme :
+
Afin de pouvoir faire la conversion entre ces deux formes, on a besoin de les définir comme paire. Les paires de forme de surface et d'unités lexicales dans Apertium sont indiquées par l'élément <code>&lt;p&gt;</code> . C'est plutôt intuitif, à partir du moment où vous connaissez l'abréviation ! Ces éléments paires peuvent contenir un &quot;coté gauche&quot; (<code>&lt;l&gt;</code> abréviation de l'anglais ''left'') et un &quot;coté droit&quot; (<code>&lt;r&gt;</code> abréviation de l'anglais ''right''). Le coté gauche contient presque toujours la forme de surface du mot, alors que le coté droit contient l'unité lexicale. Donc, notre première entrée (<code>&lt;e&gt;</code>) devrait ressembler à quelque-chose comme :
   
 
<pre>
 
<pre>
Line 79: Line 79:
 
<p>
 
<p>
 
<l>bière</l>
 
<l>bière</l>
<r>bière<s n="nom"/><s n="singulier"/></r>
+
<r>bière<s n=&quot;nom&quot;/><s n=&quot;singulier&quot;/></r>
 
</p>
 
</p>
 
</e>
 
</e>
Line 90: Line 90:
 
<alphabet>abcdefghijklmnopqrstuvwxyzéè</alphabet>
 
<alphabet>abcdefghijklmnopqrstuvwxyzéè</alphabet>
 
<sdefs>
 
<sdefs>
<sdef n="nom"/>
+
<sdef n=&quot;nom&quot;/>
<sdef n="singulier"/>
+
<sdef n=&quot;singulier&quot;/>
<sdef n="pluriel"/>
+
<sdef n=&quot;pluriel&quot;/>
 
</sdefs>
 
</sdefs>
   
<section id="main" type="standard">
+
<section id=&quot;main&quot; type=&quot;standard&quot;>
 
<e>
 
<e>
 
<p>
 
<p>
 
<l>bière</l>
 
<l>bière</l>
<r>bière<s n="nom"/><s n="singulier"/></r>
+
<r>bière<s n=&quot;nom&quot;/><s n=&quot;singulier&quot;/></r>
 
</p>
 
</p>
 
</e>
 
</e>
Line 105: Line 105:
 
<p>
 
<p>
 
<l>bières</l>
 
<l>bières</l>
<r>bière<s n="nom"/><s n="pluriel"/></r>
+
<r>bière<s n=&quot;nom&quot;/><s n=&quot;pluriel&quot;/></r>
 
</p>
 
</p>
 
</e>
 
</e>
Line 112: Line 112:
 
</pre>
 
</pre>
   
Les entrées ci-dessus nous permettrons de retrouver les unités lexicales pour "bière" et "bières", and générer les deux formes de surface de ces mêmes unités lexicales.
+
Les entrées ci-dessus nous permettrons de retrouver les unités lexicales pour &quot;bière&quot; et &quot;bières&quot;, and générer les deux formes de surface de ces mêmes unités lexicales.
   
 
Le dictionnaire est fonctionnel, mais est destiné à des fins pédagogiques, les vrais fichiers dictionnaires ont un aspect quelque peu différent, parce que définir chaque mot complètement séparément des autres mots qui suivent les mêmes règles est plutôt inefficace.
 
Le dictionnaire est fonctionnel, mais est destiné à des fins pédagogiques, les vrais fichiers dictionnaires ont un aspect quelque peu différent, parce que définir chaque mot complètement séparément des autres mots qui suivent les mêmes règles est plutôt inefficace.
Line 120: Line 120:
 
Voir aussi : [[Lttoolbox (français)]]
 
Voir aussi : [[Lttoolbox (français)]]
   
Sauvez cela dans un fichier appelé <code>dictionnaire.dix</code>, ensuite on va compiler le dictionnaire dans une forme binaire<ref>Voir [[dictionnaires morphologiques]] pour une information plus complète sur le format</ref> en utilisant l'outil <code>lt-comp</code>. La commande utilise trois arguments, le premier est la "direction", ensuite le fichier d'entrée et le fichier de sortie. L'option "direction" est importante.
+
Sauvez cela dans un fichier appelé <code>dictionnaire.dix</code>, ensuite on va compiler le dictionnaire dans une forme binaire<ref>Voir [[dictionnaires morphologiques]] pour une information plus complète sur le format</ref> en utilisant l'outil <code>lt-comp</code>. La commande utilise trois arguments, le premier est la &quot;direction&quot;, ensuite le fichier d'entrée et le fichier de sortie. L'option &quot;direction&quot; est importante.
   
Si on spécifie la direction "lr" (gauche → droite soit left → right en anglais), on obtient un analyseur (c'est à dire, un dictionnaire qui récupère des formes de surface et ressort des unités lexicales. Si on spécifie l'inverse ("rl", droite → gauche soit right → left en anglais), on obtient un générateur, qui récupère des unités lexicales et ressort des formes de surface. On pourrait aussi bien générer les deux :
+
Si on spécifie la direction &quot;lr&quot; (gauche → droite soit left → right en anglais), on obtient un analyseur (c'est à dire, un dictionnaire qui récupère des formes de surface et ressort des unités lexicales. Si on spécifie l'inverse (&quot;rl&quot;, droite → gauche soit right → left en anglais), on obtient un générateur, qui récupère des unités lexicales et ressort des formes de surface. On pourrait aussi bien générer les deux :
   
 
<pre>
 
<pre>
Line 132: Line 132:
 
</pre>
 
</pre>
   
On peut maintenant utiliser le dictionnaire pour analyser le nom "bières":
+
On peut maintenant utiliser le dictionnaire pour analyser le nom &quot;bières&quot;:
   
 
<pre>
 
<pre>
$ echo "bières" | lt-proc analyseur.bin
+
$ echo &quot;bières&quot; | lt-proc analyseur.bin
 
^bières/bière<nom><pluriel>$
 
^bières/bière<nom><pluriel>$
 
</pre>
 
</pre>
Line 142: Line 142:
   
 
<pre>
 
<pre>
$ echo "^bière<nom><pluriel>$" | lt-proc -g generateur.bin
+
$ echo &quot;^bière<nom><pluriel>$&quot; | lt-proc -g generateur.bin
 
bières
 
bières
 
</pre>
 
</pre>
Line 148: Line 148:
 
== Paradigmes ==
 
== Paradigmes ==
   
Très bien, on a un dictionnaire et on peut analyser et générer les deux formes du mot "bière". Mais que se passe t'il quand on veut rajouter davantage de mots, comme "école", ou "ordinateur". Hé bien, une possibilité est de rajouter juste quatre autres entrées dans la section principale (une pour "école", "écoles", "ordinateur" et "ordinateurs"). Mais d'un autre coté, ce serait plutôt inefficace. Au lieu de cela, nous pouvons généraliser une règle, qui consiste dans ce cas à "rajouter ''-s'' pour faire le pluriel", en utilisant un ''paradigme'', qui est littéralement, "un exemple servant de modèle"<ref>La traduction de la phrase anglaise est peut être imprécise. La phrase originale disait : "an example serving as a model or pattern"</ref>.
+
Très bien, on a un dictionnaire et on peut analyser et générer les deux formes du mot &quot;bière&quot;. Mais que se passe t'il quand on veut rajouter davantage de mots, comme &quot;école&quot;, ou &quot;ordinateur&quot;. Hé bien, une possibilité est de rajouter juste quatre autres entrées dans la section principale (une pour &quot;école&quot;, &quot;écoles&quot;, &quot;ordinateur&quot; et &quot;ordinateurs&quot;). Mais d'un autre coté, ce serait plutôt inefficace. Au lieu de cela, nous pouvons généraliser une règle, qui consiste dans ce cas à &quot;rajouter ''-s'' pour faire le pluriel&quot;, en utilisant un ''paradigme'', qui est littéralement, &quot;un exemple servant de modèle&quot;<ref>La traduction de la phrase anglaise est peut être imprécise. La phrase originale disait : &quot;an example serving as a model or pattern&quot;</ref>.
   
Afin de définir les paradigmes, on prend typiquement un mot qui peut servir d'exemple pour l'infléchissement des autres mots. Dans ce cas, on peut dire, "les mots ''école'' et ''ordinateur'' s'infléchissent comme ''bière''".
+
Afin de définir les paradigmes, on prend typiquement un mot qui peut servir d'exemple pour l'infléchissement des autres mots. Dans ce cas, on peut dire, &quot;les mots ''école'' et ''ordinateur'' s'infléchissent comme ''bière''&quot;.
   
Les paradigmes vont dans une section appelée <code><pardefs></code> ('''par'''adigm '''def'''initions en anglais), après la section <code><sdefs></code> et avant la section principale. Ils sont définis dans des éléments de <code><pardef></code> (définition de paradigme). Chaque définition de paradigme doit avoir un attribut "id", qui contient un unique nom. Cet id peut être n'importe quoi, mais conventionnellement prend la forme :
+
Les paradigmes vont dans une section appelée <code><pardefs></code> ('''par'''adigm '''def'''initions en anglais), après la section <code><sdefs></code> et avant la section principale. Ils sont définis dans des éléments de <code><pardef></code> (définition de paradigme). Chaque définition de paradigme doit avoir un attribut &quot;id&quot;, qui contient un unique nom. Cet id peut être n'importe quoi, mais conventionnellement prend la forme :
   
 
:<code><lemme>__<partie de discours></code>, (ex: <code>biere__n</code>)
 
:<code><lemme>__<partie de discours></code>, (ex: <code>biere__n</code>)
   
<u>Remarque de traduction :</u> Le texte original prenait des exemples dans la langue anglaise que j'ai choisi de franciser. Toutefois, je ne sais pas si les caractères accentués ou spéciaux comme dans <code>bière__n</code> sont autorisés pour les "id". Par précaution, j'ai donc choisi de supprimer l'accent.
+
<u>Remarque de traduction :</u> Le texte original prenait des exemples dans la langue anglaise que j'ai choisi de franciser. Toutefois, je ne sais pas si les caractères accentués ou spéciaux comme dans <code>bière__n</code> sont autorisés pour les &quot;id&quot;. Par précaution, j'ai donc choisi de supprimer l'accent.
   
Afin de fabriquer les unités lexicales pour bière, bières, ordinateur, ordinateurs, etc... on a besoin de distinguer entre la partie de la forme de surface qui ne change pas (la partie ''identique''), et la partie qui change. Dans l'exemple déjà donné, on voit que la partie identique est toujours la forme au singulier. Toutefois, ça peut ne pas être toujours le cas (par exemple : "canal, canaux", "vitrail, vitraux").
+
Afin de fabriquer les unités lexicales pour bière, bières, ordinateur, ordinateurs, etc... on a besoin de distinguer entre la partie de la forme de surface qui ne change pas (la partie ''identique''), et la partie qui change. Dans l'exemple déjà donné, on voit que la partie identique est toujours la forme au singulier. Toutefois, ça peut ne pas être toujours le cas (par exemple : &quot;canal, canaux&quot;, &quot;vitrail, vitraux&quot;).
   
 
Vous avez probablement déjà deviné à quoi la définition de paradigme va ressembler, donc la voici :
 
Vous avez probablement déjà deviné à quoi la définition de paradigme va ressembler, donc la voici :
   
 
<pre>
 
<pre>
<pardef n="biere__n">
+
<pardef n=&quot;biere__n&quot;>
 
<e>
 
<e>
 
<p>
 
<p>
 
<l/>
 
<l/>
<r><s n="nom"/><s n="singulier"/></r>
+
<r><s n=&quot;nom&quot;/><s n=&quot;singulier&quot;/></r>
 
</p>
 
</p>
 
</e>
 
</e>
Line 173: Line 173:
 
<p>
 
<p>
 
<l>s</l>
 
<l>s</l>
<r><s n="nom"/><s n="pluriel"/></r>
+
<r><s n=&quot;nom&quot;/><s n=&quot;pluriel&quot;/></r>
 
</p>
 
</p>
 
</e>
 
</e>
Line 206: Line 206:
   
 
</pardefs>
 
</pardefs>
<section id="main" type="standard">
+
<section id=&quot;main&quot; type=&quot;standard&quot;>
<e lm="bière"><i>bière</i><par n="biere__n"/></e>
+
<e lm=&quot;bière&quot;><i>bière</i><par n=&quot;biere__n&quot;/></e>
<e lm="école"><i>école</i><par n="biere__n"/></e>
+
<e lm=&quot;école&quot;><i>école</i><par n=&quot;biere__n&quot;/></e>
<e lm="ordinateur"><i>ordinateur</i><par n="biere__n"/></e>
+
<e lm=&quot;ordinateur&quot;><i>ordinateur</i><par n=&quot;biere__n&quot;/></e>
<e lm="maison"><i>maison</i><par n="biere__n"/></e>
+
<e lm=&quot;maison&quot;><i>maison</i><par n=&quot;biere__n&quot;/></e>
 
</section>
 
</section>
 
</dictionary>
 
</dictionary>

Revision as of 19:04, 6 March 2012

On a dit que le format des dictionnaires d'Apertium n'est pas intuitif, ce qui est assez vrai si vous n'êtes pas habitué à penser aux dictionnaires d'une manière particulière. Cette page espère être une introduction de base sur la façon dont ils fonctionnent et comment vous pouvez commencer à les lire et les écrire !

Cette page suppose que vous êtes à l'aise avec HTML et XML, que vous pouvez distinguer un élément d'un attribut et savez ce que sont les données caractères. Si vous voulez un résumé rapide, ceci devrait vous aider :

<element attribute="value">character data</element>

Si cela n'a aucune signification pour vous, vous devriez probablement lire un peu plus sur le XML.

Introduction

Donc, au niveau global, le dictionnaire le plus basique a besoin de 3 sections. Nous allons, pas à pas, définir un dictionnaire qui va analyser et générer le mot français "bière" et sa forme plurielle, "bières".

La première section définit l'alphabet qui est utilisé par le dictionnaire. C'est assez explicite et ça ressemblera à quelque-chose comme :

  <alphabet>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</alphabet>

La liste de caractères est valable pour un dictionnaire anglais, mais dans d'autres langues, il ne faut pas oublier les caractères accentués ou spéciaux genre ç.

La seconde section définit les symboles grammaticaux[1] de la langue sur laquelle vous travaillez. C'est normalement là où les gens disent, attendez... que sont les symboles grammaticaux ? Hé bien, il y a plusieurs façons de décrire les mots, et les différentes formes que les mots peuvent prendre, donc je suppose que vous savez ce qu'est une partie de discours[2]. Par exemple: les noms (maison, bière, bateau, chat, ...), que vous pouvez distinguer des adjectifs (rouge, bon, transparent, ...) et des verbes (manger, multiplier, écrire, ...). La manière de les spécifier est la suivante :

  <sdefs>
    <sdef n="nom"/>
    <sdef n="verbe"/>
    <sdef n="adjectif"/>
  </sdefs>

ou en utilisant des termes anglais :

  <sdefs>
    <sdef n="noun"/>
    <sdef n="verb"/>
    <sdef n="adjective"/>
  </sdefs>

Les gens se plaignent souvent de la brièveté de ces symboles, et typiquement même les valeurs sont abrégées, ainsi le nom devient "n", le verbe devient "vb" et l'adjectif devient "adj" etc... (voir Liste des symboles pour quelques abréviations courantes). La brièveté présente toutefois un intérêt, quand vous écrivez, ou copiez vous voulez que les symboles restent aussi petits que possible. Par exemple, <sdef> veut dire "définition de symbole", et <sdefs> est simplement la même chose au pluriel.

Après avoir spécifié l'alphabet et les symboles, on a besoin de spécifier les mots, c'est la partie la plus importante du dictionnaire ! Pour supporter les mots on utilise une section. Il peut y avoir plus d'une section dans un dictionnaire, et il y a plus d'un type de section. On ne rentrera pas dans les détails ici, mais traditionnellement la plus grande section est appelée "main" et est de type "standard".

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

  </section>

La prochaine étape est de rajouter une entrée. C'est un peu plus compliqué, donc s'il vous plaît, continuez de lire...

Entrées

Les dictionnaires unilingues dans Apertium sont des dictionnaires morphologiques[3], cela signifie qu'ils ne supportent pas seulement les mots, mais qu'ils supportent aussi comment ils s'infléchissent, et ce que leur infléchissement signifie. Dans Apertium on utilise les dictionnaires morphologiques pour deux traitements :

  1. Analyse — récupération de toutes les unités lexicales possibles à partir de la forme de surface d'un mot.
  2. Génération — production de la forme de surface d'un mot à partir d'une unité lexicale.

Bon, maintenant pour expliquer unité lexicale et forme de surface. Rappelez-vous l'exemple de "bière" et "bières". Nous savons que "bière" est un nom, nous savons aussi qu'il est au singulier, nous savons aussi que la seule différence entre "bière" et "bières" est que "bières" est au pluriel. Donc, pour résumer les connaissances ci-dessous, on trouve les 2 faits suivants :

  1. bière — est un nom au singulier,
  2. bières — est la forme au pluriel du nom "bière".

Ce qu'on entend par unité lexicale est la combinaison du lemme[4], par exemple "bière" et des symboles grammaticaux. La forme de surface d'un mot est le mot tel que vous le lisez.[5] Dans le style Apertium ils devraient être représentés par quelque-chose comme ce qui suit :

Forme de surface Unité lexicale
bière bière<nom><singulier>
bières bière<nom><pluriel>

Afin de pouvoir faire la conversion entre ces deux formes, on a besoin de les définir comme paire. Les paires de forme de surface et d'unités lexicales dans Apertium sont indiquées par l'élément <p> . C'est plutôt intuitif, à partir du moment où vous connaissez l'abréviation ! Ces éléments paires peuvent contenir un "coté gauche" (<l> abréviation de l'anglais left) et un "coté droit" (<r> abréviation de l'anglais right). Le coté gauche contient presque toujours la forme de surface du mot, alors que le coté droit contient l'unité lexicale. Donc, notre première entrée (<e>) devrait ressembler à quelque-chose comme :

    <e>
      <p>
        <l>bière</l>
        <r>bière<s n="nom"/><s n="singulier"/></r>
      </p>
    </e>

Maintenant, en gros, vous avez besoin d'autant de ces entrées qu'il y a de formes de surface dans la langue, toutefois les astucieux parmi vous se seront rendus compte que la création d'entrées pour tous les mots d'une langue est une tâche impossible. La prochaine section vous montrera comment cela peut être évité, mais pour l'instant nous avons à présent suffisamment d'informations pour compiler notre premier dictionnaire :

<dictionary>
  <alphabet>abcdefghijklmnopqrstuvwxyzéè</alphabet>
  <sdefs>
    <sdef n="nom"/>
    <sdef n="singulier"/>
    <sdef n="pluriel"/>
  </sdefs>

  <section id="main" type="standard">
    <e>
      <p>
        <l>bière</l>
        <r>bière<s n="nom"/><s n="singulier"/></r>
      </p>
    </e>
    <e>
      <p>
        <l>bières</l>
        <r>bière<s n="nom"/><s n="pluriel"/></r>
      </p>
    </e>
  </section>
</dictionary>

Les entrées ci-dessus nous permettrons de retrouver les unités lexicales pour "bière" et "bières", and générer les deux formes de surface de ces mêmes unités lexicales.

Le dictionnaire est fonctionnel, mais est destiné à des fins pédagogiques, les vrais fichiers dictionnaires ont un aspect quelque peu différent, parce que définir chaque mot complètement séparément des autres mots qui suivent les mêmes règles est plutôt inefficace.

Compilation

Voir aussi : Lttoolbox (français)

Sauvez cela dans un fichier appelé dictionnaire.dix, ensuite on va compiler le dictionnaire dans une forme binaire[6] en utilisant l'outil lt-comp. La commande utilise trois arguments, le premier est la "direction", ensuite le fichier d'entrée et le fichier de sortie. L'option "direction" est importante.

Si on spécifie la direction "lr" (gauche → droite soit left → right en anglais), on obtient un analyseur (c'est à dire, un dictionnaire qui récupère des formes de surface et ressort des unités lexicales. Si on spécifie l'inverse ("rl", droite → gauche soit right → left en anglais), on obtient un générateur, qui récupère des unités lexicales et ressort des formes de surface. On pourrait aussi bien générer les deux :

$ lt-comp lr dictionnaire.dix analyseur.bin
main@standard 7 6

$ lt-comp rl dictionnaire.dix generateur.bin
main@standard 7 6

On peut maintenant utiliser le dictionnaire pour analyser le nom "bières":

$ echo "bières" | lt-proc analyseur.bin
^bières/bière<nom><pluriel>$

L'analyse nous donne la forme de surface, suivie de l'unité lexicale. Si on veut générer la forme de surface depuis l'unité lexicale, on fait juste :

$ echo "^bière<nom><pluriel>$" | lt-proc -g generateur.bin
bières

Paradigmes

Très bien, on a un dictionnaire et on peut analyser et générer les deux formes du mot "bière". Mais que se passe t'il quand on veut rajouter davantage de mots, comme "école", ou "ordinateur". Hé bien, une possibilité est de rajouter juste quatre autres entrées dans la section principale (une pour "école", "écoles", "ordinateur" et "ordinateurs"). Mais d'un autre coté, ce serait plutôt inefficace. Au lieu de cela, nous pouvons généraliser une règle, qui consiste dans ce cas à "rajouter -s pour faire le pluriel", en utilisant un paradigme, qui est littéralement, "un exemple servant de modèle"[7].

Afin de définir les paradigmes, on prend typiquement un mot qui peut servir d'exemple pour l'infléchissement des autres mots. Dans ce cas, on peut dire, "les mots école et ordinateur s'infléchissent comme bière".

Les paradigmes vont dans une section appelée <pardefs> (paradigm definitions en anglais), après la section <sdefs> et avant la section principale. Ils sont définis dans des éléments de <pardef> (définition de paradigme). Chaque définition de paradigme doit avoir un attribut "id", qui contient un unique nom. Cet id peut être n'importe quoi, mais conventionnellement prend la forme :

<lemme>__<partie de discours>, (ex: biere__n)

Remarque de traduction : Le texte original prenait des exemples dans la langue anglaise que j'ai choisi de franciser. Toutefois, je ne sais pas si les caractères accentués ou spéciaux comme dans bière__n sont autorisés pour les "id". Par précaution, j'ai donc choisi de supprimer l'accent.

Afin de fabriquer les unités lexicales pour bière, bières, ordinateur, ordinateurs, etc... on a besoin de distinguer entre la partie de la forme de surface qui ne change pas (la partie identique), et la partie qui change. Dans l'exemple déjà donné, on voit que la partie identique est toujours la forme au singulier. Toutefois, ça peut ne pas être toujours le cas (par exemple : "canal, canaux", "vitrail, vitraux").

Vous avez probablement déjà deviné à quoi la définition de paradigme va ressembler, donc la voici :

    <pardef n="biere__n">
      <e>
        <p>
          <l/>
          <r><s n="nom"/><s n="singulier"/></r>
        </p>
      </e>
      <e>
        <p>
          <l>s</l>
          <r><s n="nom"/><s n="pluriel"/></r>
        </p>
      </e>
    </pardef>

La seule chose qui a changé entre ces deux entrées, et les premières qu'on avait construites est que la partie identique a été supprimée des deux cotés de la paire.

La définition du paradigme entre dans sa propre partie du dictionnaire, entouré de balises <pardefs>, Par exemple :

  <pardefs>

    ...  

  </pardefs>

On peut voir où celà se met dans le reste dictionnaire ci-dessous :

<dictionary>
  <alphabet>abcdefghijklmnopqrstuvwxyzéè</alphabet>
  <sdefs>

   ...

  </sdefs>
  <pardefs>

    ...  

  </pardefs>
  <section id="main" type="standard">
    <e lm="bière"><i>bière</i><par n="biere__n"/></e>
    <e lm="école"><i>école</i><par n="biere__n"/></e>
    <e lm="ordinateur"><i>ordinateur</i><par n="biere__n"/></e>
    <e lm="maison"><i>maison</i><par n="biere__n"/></e>
  </section>
</dictionary>

Remarque finale : Comme déjà précisé, les mots utilisés comme exemple sont (sauf cas particuliers) des traductions de mots anglais. Toutefois, pour réaliser un dictionnaire français (ou de nombreuses autres langues) complet, il faudrait en plus préciser quels noms de la liste sont masculins et quels autres féminins.

Notes

  1. Dans d'autres documents linguistiques ils sont quelquefois appelés "features" (caractéristiques), ou "catégories" et "sous-catégories".
  2. une partie de discours (ou catégorie lexicale, classe de mot, classe lexicale, etc.) est une catégorie linguistique de mots, qui est généralement définie par le comportement syntaxique ou morphologique du mot en question. Les catégories linguistiques communes comprennent le nom et le verbe, entre autres. Il y a des classes de mots ouvertes, qui acquièrent constamment de nouveaux membres, et des classes de mots fermées, qui n'acquièrent de nouveaux membres que rarement si ça arrive.
  3. Un dictionnaire morphologique modélise les règles qui régissent la structure interne des mots dans une langue. Par exemple, les francophones se rendent compte que les mots "chien" et "chiens" sont liés, que "chiens" est à "chien" ce que "chats" est à "chat". Les règles comprises par le locuteur reflètent des modèles spécifiques et des régularités des modèles spécifiques et des régularités dans la façon dont les mots sont formés à partir des plus petites unités et comment ces plus petites unités interagissent.
  4. Le lemme (or forme de citation, forme de base) est la forme canonique d'un mot. C'est la forme du mot qui est typiquement utilisée dans les dictionnaires papier.
  5. Les formes de surface peuvent être ambiguës, mais pas les unités lexicales. Une forme de surface peut avoir plusieurs analyses, par exemple "porte" peut être un verbe (Je porte une valise), ou un nom (La porte est ouverte).
  6. Voir dictionnaires morphologiques pour une information plus complète sur le format
  7. La traduction de la phrase anglaise est peut être imprécise. La phrase originale disait : "an example serving as a model or pattern"