•  untoreh-light

MTR: múltiples traducciones

envoltura de servicios de traducción para uso interno

Al publicar un sitio web, es posible que desee ofrecer diferentes traducciones. A algunas personas no les gustan los traductores automáticos, creo que una traducción automática es lo suficientemente buena y mejor que nada, y los traductores automáticos han mejorado progresivamente con los avances en PNL y ML.

Los servicios de traducción habituales son google, bing, yandex. Estos ofrecen un nivel gratuito que queremos envolver para nuestro uso personal. También hay otros menos conocidos servicios de traducción , y algunos de ellos están cerrados al momento de escribir este artículo ...

Almacenamiento de texto en caché

Si queremos almacenar en caché las traducciones, necesitamos dividir el texto solicitado en cadenas más pequeñas de modo que sean lo suficientemente pequeñas como para proporcionar visitas para posibles solicitudes futuras. los compensación es que la traducción de oraciones más pequeñas tiene menos contexto, lo que reduce la calidad de la traducción.

Cómo dividir el texto entrante de manera que podamos reconstruir el original a partir del texto traducido es todo un truco ... o un truco. Queremos encontrar una cadena lo suficientemente extraña como para que el servicio de traducción la deje como están las cosas en su salida. He encontrado variaciones de la carácter de párrafo para trabajar la mayoría de las veces

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

losglue la cadena se usa para concatenar todos las cadenas (divididas de la solicitud original) en uno cuerpo único para la solicitud de traducción ascendente que estamos enviando, p. ej. Google. lossplitGlue en cambio, se usa para dividir la traducción recibida en las cadenas que vamos a almacenar en caché. Vemos aquí que la división de cadenas no solo es útil para el almacenamiento en caché, sino para reducir la cantidad de solicitudes , porque en caso de que nuestra solicitud descendente realice muchas consultas pequeñas, usamos nuestra maquinaria para fusionar solicitudes hasta el tamaño máximo de carga útil permitido por el servicio ascendente.

La interfaz

Para soportar múltiples servicios transparentemente Escribí una interfaz que se basó en esta api

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

Por lo tanto, para que un servicio sea operativo debe ofrecer una función de traducción, cómo traducir solicitudes y proporcionar la lista de idiomas admitidos. Con la lista de idiomas admitidos, podemos crear una matriz de modo que sepamos cuántos servicios admiten un par de idiomas específico, para analizar el pares de idiomas convertimos la representación devuelta por el servicio a un comúniso639-1.

La creación de la instancia de traducción también permite configurar las opciones de solicitudes utilizadas porGuzzle instancia de cliente de modo que podamos, por ejemplo, usar proxies para realizar las solicitudes. Los servicios son en caché después de ser generado por primera vez, esto es útil ya que algunos servicios requieren generar algunos tokens iniciales, y no queremos volver a generarlos cada vez.

La versión Go

También escribí un versión en golang . La versión de PHP se usaría importándola en su proyecto PHP, mientras que la versión go funciona como un (micro) servicio independiente. La versión go es mucho más detallada, ya que requiere una verificación de tipo estricta y, dado que admitimos la consulta de varias cadenas a la vez, tenemos que exponer una API que funcione con diferentes combinaciones de entrada, y la falta de genéricos go hace que la implementación sea muy dolorosa, pero ofreció procesamiento concurrente, y fue mucho más rápido en general.

Entradas de limpieza

Junto con la traducción también construí un servicio para limpiar html . Incluimos en la lista blanca algunas etiquetas html y descartamos el resto. También eliminamos la puntuación duplicada similar al spam y los atributos html desconocidos, y ajustamos los enlaces en las etiquetas de anclaje adecuadas.

Auto alojado:

Conclusiones

Hoy en día, creo que solo usaría una solución autohospedada, proporcionada por joshua o argos, ya que no busco la mejor traducción, quiero ofrecer una traducción legible para un sitio web, de modo que se pueda navegar sin fricciones.

Etiquetas de publicación: