Connaissez-vous Deepl ?

Cet article vous a plu ? Pourquoi ne pas le partager ?

Si vous vous intéressez à la traduction de textes par le truchement d’outils informatiques, voici un outil dont il va falloir retenir le nom : Deepl. Cette start-up, dont j’ai entendu le nom pour la première fois il y a près de deux ans, ne cesse de progresser, et va probablement occuper une place importante dans l’univers de la traduction automatisée.

Au commencement étaient des outils plus ou moins compliqués : Systran, Reverso ou Dragon. Conçus pour des usages avant tout professionnels – pensez au marché juteux de la traduction de contrats de plusieurs centaines de pages… – ils ont tous proposé des versions pour le grand public. J’utilise d’ailleurs encore, à titre personnel, Reverso (cf. interview du fondateur de Reverso ici) comme en remplacement du traditionnel dictionnaire français-anglais ou hébreu-français, pas toujours pratique à transporter avec soi.

Google est partout…

Mais pour la traduction de morceaux de texte un peu long, ces outils ne sont pas vraiment adaptés. Jusqu’à il y a quelques mois, j’utilisais Google Translate, outil gratuit, introduit par Google il y a une quinzaine d’années (déjà), et dont l’avantage principal réside dans le nombre de langues supportées : plus d’une centaine, du Swahili au Yiddish en passant par l’Esperanto…

Mais Google Translate, bien que très puissant, n’atteint pas toujours un niveau de qualité exceptionnel. Comme le dit un de mes proches amis, quand on lit un texte traduit avec un tel outil, on se rend compte qu’il y a quelque chose de bizarre, qu’un être humain ne formulerait pas ses phrases de telle façon. On dirait que les outils basés sur l’intelligence artificielle sur lesquels Google Translate s’appuie – tout comme ses concurrents cités plus haut – prend un malin plaisir à s’exprimer … comme une intelligence artificielle. Surtout, ne pas paraître humain, semble être son credo.

C’est alors que ma femme, toujours à l’affût de nouveaux outils, m’a fait découvrir Deepl.

Deepl, mieux que Google

A première vue, je n’étais pas particulièrement séduit, malgré le forcing de mon épouse, convaincue par les arguments que je ne sais quel autre fan de Deepl lui avait présentés. Son interface n’était pas particulièrement plus sophistiquée que celle de Google Translate. Le nombre de langues supportées était, au début, bien plus faible que pour Google Translate : une dizaine, nombre qui atteint désormais une trentaine de langues. Et pour un usage limité à la traduction de quelques mots, je ne voyais pas la différence.

Moins de langues, mais mieux traduites…

Mais il y a un an et demi environ, j’ai utilisé Deepl dans le cadre d’un projet plus complexe, la traduction d’un site professionnel dans trois langues (anglais, allemand, italien). Et je dois avouer que là, certaines différences sont apparues. D’abord la qualité du rendu : s’agissant de textes très techniques (des logiciels scientifiques), l’intelligibilité du texte ne tolérait aucune approximation. Et lors des phases de relecture par des locuteurs des langues cibles – la confiance (dans un outil informatique) n’empêche pas le contrôle (par des humains) – nous n’avions repéré que très peu d’erreurs, et vraiment mineures. Un premier bon point pour Deepl.

Seconde surprise, Deepl sait traiter autre chose que du « texte plat ». Et pour la traduction de textes issus d’un site web, cela peut prendre une forme très sympathique. En l’occurence, lors de copier/coller depuis le texte du site originel en français, il s’agissait de conserver les tags HTML qui permettent de formater le texte : titres de chapitres, listes, texte en gras ou en italique. J’avais des doutes sur la possibilité de conserver ces tags dans la traduction, et là, miracle ! Deepl reconnaît le HTML initial et rend une traduction qui respecte le format de la source, conservant les attributs des mots traduits !

Halte au copier/coller

