•  untoreh-lumière

MTR : plusieurs traductions

services de traduction d'emballage à usage interne

Lorsque vous publiez un site Web, vous souhaiterez peut-être proposer différentes traductions. Certaines personnes n'aiment pas les traducteurs automatiques, je pense qu'une traduction automatique est assez bonne, et mieux que rien, et les traducteurs automatiques se sont progressivement améliorés avec les progrès de PNL et ML.

Les services de traduction courants sont google, bing, yandex. Ceux-ci offrent un niveau gratuit que nous souhaitons encapsuler pour notre usage personnel. Il y a aussi d'autres moins connus Services de traduction , et certains d'entre eux sont arrêtés au moment de la rédaction...

Texte de mise en cache

Si nous voulons mettre en cache les traductions, nous devions diviser le texte demandé en chaînes plus petites de manière à ce qu'elles soient suffisamment petites pour fournir des résultats pour d'éventuelles demandes futures. Les troquer est que la traduction de phrases plus petites a moins de contexte, ce qui diminue la qualité de la traduction.

Comment diviser le texte entrant de manière à pouvoir reconstruire l'original à partir du texte traduit est une sacrée astuce... ou un hack. Nous voulons trouver une chaîne suffisamment étrange pour que le service de traduction la laisse tel quel dans sa sortie. J'ai trouvé des variantes du caractère de paragraphe travailler la plupart du temps

$this->misc['glue'] = ' ; ¶ ; ';
$this->misc['splitGlue'] = '/\s?;\s?¶\s?;?\s?/';

Lesglue la chaîne est utilisée pour concaténer tous les chaînes (séparées de la demande d'origine) en une corps unique pour la demande de traduction en amont que nous envoyons, par ex. Google. LessplitGlue est plutôt utilisé pour diviser la traduction reçue dans les chaînes que nous allons mettre en cache. Nous voyons ici que le fractionnement des chaînes n'est pas seulement utile pour la mise en cache, mais pour réduire le nombre de demandes, car dans le cas où notre requête en aval exécute de nombreuses petites requêtes, nous utilisons notre machine pour fusionner les requêtes jusqu'à la taille de charge utile maximale autorisée par le service en amont.

L'interface

Afin de prendre en charge plusieurs services de manière transparente J'ai écrit une interface qui s'est installée sur cette api

function__construct(
    Mtr &$mtr,
    Client &$gz,
    TextReq &$txtrq,
    LanguageCode &$ld);
functiontranslate($source, $target, $input);
functiongenReq(array$params);
functionpreReq(array &$input);
functiongetLangs();

Ainsi, pour être opérationnel, un service doit proposer une fonction de traduction, comment traduire les demandes et fournir la liste des langues prises en charge. Avec la liste des langues prises en charge, nous pouvons créer une matrice telle que nous sachions combien de services prennent en charge une paire de langues spécifique, pour analyser le paires de langues nous convertissons la représentation renvoyée par le service en une représentation communeiso639-1.

La création de l'instance de traduction permet également de configurer les options de requêtes utilisées parGuzzle instance cliente telle que nous pouvons par exemple utiliser des proxys pour effectuer les requêtes. Les prestations sont mis en cache après avoir été généré la première fois, cela est utile car certains services nécessitent de générer des jetons initiaux, et nous ne voulons pas les régénérer à chaque fois.

La version Go

J'ai aussi écrit un version en golang. La version PHP serait utilisée en l'important dans votre projet PHP, tandis que la version go fonctionne comme un (micro) service autonome. La version go est beaucoup plus détaillée car elle nécessite une vérification de type stricte et puisque nous prenons en charge l'interrogation de plusieurs chaînes à la fois, nous devons exposer une API qui fonctionne avec différentes combinaisons d'entrée, et le manque de génériques go rend l'implémentation très pénible, mais elle offrait traitement simultané, et était beaucoup plus rapide en général.

Entrées de nettoyage

Couplé à la traduction, j'ai également construit un service pour nettoyer le html . Nous mettons en liste blanche certaines balises html et rejetons le reste. Nous supprimons également la ponctuation en double de type spam et les attributs html inconnus, et enveloppons les liens dans des balises d'ancrage appropriées.

Auto-hébergé :

Conclusion

De nos jours, je pense que j'utiliserais simplement une solution auto-hébergée, fournie par joshua ou par argos, car je ne vise pas la meilleure traduction, je souhaite offrir une traduction lisible pour un site Web, de sorte qu'il puisse être consulté sans friction.

Mots-clés :