Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Creando un traductor!:D

Iniciado por Leoheart, 11 de Marzo de 2007, 06:16:41 PM

« anterior - próximo »

Leoheart

Buenas!

Antes de nada decir que gracias por leer tooodo lo que voy a exponer!

El problema que se me plantea es que tengo que implementar un programa traductor. Es decir un traductor de toda la vida. Se proporciona un diccionario estadistico, un diccionario de bigramas y un texto traducir.
El diccionario estadistico tiene el siguiente formato:

palabra traduccion probabilidad

Se interpreta como palabra traduccion de esa palabra y probabilidad de que esa sea la traduccion.

El diccionario de Bigrama tiene el mismo esquema pero en vez de ser una traduccion , es una pareja de palabras y la probabilidad de que vayas seguidas, por ejemplo:

La casa 1,000

Significa que la probabilidad de que La vaya con casa es de 1,0.

Como hay varias posibles traducciones hay un algoritmo voraz que nos da que palabra hay que traducir.

He conseguido que el programa traduzca, lo que pasa es que es lentiiiiisimo.

El algoritmo que habia seguido yo para resolverlo es:

Creo dos tablas hash
Leo del primer diccionario y voy metiendo en la tabla hash la palabra con una lista de sus traducciones.
Hago lo mismo con el segundo.
Por ulitmo abro el archivo a traducir y voy palabra por palabra traducciendola con el algoritmo voraz.

Lo mas logico es hacerlo de esta manera, pero el tiempo se me dispara mucho.

Alguien tiene una idea mejor?Espero alguna respuesta!

Graciassss!!!!
oding!

Mars Attacks

A mí me parece que el método es el más eficaz posible, con un coste un poco alto la primera vez que cargues los diccionarios (¿no estarás cargando una y otra vez los diccionarios antes de cada frase, no?), pero después tendría que ser óptimo hacerlo así.
Quizá podrías guardar el objeto diccionario directamente en un archivo, con lo que te ahorras el coste de tener que crearlo cada vez que uses el programa (bueno, al menos en python yo abogaría por esto, no sé qué estás usando).

Leoheart

Gracias por contestar!:P
Estoy programando en c++. La cuestion es que es un trabajo de clase y los profesores solo lo ejecutan una vez. El diccionario solo lo leo una vez, ademas el que ellos usan es bastante grande(mas o menos 40 Mb). Posteaba esta cuestion por que a mi me sale un tiempo demencialmente grande unos 200 sg y a compañeros les sale 6 seg!:P A si que en algo debe de estar!!! xD
oding!

Diferencial

La hostia que casualidad!! yo estoy comenzando hacer un traductor tambien. Pero yo uso xml y xpath a ver que velocidad tiene.
PARA TENER COSAS QUE NUNCA HAS TENIDO, TENDRÁS QUE HACER COSAS QUE NUNCA HAS HECHO.

Leoheart

Cita de: "Diferencial"La hostia que casualidad!! yo estoy comenzando hacer un traductor tambien. Pero yo uso xml y xpath a ver que velocidad tiene.
Pues si tienes alguna idea!:P

Acaba de subirlo mi compañero al server que lo ejecutado y se nos ha pasado del limite de 600 seg!!! Y hay gente que lo hace en 6!!!!
oding!

shephiroth

El tiempo empieza a contar antes de cargar diccionarios o despues??

Leoheart

Cita de: "shephiroth"El tiempo empieza a contar antes de cargar diccionarios o despues??
Antes!
oding!

Mars Attacks

Joder, pues entonces no te compliques la vida: pregúntale a la gente que lo hace en 6.

Leoheart

Cita de: "Mars Attacks"Joder, pues entonces no te compliques la vida: pregúntale a la gente que lo hace en 6.
Es un concurso que quien gana se lleva dos puntos y 150 euros!! xDDD Se callan como putas xDDD
oding!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.