Xunta de Galicia
Ferramentas persoais


Powered by MediaWiki

Como montar un servizo de tradución automática con Opentrad/Apertium

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;
 ?>