•  untoreh-light

MTR: traduceri multiple

servicii de traducere pentru uz intern

Când publicați un site web, vă recomandăm să oferiți diferite traduceri. Unora oamenilor nu le plac traducătorii automatizați, cred că o traducere automată este suficient de bună și mai bună decât nimic, iar traducătorii automatizați s-au îmbunătățit progresiv odată cu progresele în NLP și ML.

Serviciile comune de traducere sunt google, bing, yandex. Acestea oferă un nivel gratuit pe care dorim să îl înfășurăm pentru propria noastră utilizare personală. Există, de asemenea, alte mai puțin cunoscute servicii de traducere , iar unele dintre ele sunt închise la momentul scrierii ...

Text în cache

Dacă vrem să ascundem în cache traducerile, trebuie să împărțim textul solicitat în șiruri mai mici, astfel încât acestea să fie suficient de mici pentru a oferi accesări pentru posibile cereri viitoare. The compromis este că traducerea propozițiilor mai mici are mai puțin context, ceea ce scade calitatea traducerii.

Cum împărțim textul primit astfel încât să putem reconstrui originalul din textul tradus este destul de un truc ... sau un hack. Vrem să găsim un șir destul de ciudat încât serviciul de traducere să-l părăsească așa cum este în rezultatul său. Am găsit variante ale caracter de paragraf să lucrez de cele mai multe ori

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

Theglue șirul este folosit pentru a concatena toate șirurile (despărțite de cererea inițială) în unu corp unic pentru solicitarea de traducere din amonte către care trimitem de ex. Google. ThesplitGlue este folosit în schimb pentru a împărți traducerea primită în șirurile pe care le vom memora în cache. Vedem aici că divizarea șirurilor nu este utilă doar pentru cache, ci pentru reduceți numărul de solicitări, deoarece în cazul în care solicitarea noastră din aval efectuează numeroase interogări mici, folosim utilajele noastre pentru a îmbina cererile până la dimensiunea maximă a sarcinii utile permise de serviciul din amonte.

Interfața

Pentru a sprijini mai multe servicii transparent Am scris o interfață care s-a așezat pe acest API

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

Deci, un serviciu care trebuie să fie operațional trebuie să ofere o funcție de traducere, cum să traducă cererile și să ofere lista limbilor acceptate. Cu lista de limbi acceptate putem crea o matrice astfel încât să știm câte servicii acceptă o anumită pereche de limbi, pentru analiza perechi lingvistice convertim reprezentarea returnată de serviciu într-o comunăiso639-1.

Crearea instanței de traducere permite, de asemenea, configurarea opțiunilor de solicitare utilizate deGuzzle client, astfel încât să putem folosi, de exemplu, proxy-uri pentru a efectua cererile. Serviciile sunt în cache după ce a fost generat prima dată, acest lucru este util, deoarece unele servicii necesită generarea unor jetoane inițiale și nu vrem să le regenerăm de fiecare dată.

Versiunea Go

Am scris și un versiune în golang. Versiunea PHP ar fi utilizată importând-o în proiectul dvs. PHP, în timp ce versiunea go funcționează ca un serviciu (micro) independent. Versiunea go este mult mai detaliată, deoarece necesită o verificare strictă a tipului și, din moment ce acceptăm interogarea mai multor șiruri simultan, trebuie să expunem api care funcționează cu diferite combinații de intrare, iar lipsa de generice go face ca implementarea să fie foarte dureroasă, dar a oferit procesare simultană și, în general, a fost mult mai rapidă.

Curățarea intrărilor

Împreună cu traducerea am construit și un serviciu către curățați html . Lista albă a unor etichete html și le eliminăm pe restul. De asemenea, eliminăm punctuația duplicat asemănătoare spamului și atributele html necunoscute și înfășurăm linkuri în etichete de ancorare adecvate.

Găzduit automat:

Concluzii

În zilele noastre cred că aș folosi doar o soluție găzduită de sine, furnizată fie de joshua, fie de argos, deoarece nu urmăresc cea mai bună traducere, vreau să ofer o traducere lizibilă pentru un site web, astfel încât să poată fi navigat fără frecare.

Post Tag-uri: