Bienvenid@ webmaster Acceso Directo :
ir al home
Home
Productos y Servicios
Artículos y Secciones
Foros de Discusión
Registro de Usuarios
Usuarios
Canal del Webmaster
Contactos
©2004 Blasten.com
Envía tus Articulos


ArtículoComentariosRecomendarGuardarImprimir
Traductor Ingles - Espa?ol en PHPResaltado
Autor: Juan Ignacio P?rez Sacrist?n

El proyecto
Al programar se aprende con una peque?a base te?rica, que ya la tenemos, y sobretodo jugando y practicando con las herramientas de programaci?n. De modo, que nos planteamos un proyecto relativamente sencillo para ver con m?s claridad como se crea un Servicio Web. Se trata de ofrecer la posibilidad de traducir un texto del Ingl?s al Castellano. Esto ser?a una versi?n muy "light" del Servicio Web que ofrece Babelfish de Altavista.

Hemos escogido PHP como lenguaje de programaci?n porque es una preferencia entre muchos programadores Linux, y adem?s es muy claro e intuitivo. El Servicio Web lo vamos a desarrollar paso a paso, porque requiere varias etapas:

Buscamos un diccionario Ingl?s-Castellano.
Implementamos un traductor de palabras individuales en PHP.
Ampliamos el traductor para procesar textos completos.
Ofrecemos en Internet el Servicio Web de forma elemental.
Ampliamos el servicio, para que funcione bajo XML-RPC.
Buscamos un diccionario Ingl?s-Castellano
Si existiera para Liunx un buen programa traductor, podr?amos usarlo en nuestro desarrollo, invoc?ndolo desde l?nea de comando. Lamentablemente, por mucho que hemos buscado, parece que no hay tales programas a?n para nuestras plataforma favorita. Por lo que tendremos que conformarnos con un simple diccionario y efectuar una traducci?n completamente literal.

Diccionarios s? que podemos encontrar, aunque no muy completos. Aqui (317 Kb) tenemos el diccionario que utiliza wordtrans. Es un diccionario Ingl?s-Castellano. Lo descomprimimos como es habitual con un comando como ?ste: "tar -zxvf i2edict_20010903-2.tar.gz". Obtendremos un fichero llamado i2e.dict. Examinamos la estructura del diccionario:


$more i2e.dict 
A (abbr. for ampere) : A (abrev. de amperio) 
abacterial : abacteriano 
abacus : ?baco 
abaft : a popa 
abaft : en popa 
abaft : hacia popa 
abandoned : abandonado 
abandonee : abandonado 
abandonee : desamparado 
abandonment : abandono 



...Podemos apreciar que la manipulaci?n de este diccionario va a resultar sencilla, ya que es un fichero de texto plano con una estructura muy clara.

Implementamos un traductor de palabras individuales en PHP

Suponiendo que tenemos unos conocimientos b?sicos de PHP, podemos r?pidamente desarrollar un script que carga en una tabla hash las palabras del diccionario Ingl?s => Castellano:


#!/usr/local/bin/php -q 

<? 
    
// Se lee el fichero del diccionario 
    
$filename "i2edict-20010903/i2e.dict"
    
$fp = @fopen($filename"r"); if (!$fp) { die("ERROR: Imposible leer el 
fichero '$filename'\n"
);} 
    while ((
$linea fgets($fp1024)) && (!feof($fp))) { 

        
// Se eliminan caracteres residuales 
        
$linea eregi_replace("\([^)]*\)"""$linea);  /* comentarios 
entre parentesis  */ 
        
$linea eregi_replace(" : "":"$linea);       /* separacion 
entre idiomas      */ 
        
$linea eregi_replace("[\n\r]*"""$linea);    /* se elimina el 
cambio de linea */ 

        // Se separan los idiomas en 2 variables 
        
$matches split (":"$linea); 
        
$palabraingles $matches[0]; 
        
$palabraespanol $matches[1]; 

        
// Se meten las palabras en la tabla hash 
        
$ingles2espanol[$palabraingles] = $palabraespanol
        
$espanol2ingles[$palabraespanol] = $palabraingles
    } 
    
fclose ($fp); 

    
// Se define una rutina que sepa traducir palabras sueltas del Castellano 
al Ingl?
    
