Dominique Meeùs
Dernière modification le   
retour à la table des matières — à l’index — à ma page de départ

awk

awk lit les fichiers en considérant chaque ligne comme un enregistrement constitué de champs (pensez à un fichier CSV). Il permet de manipuler ces champs.

Début juillet 2013, je me suis demandé comment transformer des phrases de deux langues mises côte à côte en format CSV (« corpus parallèle », « traduction juxtalinéaire ») en une mémoire de traduction au format TMX. J’ai trouvé qu’awk était l’outil idéal et j’ai écrit mon premier exercice en awk :

# csv2tmx.awk, version 1, July 6, 2013
# (rev. 1.01, July 10, 2013: scrlang (typo!) → srclang ; xml:id → tuid ; xml:lang → lang)
# Dominique Meeùs, dominique[by]d-meeus.be, http://www.d-meeus.be
# This is my first try at awk —other people could improve the style
#
# awk script to transform a CSV parallel bilingual corpus into a TMX
#
# Mind the fact (variable FS hereunder) that my CSV is rather a ❦SV
# Using: awk -f csv2tmx.awk  myparallelcorpus.csv > file.tmx
#
# for TMX 1.4b Specification, see http://www.gala-global.org/oscarStandards/tmx/tmx14b.html

BEGIN {
xmldecl="<?xml version=\"1.0\" ?>"
tmxtag="<tmx version=\"1.4\">" # change tmx version number as needed
# … but mind the fact that 1.0 uses lang attribute on tuv, instead of the more modern xml:lang
header="  <header\n    creationtool=\"csv2tmx.awk\"\n    creationtoolversion=\"1\"\n    segtype=\"sentence\"\n    o-tmf=\"csv\"\n    adminlang=\"fr-BE\"\n    srclang=\"nl-BE\"\n    datatype=\"plaintext\">\n  </header>"
bodytag="  <body>"
print xmldecl
print tmxtag
print header
print bodytag

idprefix="mytailor" # set here what you want as prefix for the identities of text units
# variable aa begins the translation unit up to the xml identity
aa="    <tu tuid=\""
# variable a continues the translation unit up to the content of the source language segment
a="\">\n      <tuv xml:lang=\"nl-BE\">\n        <seg>" # change the langage value as needed
# variable b closes the source language segment and opens the target language segment
b="</seg>\n      </tuv>\n      <tuv xml:lang=\"fr-BE\">\n        <seg>" # change the language value as needed
# variable b closes the translation unit
c="</seg>\n      </tuv>\n    </tu>\n"

FS="❦" # I use a separator not likely to be found in the corpus —use your own
OFS="" # I want print to concatenate without space
}

{ print aa,idprefix,NR,a,$1,b,$2,c }

END {
bodyendtag="  </body>"
tmxendtag="</tmx>"
print bodyendtag
print tmxendtag}

Vous pouvez copier ce code dans un fichier nommé csv2tmx.awk, mais il vaut mieux télécharger mon original de csv2tmx.awk que j’aurais pu améliorer sans penser à mettre à jour le code recopié ci-dessus. La commande
awk -f csv2tmx.awk myparallelcorpus.csv > file.tmx transforme votre corpus parallèle en mémoire de traduction. Attention que pour des raisons évidentes, je n’utilise pas la virgule comme séparateur dans mon CSV. Voyez le contenu de la variable FS dans le code ci-dessus. Ou bien vous adoptez ce séparateur, ou bien vous modifiez le code.

Dominique Meeùs . Date: 2011… 2017