Le but est de créer une mémoire TMX, utilisée par OmegaT, à partir d'un fichier source.txt (chez phlinux des textes en anglais) et de sa traduction obtenue par un traducteur automatique (genre Google) et mise dans un fichier trad.txt.
Paquets hors du commun requis : ssed
Un pack avec 1 script bash et 2 fichiers de règles de sentences utilisés par ssed. Les fichiers source.txt et trad.txt sont placés dans le même répertoire et dans lequel on lance le script (omegat_tmx.sh).
La commande de lancement sera:
omegat_tmx.sh source.txt trad.txt
Le script principal :
#!/bin/bash # Penser à adapter les chemins des fichiers des règles de sentence : ~/.script/sentEN.sed et ~/.script/sentFR.sed source=$1 trad=$2 nom=`sed 1q $source | tr -d " "` # application règles de sentence sur la source + génère fichier ssed -R -f ~/.script/sentEN.sed < $source > /tmp/source sed -i -e '/^$\|^\s$/d' /tmp/source # application règles de sentence sur la trad + génère fichier ssed -R -f ~/.script/sentFR.sed < $trad > /tmp/trad sed -i '/^$/d' /tmp/trad # compte le nombre de lignes nb_source=`awk 'END{print NR}' /tmp/source` nb_trad=`awk 'END{print NR}' /tmp/trad` :> $PWD/omegat_merge_dif.txt echo "sentences de la source : "$nb_source >> $PWD/omegat_merge_dif.txt echo "sentences de la traduction : "$nb_trad >> $PWD/omegat_merge_dif.txt # boucle 1 ext=1 # lecture source ( apparemment inutile) #sentEN=`sed r /tmp/source` # création du fichier tmx mergetmx() { oldifs=$IFS IFS=' ' # création fichier de numération des sentences trad for i in `seq 1 $nb_trad` do echo tab$i="\$(cat /tmp/trad | awk 'NR == "$i" {print}') ; echo \$"tab$i done > /tmp/sent_var.txt while read line; do eval $line; done < /tmp/sent_var.txt > /dev/null # création des balises d'en tête echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" echo "<!DOCTYPE tmx SYSTEM \"tmx11.dtd\">" echo "<tmx version=\"1.1\">" echo "<header creationtool=\"OmegaT\" o-tmf=\"OmegaT TMX\" adminlang=\"EN-US\" datatype=\"plaintext\" creationtoolversion=\"3.1.0\" segtype=\"sentence\" srclang=\"EN-US\"/>" echo "<body>" echo "<!-- Default translations -->" # création des segments for elmt_source in $(cat /tmp/source); do echo "<tu>" echo "<tuv lang=\"EN-US\">" echo "<seg>$elmt_source</seg>" echo "</tuv>" echo "<tuv lang=\"FR-FR\" creationid=\"ph\" creationdate=\"\">" for n in $nb_trad do sentFR="echo \$tab$ext" echo "<seg>`eval $sentFR`</seg>" done echo "</tuv>" echo "</tu>" let "ext+=1" done # création des balises de fin echo "<!-- Alternative translations -->" echo "</body>" echo "</tmx>" IFS=$oldifs } mergetmx > $nom.tmx if [ $nb_source != $nb_trad ]; then echo "Différence du nombre de sentences" echo "source: $nb_source" echo "traduction: $nb_trad" else echo "Source et Traduction correspondent" tail $nom.tmx fi exit
Le fichier des règles de sentence de la source (ici de l'anglais):
#!/bin/sed -f ## utilisé par ssed -R ## Omegat: regex pour texte en anglais s/(?<![A-Z])\.\s/\.\n/g s/\?\s/\?\n/g s/\?’\s/\?’\n/g s/\?"\s/\?"\n/g s/\b\."\s/\."\n/g s/\b\.’\s/\.’\n/g s/\b\.”\s/\.”\n/g s/\b\!’\s/\!’\n/g s/\b\.'\s/\.'\n/g s/\b\.\)\s/\.\)\n/g s/\b\.]\s/\.]\n/g
Le fichier des règles de sentence de la traduction (ici du français):
#!/bin/sed -f ## utilisé par ssed -R ## Omegat: regex pour texte en français s/(?<![A-Z])\.\s/\.\n/g s/\?\s/\?\n/g s/\?'\s/\?'\n/g s/\?"\s/\?"\n/g s/\b\."\s/\."\n/g s/\b\.’\s/\.’\n/g s/\b\!’\s/\!’\n/g s/\b\!'\s/\!'\n/g s/\b\!"\s/\!"\n/g s/\b\.'\s/\.'\n/g s/\b\.\.\.'\s/\.\.\.'\n/g s/\b\.\)\s/\.\)\n/g s/\b\.]\s/\.]\n/g
Pour que la mémoire TMX soit “parfaite” il faudra obtenir le message suivant : Source et Traduction correspondent. Sinon ce sont les nombres de sentences qui seront affichés. Il faudra alors faire des corrections dans les fichiers source.txt et/ou trad.txt, mais aussi peut être dans les règles de sentences (selon les langues utilisées).