Como montar un servizo de tradución automática con Opentrad/Apertium
Índice
Licenza
Esta obra é libre e está sometida ás condicións dunha Licenza Creative Commons Recoñecemento-NonComercial-CompartirIgual 2.5 España. Pode redistribuír, copiar e reutilizar este manual sempre que dea crédito aos seus autores, sexa con fins non comerciais e inclúa esta mesma licenza nas obras derivadas. Para unha copia completa da licenza visitar: http://creativecommons.org/licenses/by-nc-sa/2.5/es/deed.gl
Este manual foi elaborado por mancomun.org – Iniciativa galega polo Software Libre para a Dirección Xeral de Promoción Industrial e da Sociedade da Información da Consellaría de Innovación e Industria. A publicación deste manual correspóndese coas iniciativas IeCA-LA1-I3 Apoio á adopción de software libre na sociedade galega e CES-LA2-I4 Acceso libre aos contidos de orixe pública, do Plano Estratéxico Galego da Sociedade da Información (PEGSI).
Introdución
Este é un pequeno manual para montar un servizo de tradución en liña automática co software Apertium nun servidor, que nos posibilitará poder ofrecer traducións automáticas dos nosos contidos a distintos idiomas (galego, español, portugués, catalán, inglés, ...) tal e como se fai na web de Mancomun.org a través da ligazón “Castelán automático”.
Dicir que a instalación do motor de tradución non sería imprescindible si optamos por usar o servizo que ofrece http://www.opentrad.org. O problema de usar este servizo é que dependemos dun servidor externo para facer a tradución.
Este documento tamén contempla as modificacións feitas ao CMS Joomla! (empregado en Mancomun.org) para poder dispoñer deste servizo.
Requirimentos
- Apertium: Instalación do motor de tradución “apertium”, “lttoolbox” e “apertium-gl-es”. Este último paquete de Apertium é o que nos permite a tradución desde galego a español e viceversa. Para outras traducións hai que instalar o paquete correspondente aos idiomas desexados. Por exemplo para traducir de español a catalán ou de catalán a español habería que instalar tamén o “apertium-es-ca”.
- Modificar a web ou CMS para que acepte as peticións cunha variable, para definir se hai que traducir a web. En Mancomun.org fixemos unhas modificacións ao Joomla! e creamos un conxunto de scripts que fan a petición ao servidor de tradución se existe determinada variable. Ofrecésense aquí, os scripts que usamos en Mancomun.org que subiremos a Forxa de Mancomun.org en breve. Están pensados para usar co CMS Joomla! pero pódense modificar facilmente para adaptalos a calquera portal web.
Instalación dos paquetes
- Instalar “lttoolbox”: Para iso descomprimimos o ficheiro .tar.gz. Entramos no cartafol creado e executamos “configure”. Arranxamos os problemas detectados se fose necesario. Despois executaremos “make” e finalmente “sudo make install”.
- Instalar “apertium”: Seguir os mesmos pasos que para o “lttoolbox”.
- Instalar unha base de datos de tradución: Imos instalar “apertium-es-gl” para traducir de galego-español e viceversa. Ao igual que os anteriores, descomprimiremos o ficheiro .tar.gz e executaremos “configure”, “make” e “sudo make install”.
Unha vez teñamos instalados estes paquetes teremos unha aplicación que nos permitirá facer as traducións. Esta instalación tamén nos permitirá instalar no noso servidor o servizo Traducíndote.
Traballar con Apertium
Tamén na páxina de Apertium en SourceForge está dispoñible a documentación do software. Nesta documentación podemos atopar información moi interesante do funcionamento interno e especificacións da aplicación para así poder por exemplo, incluír palabras que non tivera contempladas.
Para saber todos os parámetros ou opcións de uso de Apertium executamos: “apertium”
Un exemplo de como traducir un ficheiro odt (tamén admite html, txt e rtf) de galego a castelán, e que no documento resultante resalte as palabras descoñecidas, sería o seguinte:
cat /ruta/documento_gl.odt | apertium -d /usr/local/share/apertium -f odt gl-es >> /ruta/documento_es.odt
A ruta do exemplo /usr/local/share/apertium
é a ruta onde se instala o paquete coa base de datos de tradución. Esta é a ruta por defecto nun sistema (Ubuntu), en outros sistemas pode variar.
Integración con Joomla!
Antes de explicar a integración co CMS Joomla! Pasaremos a explicar brevemente como funciona o servizo actual de Mancomun.org para facernos unha idea do que temos que implementar.
Como funciona
Para usar o servizo de tradución automático da web de Mancomun.org basta premer no texto “Castelán automático” arriba de todo da web e procederase a mostrar unha páxina coa tradución automática do contido actual. Isto faise enviando a URL actual da web cunha variable nova (a definir por nós) que NON pode ser usada no CMS para nada máis. Cando esa variable existe, o servidor fai a petición non ao propio xestor de contidos, senón ao servizo de tradución enviándolle a URL que se quere traducir (canda esa URL tamén se envían as variables que indican o sentido da tradución, como gl-es e outras como se ten que marcar as palabras descoñecidas cun asterisco). O servizo de tradución enviará a páxina traducida de volta e teremos que mostrala en vez da actual. O servizo de Mancomun.org ten implementada unha cache que evita que se a páxina xa foi traducida nos últimos 10 minutos (pódese definir nos scripts que van na sección (Códigos de exemplo) se volva a traducir.
Tradución automática en Mancomun.org
Os scripts usados en Mancomun.org son os seguintes (incluídos na sección Códigos de exemplo):
Para usar o servizo, hai que modificar o ficheiro index.php do “template” que esteamos a usar na nosa web baseada en Joomla, para que redirixa a petición da páxina coa variable de tradución (no noso caso “trad”) aos nosos scripts de tradución.
Para isto, inserimos as seguintes liñas ao comezo do devandito ficheiro:
if ($_GET['trad']=='si') { $ruta=urlencode($_SERVER["HTTP_REFERER"]); header("Location: es/index.php?url=".$ruta); exit; }
Con estas liñas estamos facemos que o xestor de contidos Joomla non procese esta petición e si a procesen os nosos scripts de tradución.
Isto mesmo pódese implantar en calquera xestor de contidos ou web.
Códigos de exemplo
index.php
<?php #Creado por Frco. Javier Rial Rodríguez para Mancomun.org – Iniciativa Galega polo Software Libre #Scripts que permiten a tradución automática dunha url a distintos idiomas #Data: 16-11-2007 #Versión: 1.1 #Copyright © <16-11-2007> <Frco. Javier Rial Rodríguez fjrial@gmail.com> #Este é un programa de software libre e, xa que logo, vostede pode #redistribuílo e/ou modificalo consonte os termos establecidos na licenza #pública xeral de GNU segundo a súa publicación pola Free Software Foundation. #Pode escoller a versión 2 da licenza ou, se prefire, calquera outra versión #posterior. # #Este programa distribúese coa esperanza de que resulte útil, se ben NON TEN #NINGUNHA GARANTÍA, nin sequera a garantía implícita de COMERCIABILIDADE ou #IDONEIDADE PARA UN DETERMINADO FIN. Para obter información máis detallada #pode consultar a licenza pública xeral de GNU. //comproba que a páxina que imos traducir a través do noso servidor // sexa unha páxina do noso servidor if (!(strstr ($_GET["url"],"URL DA TÚA WEB"))) { header ("Location:".$_GET["url"]); exit; } //se a variable que usamos para traducir (trad) é igual a “non” volvemos //ao raíz da nosa web se traducir if ($_GET["trad"]=="non") { header ("Location:".$_GET["url"]); exit; } // Configuracións $cachedir = ''; // Directorio onde gardar as páxinas cacheadas $cachetime = 600; // Segundos durante os cales a páxina da cache é válida $cacheext = 'html'; // Extensión a dar ás páxinas de cache // Array con elementos a ignorar na tradución si se necesita. $ignore_list = array(); // cachear a páxina //$page debe ser igual á URL do noso servidor Apertium que devolve a páxina traducida que queremos //como alternativa podemos usar o servidor da páxina oficial de //Opentrad: www.opentrad.org $page = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $cachefile = $cachedir . md5($page) . '.' . $cacheext; //comprobación de páxinas a ignorar $ignore_page = false; for ($i = 0; $i < count($ignore_list); $i++) { $ignore_page = (strpos($page, $ignore_list[$i]) !== false) ? true : $ignore_page; } $cachefile_created = ((@file_exists($cachefile)) and ($ignore_page === false)) ? @filemtime($cachefile) : 0; @clearstatcache(); // Amosar a páxina da cache se aínda é válida if (time() - $cachetime < $cachefile_created) { ob_start('ob_gzhandler'); @readfile($cachefile); ob_end_flush(); exit(); } // se chegamos aquí necesitamos xerar a páxina para gardar na cache ob_start(); echo file_get_contents($page); //escribimos a páxina traducida no ficheiro cache include ('end_caching.php'); //continuamos o proceso no seguinte ficheiro ?>
end_caching.php
<?php #Creado por Frco. Javier Rial Rodríguez para Mancomun.org – Iniciativa Galega polo Software Libre #Scripts que permiten a tradución automática dunha url a distintos idiomas #Data: 16-11-2007 #Versión: 1.1 #Copyright © <16-11-2007> <Frco. Javier Rial Rodríguez fjrial@gmail.com> #Este é un programa de software libre e, xa que logo, vostede pode #redistribuílo e/ou modificalo consonte os termos establecidos na licenza #pública xeral de GNU segundo a súa publicación pola Free Software Foundation. #Pode escoller a versión 2 da licenza ou, se prefire, calquera outra versión #posterior. # #Este programa distribúese coa esperanza de que resulte útil, se ben NON TEN #NINGUNHA GARANTÍA, nin sequera a garantía implícita de COMERCIABILIDADE ou #IDONEIDADE PARA UN DETERMINADO FIN. Para obter información máis detallada #pode consultar a licenza pública xeral de GNU. //abrir o ficheiro de cache en modo escritura $fp = @fopen($cachefile, 'w'); //neste punto poderíase engadir texto ao ficheiro caché que se xenerará //ter en conta de engadilo en formato HTML. $saída=ob_get_contents(); // volver a escribir todo no ficheiro de saída. @fwrite($fp, $saída); @fclose($fp); ob_end_clean(); // ob_end_flush(); //imprimir a saída por pantalla echo $saída; ?>