function palabra_espanol2ingles($espanol) { 
        global 
$espanol2ingles

        if (
$espanol2ingles[$espanol] != '') { 
            return 
$espanol2ingles[$espanol]; 
        } else { 
            return 
$espanol
        } 
    } 

    
// Se define una rutina que sepa traducir palabras sueltas del Ingl?s al 
Castellano 
    
function palabra_ingles2espanol($ingles) { 
        global 
$ingles2espanol

        if (
$ingles2espanol[$ingles] != '') { 
            return 
$ingles2espanol[$ingles]; 
        } else { 
            return 
$ingles
        } 
    } 

    
// Se muestran dos resultados de ejemplo del traductor 
    
print "?rbol => " palabra_espanol2ingles("?rbol") . "\n"
    print 
"house => " palabra_ingles2espanol("house") . "\n"
?>



El resultado de la ejecuci?n de este script, que hemos decidido llamar "dicionariohash.php", es esto:

$ ./dicionariohash.php
?rbol => tree
house => casa Bien, parece que traduce bien palabra por palabra, en un sentido, como en su opuesto. Para no complicarnos vamos a centrarnos s?lo en la traducci?n del Ingl?s al Castellano.

Ampliamos el traductor para procesar textos completos

El siguiente objetivo es que este script sea capaz de traducir textos completos, aunque lo haga palabra por palabra, literalmente. A modo de ejemplo, hemos escogido el siguiente texto en Ingl?s, para probar nuestro desarrollo:

"Linux is a UNIX-like operating system that was designed to provide personal computer users a free or very low-cost operating system comparable to traditional and usually more expensive UNIX systems. Linux has a reputation as a very efficient and fast-performing system. Linux's kernel (the central part of the operating system) was developed by Linus Torvalds at the University of Helsinki in Finland. To complete the operating system, Torvalds and other team members made use of system components developed by members of the Free Software Foundation for the GNU project."

Para pasar de traducir una sola palabra a traducir un texto completo, simplemente hay que considerar que un texto est? formado por palabras separadas entre s? por espacios en blanco o signos de puntuaci?n. Aplicamos esta idea sobre el c?digo, obteniendo el siguiente script:


<? 
    $texto
='Linux is a UNIX-like operating system that ... etc.'

    
// Se define una rutina que cargue en memoria un diccionario 
    
function cargadiccionario($filename) { 

        global 
$ingles2espanol$espanol2ingles

        
// Se lee el fichero del diccionario 
        
$fp = @fopen($filename"r"); if (!$fp) { die("ERROR: Imposible leer 
el fichero '$filename'\n"
);} 
        while ((
$linea fgets($fp1024)) && (!feof($fp))) { 

            
// Se eliminan caracteres residuales 
            
$linea eregi_replace("\([^)]*\)"""$linea);  /* comentarios 
entre parentesis  */ 
            
$linea eregi_replace(" : "":"$linea);       /* separacion 
entre idiomas      */ 
            
$linea eregi_replace("[\n\r]*"""$linea);    /* se elimina el 
cambio de linea */ 

            // Se separan los idiomas en 2 variables 
            
$matches split (":"$linea); 
            
$palabraingles $matches[0]; 
            
$palabraespanol $matches[1]; 

            
// Se meten las palabras en la tabla hash 
            
$ingles2espanol[$palabraingles] = $palabraespanol
            
$espanol2ingles[$palabraespanol] = $palabraingles
        } 
        
fclose ($fp); 
    } 

    
// Se carga el diccionario que trae la aplicaci?n libre i2edict 
    
cargadiccionario("i2edict-20010903/i2e.dict"); 

    
// Se define una rutina que sepa traducir palabras sueltas del ingl?s al 
espa?ol 
    
function palabra_ingles2espanol($ingles) { 
        global 
$ingles2espanol

        if (
$ingles2espanol[$ingles] != '') { 
            return 
$ingles2espanol[$ingles]; 
        } else { 
            return 
$ingles
        } 
    } 


    
// Se lee un fichero con texto en ingles 
    
