Difference between revisions of "Test de corpus"
(correction liens) |
(réactualisation page) |
||
Line 7: | Line 7: | ||
pour avoir une idée sur ce à quoi ça devrait ressembler: |
pour avoir une idée sur ce à quoi ça devrait ressembler: |
||
* |
* Utilisez <code>grep</code> to pour supprimer toutes les lignes de corpus d'origine contenant <code>#</code> et <code>@</code> puisque ces symboles sont utilisés dans Apertium pour marquer les erreurs dans le dictionnaire bilingue et le transfert. |
||
** ex : <code>grep -v '[@#]' corpus-origine > corpus-propre</code> |
|||
* Rajouter avant/après (?) le grep le tube <code>nl -s</code> '. ' pour avoir les bons numéros de ligne. |
|||
* Utilisez la commande <code>nl</code> ou <code>nl -s '. '</code> pour numéroter les lignes dans le corpus. |
|||
<u>Note du traducteur :</u> Ce morceau est peu clair, mais les instructions suivantes devraient faire l'affaire sur un ordinateur fonctionnant sous Linux : |
|||
** ex : <code>nl corpus-propre > corpus-propre-numéroté</code> |
|||
== Script testcorpus == |
|||
fgrep -n "#" ''monodix'' |
|||
fgrep -n "@" ''bidix'' |
|||
== Installation et invocation == |
=== Installation et invocation === |
||
Copiez le fichier <code>testcorpus_en-eo.sh</code> de la paire apertium-eo-en et changez son nom. |
Copiez le fichier <code>testcorpus_en-eo.sh</code> de la paire apertium-eo-en et changez son nom. |
||
Line 21: | Line 21: | ||
Pour commencer, tapez <code>bash regression-tests.sh</code> depuis une fenêtre ou un terminal UNIX. |
Pour commencer, tapez <code>bash regression-tests.sh</code> depuis une fenêtre ou un terminal UNIX. |
||
== Sortie == |
=== Sortie === |
||
Des lignes contenant @ et # (indiquant un problème de .dix, dont beaucoup pourraient également être trouvés par la méthode de [[test de vocabulaire]]) seront affichées. |
Des lignes contenant @ et # (indiquant un problème de .dix, dont beaucoup pourraient également être trouvés par la méthode de [[test de vocabulaire]]) seront affichées. |
||
Line 39: | Line 39: | ||
</pre> |
</pre> |
||
== |
== Simple diff sur des corpus == |
||
Vous n'avez pas forcément besoin d'un script. Tapez juste : |
Vous n'avez pas forcément besoin d'un script. Tapez juste : |
||
Line 45: | Line 45: | ||
make && cat corpa/en.crp.txt | apertium -d . en-eo > traduction_origine.txt |
make && cat corpa/en.crp.txt | apertium -d . en-eo > traduction_origine.txt |
||
pour faire la 'traduction originale'. Ensuite modifiez vos . |
pour faire la 'traduction originale'. Ensuite modifiez vos .dix, et lancez : |
||
make && cat corpa/en.crp.txt | apertium -d . en-eo > traduction_nouvelle.txt & |
make && cat corpa/en.crp.txt | apertium -d . en-eo > traduction_nouvelle.txt & |
||
Line 54: | Line 54: | ||
diff -w traduction_origine.txt traduction_nouvelle.txt | grep -r '[<>]' > /tmp/crpdiff.txt && |
diff -w traduction_origine.txt traduction_nouvelle.txt | grep -r '[<>]' > /tmp/crpdiff.txt && |
||
for i in `cut -c3-8 /tmp/crpdiff.txt | sort -un`; do |
for i in `cut -c3-8 /tmp/crpdiff.txt | sort -un`; do |
||
echo --- $i ---; grep -r |
echo --- $i ---; grep -r "^ *$i\." corpa/en.crp.txt; grep -r "^. *$i\." /tmp/crpdiff.txt; |
||
done | less |
done | less |
||
</pre> |
</pre> |
||
La première commande crée un simple diff, tandis que la boucle for va à chaque changement, et essaie de faire correspondre la ligne du corpus d'origine avec la ligne qui comporte le changement. |
|||
== Pour aller au delà : word diffs == |
|||
[http://os.ghalkes.nl/dwdiff.html dwdiff] (<code>sudo apt-get install dwdiff</code> sur Ubuntu, <code>sudo pacman -S dwdiff</code> sur Arch Linux) est un programme qui utilise les entrées de diff et trouve les changements de mots. Donc au lieu de |
|||
<pre> |
|||
1c1 |
|||
< Fruit flies enjoy a banana |
|||
--- |
|||
> Fruit flies like a banana |
|||
</pre> |
|||
vous obtenez |
|||
<pre> |
|||
Fruit flies [-enjoy-] {+like+} a banana |
|||
</pre> |
|||
Couplé avec une sortie en couleur (l'option -c, disponible sur les nouvelles versions), les grosse différences de corpus deviennent beaucoup plus lisibles. |
|||
S'il n'y a pas beaucoup de modifications, dwdiff continuera de lui même d'afficher les lignes inchangées. Comme il peut lire la sortie d'un diff dans le format "diff unifié", une des meilleures façons d'utiliser dwdiff dans ce cas est : |
|||
<pre> |
|||
$ diff -U1 traduction_origine.txt traduction_nouvelle.txt | dwdiff -c --diff-input |
|||
</pre> |
|||
Le <code>-U1</code> donne une sortie diff unifiée avec seulement une ligne de contexte avant et après le changement (essayez -U0, -U10, etc), alors que le <code>-c</code> vous assure d'avoir de belles couleurs, et <code>--diff-input</code> permet à dwdiff de lire depuis stdin plutôt que d'avoir besoin de 2 fichiers<ref>J'utilise ceci [https://gist.github.com/1564485 wrapper] qui positionne -c par défaut si affichage sur un terminal, et positionne --diff-input automatiquement si on lit un tube</ref>. |
|||
== Voir la forêt dans tous les arbres == |
|||
La commande qui suit vous donnera un hit-parade (liste de fréquences) sur les changements de mots dans la sortie de traduction : |
|||
<pre> |
|||
$ diff -U0 traduction_origine.txt traduction_nouvelle.txt | dwdiff --diff-input | grep -v '^@' |sed 's/.*\[-//' | sed 's/+}.*//' | sort | uniq -c | sort -n |
|||
</pre> |
|||
Ainsi vous pouvez commencer avec les changements très fréquents en premier. |
|||
== Script d'aide : comparer pendant la traduction == |
|||
Quand vous exécutez deux traductions de corpus en tâche de fond, vous voulez souvent les comparer pendant la traduction. Toutefois, vous obtiendrez un paquet de lignes supplémentaires à la fin de votre diff de la tache de traduction qui est allé le plus loin. Sauvez le script qui suit dans un fichier pour obtenir une différence limitée au plus petit des fichiers : |
|||
<pre> |
|||
#!/bin/bash |
|||
if [ $# -lt 2 ]; then echo "Utilisation : $0 fichier1 fichier2 [options additionnelles de diff]"; fi |
|||
M=$(calc 'min(' $(wc -l < "$1") ', ' $(wc -l < "$2") ')') |
|||
# ${@:3} signifie tous les arguments après le premier et le second |
|||
diff ${@:3} <(head -n$M "$1") <(head -n$M "$2") |
|||
</pre> |
|||
Appelez-le "mindiff" ou quelque-chose comme ça, et vous pourrez continuer en faisant |
|||
<code>mindiff traduction_origine.txt traduction_nouvelle.txt | tail</code> |
|||
pour chercher les nouvelles différences quand elles apparaîtront. Sinon vous pouvez faire |
|||
<pre>mindiff traduction_origine.txt traduction_nouvelle.txt -U0 | tail | dwdiff --diff-input</pre> |
|||
comme montré plus haut. |
|||
== Notes == |
|||
<references/> |
|||
[[Category:Development]] |
[[Category:Development]] |
Revision as of 16:49, 1 May 2012
Le test de corpus consiste à tester (par traduction) tout un corpus et à comparer le résultat à celui de la dernière fois que le corpus a été traduit. C'est très utile si vous voulez changer une règle ou un mot et obtenir une vue d'ensemble des conséquences sur le texte réel. Avec les tests de vocabulaire et les tests de régression c'est une bonne manière de vérifier que votre traducteur fonctionne, et que vos modifications ont rien de cassé.
Contents
Création d'un corpus
Avant que vous vous commenciez vous avez d'abord besoin d'un corpus. Regardez dans apertium-eo-en/corpa/enwiki.crp.txt.bz2 ? Lancez
bunzip2 -c enwiki.crp.txt.bz2 > en.crp.txt
pour avoir une idée sur ce à quoi ça devrait ressembler:
- Utilisez
grep
to pour supprimer toutes les lignes de corpus d'origine contenant#
et@
puisque ces symboles sont utilisés dans Apertium pour marquer les erreurs dans le dictionnaire bilingue et le transfert.- ex :
grep -v '[@#]' corpus-origine > corpus-propre
- ex :
- Utilisez la commande
nl
ounl -s '. '
pour numéroter les lignes dans le corpus.- ex :
nl corpus-propre > corpus-propre-numéroté
- ex :
Script testcorpus
Installation et invocation
Copiez le fichier testcorpus_en-eo.sh
de la paire apertium-eo-en et changez son nom.
Pour commencer, tapez bash regression-tests.sh
depuis une fenêtre ou un terminal UNIX.
Sortie
Des lignes contenant @ et # (indiquant un problème de .dix, dont beaucoup pourraient également être trouvés par la méthode de test de vocabulaire) seront affichées.
Mais plus important, dans testcorpus_en-eo.txt il y aura une liste de différences. D'abord un numéro de ligne, puis le texte d'origine, puis < et la traduction de la dernière fois, suivie d'une dernière ligne commençant par > et la traduction de cette fois-ci :
-- 1924 --- 1924. In Japan there is an input system allowing you to type kanji. < 1924. En Japanio estas kontribuaĵan sistemon permesanta vi tajpi *kanji. > 1924. En Japanio estas kontribuaĵa sistemo permesanta vin tajpi *kanji. --- 1937 --- 1937. However, such apparent simplifications can perversely make a script more complicated. < 1937. Tamen, tiaj evidentaj simpligoj povas *perversely fari skribo pli komplika. > 1937. Tamen, tiaj evidentaj simpligoj povas *perversely fari skribon pli komplika.
Simple diff sur des corpus
Vous n'avez pas forcément besoin d'un script. Tapez juste :
make && cat corpa/en.crp.txt | apertium -d . en-eo > traduction_origine.txt
pour faire la 'traduction originale'. Ensuite modifiez vos .dix, et lancez :
make && cat corpa/en.crp.txt | apertium -d . en-eo > traduction_nouvelle.txt &
Le signe & fera tourner le processus en tache de fond. Ça signifie que vous pouvez examiner les différences avant que toutes les phrases soient traduites, avec:
diff -w traduction_origine.txt traduction_nouvelle.txt | grep -r '[<>]' > /tmp/crpdiff.txt && for i in `cut -c3-8 /tmp/crpdiff.txt | sort -un`; do echo --- $i ---; grep -r "^ *$i\." corpa/en.crp.txt; grep -r "^. *$i\." /tmp/crpdiff.txt; done | less
La première commande crée un simple diff, tandis que la boucle for va à chaque changement, et essaie de faire correspondre la ligne du corpus d'origine avec la ligne qui comporte le changement.
Pour aller au delà : word diffs
dwdiff (sudo apt-get install dwdiff
sur Ubuntu, sudo pacman -S dwdiff
sur Arch Linux) est un programme qui utilise les entrées de diff et trouve les changements de mots. Donc au lieu de
1c1 < Fruit flies enjoy a banana --- > Fruit flies like a banana
vous obtenez
Fruit flies [-enjoy-] {+like+} a banana
Couplé avec une sortie en couleur (l'option -c, disponible sur les nouvelles versions), les grosse différences de corpus deviennent beaucoup plus lisibles.
S'il n'y a pas beaucoup de modifications, dwdiff continuera de lui même d'afficher les lignes inchangées. Comme il peut lire la sortie d'un diff dans le format "diff unifié", une des meilleures façons d'utiliser dwdiff dans ce cas est :
$ diff -U1 traduction_origine.txt traduction_nouvelle.txt | dwdiff -c --diff-input
Le -U1
donne une sortie diff unifiée avec seulement une ligne de contexte avant et après le changement (essayez -U0, -U10, etc), alors que le -c
vous assure d'avoir de belles couleurs, et --diff-input
permet à dwdiff de lire depuis stdin plutôt que d'avoir besoin de 2 fichiers[1].
Voir la forêt dans tous les arbres
La commande qui suit vous donnera un hit-parade (liste de fréquences) sur les changements de mots dans la sortie de traduction :
$ diff -U0 traduction_origine.txt traduction_nouvelle.txt | dwdiff --diff-input | grep -v '^@' |sed 's/.*\[-//' | sed 's/+}.*//' | sort | uniq -c | sort -n
Ainsi vous pouvez commencer avec les changements très fréquents en premier.
Script d'aide : comparer pendant la traduction
Quand vous exécutez deux traductions de corpus en tâche de fond, vous voulez souvent les comparer pendant la traduction. Toutefois, vous obtiendrez un paquet de lignes supplémentaires à la fin de votre diff de la tache de traduction qui est allé le plus loin. Sauvez le script qui suit dans un fichier pour obtenir une différence limitée au plus petit des fichiers :
#!/bin/bash if [ $# -lt 2 ]; then echo "Utilisation : $0 fichier1 fichier2 [options additionnelles de diff]"; fi M=$(calc 'min(' $(wc -l < "$1") ', ' $(wc -l < "$2") ')') # ${@:3} signifie tous les arguments après le premier et le second diff ${@:3} <(head -n$M "$1") <(head -n$M "$2")
Appelez-le "mindiff" ou quelque-chose comme ça, et vous pourrez continuer en faisant
mindiff traduction_origine.txt traduction_nouvelle.txt | tail
pour chercher les nouvelles différences quand elles apparaîtront. Sinon vous pouvez faire
mindiff traduction_origine.txt traduction_nouvelle.txt -U0 | tail | dwdiff --diff-input
comme montré plus haut.