Ce site a donc entièrement été traduit avec Deepl. Mais de manière un peu laborieuse je dois l’avouer, en effectuant des copier/coller manuels, ce qui peut s’avérer long et fastidieux pour un site faisant plusieurs dizaines de pages, ou pour un texte issus d’un document, type Word ou PDF. Et bien imaginez-vous que les ingénieurs de Deepl ont pensé à cela, et proposent la traduction d’un texte qu’on peut uploader. La version gratuite de Deepl – il faut bien qu’ils gagnent leur vie et paient leurs serveurs – pose une limite à trois documents par mois. Sinon, il faut revenir au mode manuel, avec 5000 caractères maximum par copier/coller…

Et Dieu créa l’API…

Depuis quelques jours, enfin, je m’intéresse à la traduction d’un ouvrage de taille plus imposante, plusieurs centaines de milliers de caractères. Et bien là encore, Deepl s’en sort à merveille. Cette fois-ci, pour ne pas perdre mon temps à faire des copier/coller, j’ai utilisé l’API de Deepl. On peut faire appel à Deepl depuis un programme en Python, en utilisant … la librairie deepl. Il faut au préalable s’être fait référencer et avoir récupéré une clef d’authentification, qui permettra de suivre sa consommation. Deepl pose une limite, là encore bien naturelle : pas plus de 500 000 caractères par mois.

Real Python code inside !

Voici une petit programme Python très simple pour traduire un texte au format Microsoft Word ou PDF avec Deepl. Si vous savez programmer en Python, vous pourrez facilement l’adapter à vos propres besoins.

import deepl
import sys
import os
import magic            # pour déterminer le type de fichier source
from tika import parser # pour decoder un PDF
import docx             # pour decoder un MS Word

auth_key = "--votre clef deepl--"
translator = deepl.Translator(auth_key)

# Create an English to French glossary
entries = {"Josuah": "Josue", "Moses" : "Moise"}
my_glossary = translator.create_glossary(
    "My glossary",
    source_lang="EN",
    target_lang="FR",
    entries=entries,
)

# valeurs par defaut
srclg = "EN"
trglg = "FR"
fname = ""

# on regarde si on a indiqué des langues particulieres (options -srclg -trglg)
args = sys.argv
if len(args) > 2:
    if "-srclg" in args:
        for i in range(0, len(args)-1):
            if args[i] == "-srclg":
                srclg = args[i+1]
                args.pop(i)
                args.pop(i+1)
    if "-trglg" in args:
        for i in range(0, len(args)-1):
            if args[i] == "-trglg":
                trglg = args[i+1]
                args.pop(i)
                args.pop(i+1)

if len(args) > 1:
    fname = args[1]

# oups ! on a oublie de donner un nom de fichier
if fname == "":
    print("il manque le nom du fichier")
    exit(0)
    
# la sortie se fera a l'ecran
print("Translating", fname, "from", srclg, "to", trglg)

# On determine le type de fichier
mm = magic.from_file(fname)
print(mm)

# et on y va
if "ASCII text" in mm or "Unicode text" in mm:
    fichier = open(fname)
    lines = fichier.readlines()
    for line in lines :
        result = translator.translate_text(line,
                                           target_lang=trglg,
                                           source_lang=srclg, glossary=my_glossary)
        print(result.text)

elif "PDF document" in mm:
    raw = parser.from_file(fname)
    safe_text = raw["content"]
    # avec le PDF, faut penser à nettoyer le texte extrait, pas toujours propre...
    safe_text = str(safe_text).replace(" \n", "").replace("\\", "").replace("-\n", "")

    result = translator.translate_text(safe_text,
                                       target_lang=trglg,
                                       source_lang=srclg, glossary=my_glossary)
    print(result.text)
    
elif "Microsoft Word" in mm:
    doc = docx.Document(fname)    
    for p in doc.paragraphs:
        if len(p.text) > 0:
            result = translator.translate_text(p.text,
                                               target_lang=trglg,
                                               source_lang=srclg, glossary=my_glossary)
            print(result.text)

Cet article vous a plu ? Pourquoi ne pas le partager ?