====== Création d'une mémoire TMX ====== * Objet : mélanger (merge) une source et sa traduction * Niveau requis : {{tag>débutant avisé}} * Commentaires : //la débrouille sans le web // * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) ===== Introduction ===== 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. ===== Installation ===== Paquets hors du commun requis : ssed ===== Utilisation ===== 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 "" echo "" echo "" echo "
" echo "" echo "" # création des segments for elmt_source in $(cat /tmp/source); do echo "" echo "" echo "$elmt_source" echo "" echo "" for n in $nb_trad do sentFR="echo \$tab$ext" echo "`eval $sentFR`" done echo "" echo "" let "ext+=1" done # création des balises de fin echo "" echo "" echo "" 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/(? 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/(? 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).