Difference between revisions of "Fabriquer des dictionnaires"
(liens + catégories) |
(Lien page anglaise) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
[[Building dictionaries|In English]] |
|||
Certains d'entre vous ont été assez braves pour commencer à écrire de nouvelles paires de langues pour Apertium. Ça me rend (et toute l'équipe d'Apertium) très content et reconnaissant, mais plus important encore, ça rend Apertium utile pour davantage de monde. |
Certains d'entre vous ont été assez braves pour commencer à écrire de nouvelles paires de langues pour Apertium. Ça me rend (et toute l'équipe d'Apertium) très content et reconnaissant, mais plus important encore, ça rend Apertium utile pour davantage de monde. |
||
Line 10: | Line 12: | ||
== Fréquence == |
== Fréquence == |
||
L'intuition d'une personne |
L'intuition d'une personne quant à la fréquence ou à l'importance des mots peut être très trompeuse. Par conséquent, le mieux qu'on puisse faire est de récupérer une grande masse de textes (des millions de mots, si possible) représentatifs de ce que l'on veut traduire et de s'en servir pour étudier la fréquence des mots et des phénomènes. |
||
Récupérez |
Récupérez-les depuis Wikipedia ou d'une archive de journal ou écrivez un robot qui les récupère sur le web. |
||
Il est assez facile d'établir un « hit parade » brut des mots en utilisant une séquence de commandes Unix simple (une seule ligne) : |
|||
<pre> |
<pre> |
||
Line 22: | Line 24: | ||
Bien sûr, ça peut être bien amélioré mais ça sert à des buts d'illustration. |
Bien sûr, ça peut être bien amélioré mais ça sert à des buts d'illustration. |
||
[[Image:Wikipedia-n-zipf.png|thumb|320px|right|'''Fréquence des mots contre rang des mots''': |
[[Image:Wikipedia-n-zipf.png|thumb|320px|right|'''Fréquence des mots contre rang des mots''': un graphique de fréquence des mots dans Wikipedia. Le graphique utilise des coordonnées logarithmiques. ''X'' est le rang d'un mot dans la table de fréquence ; ''Y'' est le nombre total d'occurrences du mot. La loi de Zipf correspond à la portion linéaire du dessus de la courbe, qui suit à peu près la ligne verte (1/''x'').]] |
||
Vous |
Vous découvrirez d'intéressantes caractéristiques à cette liste. Premièrement, en multipliant le rang d'un mot par sa fréquence, vous obtenez un nombre qui est à peu près constant. On appelle cela la [http://fr.wikipedia.org/wiki/Loi_de_Zipf loi de Zipf]. |
||
Une |
Une seconde est que la '''moitié de la liste''' est constituée d'''hapax legomena'' (mots qui n'apparaissent qu'une fois). |
||
Troisièmement, avec |
Troisièmement, avec quelques 1.000 mots, on couvre 75 % du texte. |
||
Donc utilisez les listes comme celles-ci quand vous construisez des dictionnaires. |
Donc utilisez les listes comme celles-ci quand vous construisez des dictionnaires. |
||
Si l'une de vos langues est l'anglais, il |
Si l'une de vos langues est l'anglais, il existe des listes intéressantes : |
||
* [http://ogden.basic-english.org/words.html Anglais de base Ogden] (850 mots) |
* [http://ogden.basic-english.org/words.html Anglais de base Ogden] (850 mots) |
||
Line 54: | Line 56: | ||
* http://meta.wikimedia.org/wiki/Help:Export |
* http://meta.wikimedia.org/wiki/Help:Export |
||
Les dumps nécessitent du nettoyage (enlever la syntaxe Wiki et XML etc.), mais peuvent fournir une quantité ''substantielle'' de texte — à la fois pour l'analyse de fréquence et comme source de phrases pour les POS [[Formation d'un tagger|tagger training]] (?). Cela peut faire un peu de travail, et ce n'est pas aussi facile que de récupérer un beau corpus, mais d'un autre coté ils sont disponibles dans quelques [http://meta.wikimedia.org/wiki/List_of_Wikipedias 275 langues] avec au moins 100 articles écrits dans chacune. |
|||
The dumps need cleaning up (removing Wiki syntax and XML etc.), but can |
|||
provide a ''substantial'' amount of text — both for fréquence analysis and |
|||
as a source of sentences for POS [[tagger training]]. It can take some work, and isn't as |
|||
easy as getting a nice corpus, but on the other hand they're available |
|||
in some [http://meta.wikimedia.org/wiki/List_of_Wikipedias 275 languages] with at least 100 articles written in each. |
|||
Vous prendrez celui intitulé "Articles, templates, image descriptions, et primary meta-pages". Celui-ci contient les versions actuelles de contenu de l'article, et c'est l'archive que la plupart des sites miroirs voudront probablement. |
|||
You'll want the one entitled "Articles, templates, image descriptions, |
|||
and primary meta-pages. -- This contains current versions of article |
|||
content, and is the archive most mirror sites will probably want." |
|||
Quelque chose comme (pour l'afrikaans): |
|||
Something like (for Afrikaans): |
|||
<pre> |
<pre> |
||
$ bzcat afwiki-20070508-pages-articles.xml.bz2 | grep '^[A-Z]' | |
$ bzcat afwiki-20070508-pages-articles.xml.bz2 | grep '^[A-Z]' | tr -d "[]" | |
||
sed 's/|/ /g |
|||
's/$/\n/g' | sed 's/\[\[.*|//g' | sed 's/\]\]//g' | sed 's/\[\[//g' | |
|||
s/&[a-z]*;/ /g' |
|||
</pre> |
</pre> |
||
Cela vous donnera approximativement des listes utiles d'une phrase par ligne (en sautant la plupart des formatages étrangers). Remarque, cela suppose que votre langue utilise l'alphabet latin, si elle utilise un autre système d'écriture, vous aurez besoin de changer cela. |
|||
This will give you approximately useful lists of one sentence per line |
|||
(stripping out most of the extraneous formatting). Note, this presumes that your |
|||
language uses the Latin alphabet; if it uses another writing system, |
|||
you'll need to change that. |
|||
Essayez quelque chose comme (pour l'afrikaans): |
|||
Try something like (for Afrikaans): |
|||
<pre> |
<pre> |
||
$ bzcat afwiki-20070508-pages-articles.xml.bz2 | grep '^[A-Z]' | |
$ bzcat afwiki-20070508-pages-articles.xml.bz2 | grep '^[A-Z]' | tr -d "[]" | |
||
sed 's/|/ /g |
|||
sed 's/\[\[.*|//g' | sed 's/\]\]//g' | sed 's/\[\[//g' | sed 's/&.*;/ /g' | tr ' ' '\012' | |
|||
s/&[a-z]*;/ /g |
|||
sort -f | uniq -c | sort -nr > hitparade.txt |
s/ /\n/g' | sort -f | uniq -c | sort -nr > hitparade.txt |
||
</pre> |
</pre> |
||
Une fois que vous avez ce 'hitparade' de mots, il vaut probablement mieux de mettre les 20,000–30,000 de tête dans un fichier séparé. |
|||
Once you have this 'hitparade' of words, it is first probably best to skim |
|||
off the top 20,000–30,000 into a separate file. |
|||
<pre> |
<pre> |
||
$ cat hitparade.txt | head -20000 > top. |
$ cat hitparade.txt | head -20000 > top.liste.20000.txt |
||
</pre> |
</pre> |
||
Maintenant, si vous avez déjà travaillé sur un dictionnaire, il y a des chances qu'il existe dans cette 'top liste' des mots que vous avez déjà rajoutés. Vous pouvez supprimer les formes de mots que vous êtes déjà capable d'analyser en utilisant (par exemple pour l'afrikaans): |
|||
Now, if you already have been working on a dictionary, chances are that there |
|||
will exist in this 'top list' words you have already added. You can remove word forms |
|||
you are already able to analyse using (for example Afrikaans): |
|||
<pre> |
<pre> |
||
$ cat top. |
$ cat top.liste.20000.txt | apertium-destxt | lt-proc af-en.automorf.bin | apertium-retxt | grep '/\*' > mots_a_rajouter.txt |
||
</pre> |
</pre> |
||
( |
(ici <code>lt-proc af-en.automorf.bin</code> va analyser le flux d'entrée des mots afrikaans et mettre un astérisque * sur ceux il ne reconnaît pas) |
||
Pour chaque 10 words environ que vous rajoutez, ça vaut probablement la peine de recommencer cette étape, tout particulièrement pour les langues fortement infléchies — comme un lemme peur produire plusieurs formes de mots, et que la liste de mots n'est pas "lemmatisée". |
|||
For every 10 words or so you add, it's probably worth going back and repeating this step, especially |
|||
for highly inflected languages — as one lemma can produce many word forms, and the wordlist |
|||
is not lemmatised. |
|||
== Récupérer des entrées de dictionnaires bilingues à peu de frais == |
|||
== Getting cheap bilingual dictionary entries == |
|||
Une manière économique de récupérer des entrées de dictionnaires bilingues pour une paire de langues se fait comme suit : |
|||
A cheap way of getting bilingual dictionary entries between a pair of |
|||
languages is as follows: |
|||
D'abord, saisissez vous-même une liste de ''noms'' dans la lange ''x''; par exemple, récupérez les du dictionnaire Apertium que vous utilisez : |
|||
First grab yourself a wordlist of ''nouns'' in language ''x''; for |
|||
example, grab them out of the Apertium dictionary you are using: |
|||
<pre> |
<pre> |
||
Line 118: | Line 105: | ||
</pre> |
</pre> |
||
Ensuite, écrivez un script basique, du genre : |
|||
<pre> |
<pre> |
||
#!/bin/sh |
#!/bin/sh |
||
# traduction depuis |
|||
#language to translate from |
|||
LANGF=$2 |
LANGF=$2 |
||
#language to translate to |
|||
# traduction vers |
|||
LANGT=$3 |
LANGT=$3 |
||
#filename of wordlist |
|||
# nom du fichier contenant la liste des mots |
|||
LIST=$1 |
LIST=$1 |
||
Line 143: | Line 132: | ||
</pre> |
</pre> |
||
''Note: |
''Note : Le "sleep 8" est pour éviter de mettre une pression excessive sur les serveurs Wikimedia.'' |
||
Si vous sauvez ceci dans <code>iw-word.sh</code>, vous pouvez alors utiliser la ligne de commandes : |
|||
<pre> |
<pre> |
||
$ sh iw-word.sh < |
$ sh iw-word.sh <liste_de_mots> <code_langue_origine> <code_langue_destination> |
||
</pre> |
</pre> |
||
Par exemple, pour récupérer une liste de mots bilingue de l'anglais à l'afrikaans, utilisez : |
|||
Fr example, to retrieve a bilingual wordlist from English to Afrikaans, use: |
|||
<pre> |
<pre> |
||
Line 156: | Line 145: | ||
</pre> |
</pre> |
||
La méthode est de fiabilité variable. Les rapports avec entre 70% et 80% de précision sont habituels. C'est meilleur pour les termes non ambigus, mais ça fonctionne lorsque les termes gardent de l'ambiguïté entre les langues. |
|||
The method is of variable reliability. Reports of between 70% and 80% |
|||
accuracy are common. It is best for unambiguous terms, but works all right where |
|||
terms retain ambiguity through languages. |
|||
Chaque correspondance produite par cette méthode '''doit''' être testée par des locuteurs natifs ou |
|||
Any correspondences produced by this method '''must''' be checked by native or |
|||
expérimentés de la paire de langues en question. |
|||
== |
== Dictionnaire unilingue == |
||
{{main|Monodix}} |
|||
Voir aussi [[Dictionnaire unilingue]] |
|||
If the language you're working with is fairly regular, and noun inflection is quite easy (for example English or Afrikaans), then the following script may be useful: |
|||
Si la langue sur laquelle vous travaillez est assez régulière, et que l'inflection des noms est assez facile (par exemple le français, l'anglais ou l'afrikaans), alors le script suivant peut être utile : |
|||
You'll need a large wordlist (of all forms, not just lemmata) and some existing paradigms. It works by first taking all singular forms out of the list, then looking for plural forms, then printing out those which have both singular and plural forms in Apertium format. |
|||
Vous aurez besoin d'une grande liste de mots (de toutes les formes, pas seulement des lemmes) et de quelques paradigmes existants. Ça fonctionne en prenant d'abord toutes les formes au singulier de la liste, puis en cherchant les formes au pluriel, puis en affichant celles qui ont à la fois une forme au singulier et une forme au pluriel dans le format Apertium. |
|||
''Note: These will need to be checked, as no language except Esperanto is that regular.'' |
|||
''Note: Cela aura besoin d'être testé, puisqu'aucune langue à part l'espéranto est parfaitement régulière.'' |
|||
<pre> |
<pre> |
||
# mettre ici l'emplacement de votre liste de mots |
|||
# set this to the location of your wordlist |
|||
WORDLIST=/home/spectre/corpora/afrikaans-meester-utf8.txt |
WORDLIST=/home/spectre/corpora/afrikaans-meester-utf8.txt |
||
# mettre le paradigme, et les terminaisons singulier et pluriel. |
|||
# set the paradigm, and the singular and plural endings. |
|||
PARADIGM=sa/ak__n |
PARADIGM=sa/ak__n |
||
SINGULAR=aak |
SINGULAR=aak |
||
PLURAL=ake |
PLURAL=ake |
||
# set this to the number of characters that need to be kept from the singular form. |
|||
# mettre le nombre de caractères qui doivent être conservés dans la forme au singulier. |
|||
# e.g. [0:-1] means 'cut off one character', [0:-2] means 'cut off two characters' etc. |
|||
# ex : [0:-1] signifie 'supprimez une caractère', [0:-2] signifie 'supprimez deux caractères' etc. |
|||
ECHAR=`echo -n $SINGULAR | python -c 'import sys; print sys.stdin.read().decode("utf8")[0:-1];' |
ECHAR=`echo -n $SINGULAR | python -c 'import sys; print sys.stdin.read().decode("utf8")[0:-1];' |
||
Line 191: | Line 180: | ||
SFORM=`echo $word | sed "s/$PLURAL/$SINGULAR/g"` |
SFORM=`echo $word | sed "s/$PLURAL/$SINGULAR/g"` |
||
cat $WORDLIST | grep ^$SFORM$ > /dev/null |
cat $WORDLIST | grep ^$SFORM$ > /dev/null |
||
# if the form is found then append it to the list |
|||
# si la forme est trouvée alors l'ajouter à la liste |
|||
if [ $? -eq 0 ]; then |
if [ $? -eq 0 ]; then |
||
CROSSOVER=$CROSSOVER" "$SFORM |
CROSSOVER=$CROSSOVER" "$SFORM |
||
Line 197: | Line 187: | ||
done |
done |
||
# afficher la liste |
|||
# print out the list |
|||
for pair in $CROSSOVER; do |
for pair in $CROSSOVER; do |
||
echo ' <e lm="'$pair'"><i>'`echo $pair | sed "s/$SINGULAR/$ECHAR/g"`'</i><par n="'$PARADIGM'"/></e>'; |
echo ' <e lm="'$pair'"><i>'`echo $pair | sed "s/$SINGULAR/$ECHAR/g"`'</i><par n="'$PARADIGM'"/></e>'; |
||
Line 208: | Line 198: | ||
* [[Récupération de dictionnaires bilingues depuis OmegaWiki]] |
* [[Récupération de dictionnaires bilingues depuis OmegaWiki]] |
||
== |
== Lectures complémentaires == |
||
* Mark Pagel, Quentin D. Atkinson & Andrew Meade (2007) "fréquence of word-use predicts rates of lexical evolution throughout Indo-European history". ''Nature'' 449, 665 |
* Mark Pagel, Quentin D. Atkinson & Andrew Meade (2007) "fréquence of word-use predicts rates of lexical evolution throughout Indo-European history". ''Nature'' 449, 665 |
||
:"A travers 200 significations, les mots fréquemment utilisés évoluent lentement et les mots peu utilisés évoluent plus vite. Cette relation est valable séparément et de manière identique dans les parties de discours pour chacune des quatre langues du corpus, et compte pour approximativement 50% de la variation historique des taux de remplacement lexicaux. Nous proposons que le fréquence avec lequel des mots spécifiques sont employés dans la langue de tous les jours exerce une influence générale et semblable à une loi sur leur taux d'évolution." |
|||
:"Across all 200 meanings, frequently used words evolve at slower rates and infrequently used words evolve more rapidly. This relationship holds separately and identically across parts of speech for each of the four language corpora, and accounts for approximately 50% of the variation in historical rates of lexical replacement. We propose that the fréquence with which specific words are used in everyday language exerts a general and law-like influence on their rates of evolution." |
|||
[[Category:Documentation]] |
[[Category:Documentation]] |
Latest revision as of 07:04, 8 October 2014
Certains d'entre vous ont été assez braves pour commencer à écrire de nouvelles paires de langues pour Apertium. Ça me rend (et toute l'équipe d'Apertium) très content et reconnaissant, mais plus important encore, ça rend Apertium utile pour davantage de monde.
Je veux partager quelques leçons que j'ai tirées de la construction de plusieurs dictionnaires : l'importance des estimations de fréquence. Pour les nouvelles paires pour avoir la couverture la meilleure possible avec un minimum d'effort, il est très important de rajouter les mots et les règles par ordre décroissant de fréquence,, en commençant par les mots et les phénomènes les plus fréquents.
La raison pour laquelle les mots devraient être rajoutés par ordre de fréquence est assez intuitive : plus la fréquence est élevée, plus le mot a des chances d'apparaître dans le texte que vous essayez de traduire (voir ci-dessous pour la loi de Zipf).
Par exemple, en anglais vous pouvez être pratiquement sûr que les mots "the" ou "a" apparaîtront partout même dans les phrases les plus simples; par contre, combien de fois avez-vous vu "hypothyroidism" ou "obelisk" écrit ? Plus la fréquence du mot est élevée, plus vous "gagnez" à l'ajouter.
Contents
Fréquence[edit]
L'intuition d'une personne quant à la fréquence ou à l'importance des mots peut être très trompeuse. Par conséquent, le mieux qu'on puisse faire est de récupérer une grande masse de textes (des millions de mots, si possible) représentatifs de ce que l'on veut traduire et de s'en servir pour étudier la fréquence des mots et des phénomènes. Récupérez-les depuis Wikipedia ou d'une archive de journal ou écrivez un robot qui les récupère sur le web.
Il est assez facile d'établir un « hit parade » brut des mots en utilisant une séquence de commandes Unix simple (une seule ligne) :
$ cat monfichierrepresentatif.txt | tr ' ' '\012' | sort -f | uniq -c | sort -nr > hitparade.txt
[J'ai tiré ça de Unix for Poets, je pense.]
Bien sûr, ça peut être bien amélioré mais ça sert à des buts d'illustration.
Vous découvrirez d'intéressantes caractéristiques à cette liste. Premièrement, en multipliant le rang d'un mot par sa fréquence, vous obtenez un nombre qui est à peu près constant. On appelle cela la loi de Zipf.
Une seconde est que la moitié de la liste est constituée d'hapax legomena (mots qui n'apparaissent qu'une fois).
Troisièmement, avec quelques 1.000 mots, on couvre 75 % du texte.
Donc utilisez les listes comme celles-ci quand vous construisez des dictionnaires.
Si l'une de vos langues est l'anglais, il existe des listes intéressantes :
Gardez à l'esprit, bien sûr, que ces listes sont également basées sur un modèle particulier d'utilisation de l'anglais, qui n'est pas l'anglais "qui vient naturellement".
La même chose s'applique aux autres phénomènes linguistiques. Les linguistes ont tendance à se focaliser sur des phénomènes très rares qui sont les clés de l'identité d'une langue, ou sur ce qui est différent entre les langues. Mais ces "bijoux" ne sont généralement pas les "blocs de construction" que vous utiliseriez pour créer des règles de traduction. Donc, ne vous emballez pas. Faites seulement confiance aux fréquences et à la grande quantité de vrai texte.
Récupérateur de corpus[edit]
Dumps Wikipedia[edit]
Pour de l'aide pour les traiter, voir :
Les dumps nécessitent du nettoyage (enlever la syntaxe Wiki et XML etc.), mais peuvent fournir une quantité substantielle de texte — à la fois pour l'analyse de fréquence et comme source de phrases pour les POS tagger training (?). Cela peut faire un peu de travail, et ce n'est pas aussi facile que de récupérer un beau corpus, mais d'un autre coté ils sont disponibles dans quelques 275 langues avec au moins 100 articles écrits dans chacune.
Vous prendrez celui intitulé "Articles, templates, image descriptions, et primary meta-pages". Celui-ci contient les versions actuelles de contenu de l'article, et c'est l'archive que la plupart des sites miroirs voudront probablement.
Quelque chose comme (pour l'afrikaans):
$ bzcat afwiki-20070508-pages-articles.xml.bz2 | grep '^[A-Z]' | tr -d "[]" | sed 's/|/ /g s/&[a-z]*;/ /g'
Cela vous donnera approximativement des listes utiles d'une phrase par ligne (en sautant la plupart des formatages étrangers). Remarque, cela suppose que votre langue utilise l'alphabet latin, si elle utilise un autre système d'écriture, vous aurez besoin de changer cela.
Essayez quelque chose comme (pour l'afrikaans):
$ bzcat afwiki-20070508-pages-articles.xml.bz2 | grep '^[A-Z]' | tr -d "[]" | sed 's/|/ /g s/&[a-z]*;/ /g s/ /\n/g' | sort -f | uniq -c | sort -nr > hitparade.txt
Une fois que vous avez ce 'hitparade' de mots, il vaut probablement mieux de mettre les 20,000–30,000 de tête dans un fichier séparé.
$ cat hitparade.txt | head -20000 > top.liste.20000.txt
Maintenant, si vous avez déjà travaillé sur un dictionnaire, il y a des chances qu'il existe dans cette 'top liste' des mots que vous avez déjà rajoutés. Vous pouvez supprimer les formes de mots que vous êtes déjà capable d'analyser en utilisant (par exemple pour l'afrikaans):
$ cat top.liste.20000.txt | apertium-destxt | lt-proc af-en.automorf.bin | apertium-retxt | grep '/\*' > mots_a_rajouter.txt
(ici lt-proc af-en.automorf.bin
va analyser le flux d'entrée des mots afrikaans et mettre un astérisque * sur ceux il ne reconnaît pas)
Pour chaque 10 words environ que vous rajoutez, ça vaut probablement la peine de recommencer cette étape, tout particulièrement pour les langues fortement infléchies — comme un lemme peur produire plusieurs formes de mots, et que la liste de mots n'est pas "lemmatisée".
Récupérer des entrées de dictionnaires bilingues à peu de frais[edit]
Une manière économique de récupérer des entrées de dictionnaires bilingues pour une paire de langues se fait comme suit :
D'abord, saisissez vous-même une liste de noms dans la lange x; par exemple, récupérez les du dictionnaire Apertium que vous utilisez :
$ cat <monolingual dictionary> | grep '<i>' | grep '__n\"' | awk -F'"' '{print $2}'
Ensuite, écrivez un script basique, du genre :
#!/bin/sh # traduction depuis LANGF=$2 # traduction vers LANGT=$3 # nom du fichier contenant la liste des mots LIST=$1 for LWORD in `cat $LIST`; do TEXT=`wget -q http://$LANGF.wikipedia.org/wiki/$LWORD -O - | grep 'interwiki-'$LANGT`; if [ $? -eq '0' ]; then RWORD=`echo $TEXT | cut -f4 -d'"' | cut -f5 -d'/' | python -c 'import urllib, sys; print urllib.unquote(sys.stdin.read());' | sed 's/(\w*)//g'`; echo '<e><p><l>'$LWORD'<s n="n"/></l><r>'$RWORD'<s n="n"/></r></p></e>'; fi; sleep 8; done
Note : Le "sleep 8" est pour éviter de mettre une pression excessive sur les serveurs Wikimedia.
Si vous sauvez ceci dans iw-word.sh
, vous pouvez alors utiliser la ligne de commandes :
$ sh iw-word.sh <liste_de_mots> <code_langue_origine> <code_langue_destination>
Par exemple, pour récupérer une liste de mots bilingue de l'anglais à l'afrikaans, utilisez :
$ sh iw-word.sh en-af.wordlist en af
La méthode est de fiabilité variable. Les rapports avec entre 70% et 80% de précision sont habituels. C'est meilleur pour les termes non ambigus, mais ça fonctionne lorsque les termes gardent de l'ambiguïté entre les langues.
Chaque correspondance produite par cette méthode doit être testée par des locuteurs natifs ou expérimentés de la paire de langues en question.
Dictionnaire unilingue[edit]
Voir aussi Dictionnaire unilingue
Si la langue sur laquelle vous travaillez est assez régulière, et que l'inflection des noms est assez facile (par exemple le français, l'anglais ou l'afrikaans), alors le script suivant peut être utile :
Vous aurez besoin d'une grande liste de mots (de toutes les formes, pas seulement des lemmes) et de quelques paradigmes existants. Ça fonctionne en prenant d'abord toutes les formes au singulier de la liste, puis en cherchant les formes au pluriel, puis en affichant celles qui ont à la fois une forme au singulier et une forme au pluriel dans le format Apertium.
Note: Cela aura besoin d'être testé, puisqu'aucune langue à part l'espéranto est parfaitement régulière.
# mettre ici l'emplacement de votre liste de mots WORDLIST=/home/spectre/corpora/afrikaans-meester-utf8.txt # mettre le paradigme, et les terminaisons singulier et pluriel. PARADIGM=sa/ak__n SINGULAR=aak PLURAL=ake # mettre le nombre de caractères qui doivent être conservés dans la forme au singulier. # ex : [0:-1] signifie 'supprimez une caractère', [0:-2] signifie 'supprimez deux caractères' etc. ECHAR=`echo -n $SINGULAR | python -c 'import sys; print sys.stdin.read().decode("utf8")[0:-1];' PLURALS=`cat $WORDLIST | grep $PLURAL$` SINGULARS=`cat $WORDLIST | grep $SINGULAR$` CROSSOVER="" for word in $PLURALS; do SFORM=`echo $word | sed "s/$PLURAL/$SINGULAR/g"` cat $WORDLIST | grep ^$SFORM$ > /dev/null # si la forme est trouvée alors l'ajouter à la liste if [ $? -eq 0 ]; then CROSSOVER=$CROSSOVER" "$SFORM fi done # afficher la liste for pair in $CROSSOVER; do echo ' <e lm="'$pair'"><i>'`echo $pair | sed "s/$SINGULAR/$ECHAR/g"`'</i><par n="'$PARADIGM'"/></e>'; done
Voir aussi[edit]
- Crossdics : Génération d'une paire de langue à partir de 2 autres
- Récupération de dictionnaires bilingues depuis OmegaWiki
Lectures complémentaires[edit]
- Mark Pagel, Quentin D. Atkinson & Andrew Meade (2007) "fréquence of word-use predicts rates of lexical evolution throughout Indo-European history". Nature 449, 665
- "A travers 200 significations, les mots fréquemment utilisés évoluent lentement et les mots peu utilisés évoluent plus vite. Cette relation est valable séparément et de manière identique dans les parties de discours pour chacune des quatre langues du corpus, et compte pour approximativement 50% de la variation historique des taux de remplacement lexicaux. Nous proposons que le fréquence avec lequel des mots spécifiques sont employés dans la langue de tous les jours exerce une influence générale et semblable à une loi sur leur taux d'évolution."