Test de corpus
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[edit]
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[edit]
Installation et invocation[edit]
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[edit]
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[edit]
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[edit]
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[edit]
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[edit]
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.