$lineas split ("\n"$texto); 
    while (list(
$key$val) = each($lineas)) { 
        
$linea $val

        
// Se reemplazan los signos de puntuaci?n, para preservarlos 
        
$linea eregi_replace("\."" --PUNTO-- "$linea); 
        
$linea eregi_replace("\,"" --COMA-- "$linea); 
        
$linea eregi_replace("\;"" --PUNTOYCOMA-- "$linea); 
        
$linea eregi_replace("\("" --PARABR-- "$linea); 
        
$linea eregi_replace("\)"" --PARCIE-- "$linea); 

        
// Se desglosa la linea en palabras individuales 
        
$matches split (" "$linea); 

        
// Se efectua la traduccion de cada palabra, recorriendo el array obtenido
        
$linea_traducida ''
        while (list(
$key$val) = each($matches)) { 
            
$linea_traducida .= palabra_ingles2espanol($val) . " "
        } 

        
// Se reemplazan a la inversa los signos de puntuaci?n 
        
$linea_traducida eregi_replace(" --PUNTO-- ""."$linea_traducida); 
        
$linea_traducida eregi_replace(" --COMA-- "","$linea_traducida); 
        
$linea_traducida eregi_replace(" --PUNTOYCOMA-- "";"$linea_traducida); 
        
$linea_traducida eregi_replace(" --PARABR-- ""("$linea_traducida); 
        
$linea_traducida eregi_replace(" --PARCIE-- "")"$linea_traducida); 

        
// Se muestra en pantalla la linea traducida 
        
print $linea_traducida "\n"
    } 
?>



Si probamos el script encontraremos como resultado una traducci?n bastante inexacta, debida a la imprecis?n del diccionario con el que trabajamos. Con un peque?o truco podemos mejorar el diccionario agregando o suplantando algunos terminos. Para ello, incorporamos al c?digo esta dos l?neas:


// Se carga un diccionario con terminos adicionales que podemos personalizar 
cargadiccionario("mio.dict");


y creamos un fichero llamado "mio.dict" que contiene las siguientes palabras:

is : es
the : el
was : fue
designed : dise?ado
provide : proveer
users : usuarios
low-cost : bajo coste
systems : sistemas
has : tiene
fast-performing : alto rendimiento
developed : desarrollado
by : por
University : Universidad
Finland : Finlandia
members : miembros
made : hecho
components : componentes
project : proyecto
to : para
that : que

Ahora, probamos nuevamente el script, y ?ste el fant?stico resultado:

"Linux es un UNIX-like operativo sistema que fue dise?ado para proveer personal ordenador usuarios un libre o muy bajo coste operativo sistema comparable para tradicional y usualmente m?s caro UNIX sistemas. Linux tiene un reputaci?n como un muy eficaz y alto rendimiento sistema. Linux's n?cleo (el central pieza de el operativo sistema) fue desarrollado por Linus Torvalds a el Universidad de Helsinki en Finlandia. To completo el operativo sistema, Torvalds y otros equipo miembros hecho uso de sistema componentes desarrollado por miembros de el Free Software Foundation por el GNU proyecto."

Autor: Juan Ignacio P?rez Sacrist




Artículos Relacionados
PHP-Nuke 7.4 ES OP PR1 Espa?ol (DESCARGAS)
Fecha completa en espa?ol (PHP)

Más Artículos relacionados >>
Artículo siguiente
Descargar este contenido

Autor: Juan Ignacio P?rez
Fecha: 13/9/2004 (565 días) Lecturas : 13.971
Valoración :
Comentarios: 137

aNquLblA

home owners insurance florida 8-[[[
Valoración:
UgJSvoGzjLg

health insurance quotes 689538
Valoración:
bzMOesUZIsbziLbsK

acomplia :DD
Valoración:
LeWfXSrKXlLsvcF

prednisone no prescription xtvvum
Valoración:
OZTtcxSY

buy brand name valium giclkv
Valoración:
kjxVVSJdyQKc

ambien haq
Valoración:

Agregar a mi lista
Solicitar Ayuda


subir página
Los contenidos expuestos en blasten.com® son propiedad única de sus autores, por lo cual se prohíbe la reproducción total o parcial de los contenidos expuestos en este sitio sin previo consentimiento del autor y el editor. Para intercambios de contenidos haga clic aqui y contáctenos. El logotipo y el nombre BLASTEN así como todos los gráficos expuestos son propiedad exclusiva de este portal.
©2004-2005 blasten.com Network