Comunidad de diseño web y desarrollo en internet online

Problema con Arrays

Citar            
MensajeEscrito el 22 Sep 2012 10:54 am
Estoy aprendiendo a hacer traductores, y para ello empecé con un traductor de lenguaje normal a lenguaje sms, creo que es algo que vi hace tiempo en una web flash y se que es posible de realizar.

Lo que busco es que si tu pones "que pasa colega" en el campo de texto de entrada, el de salida te devuelva "k psa kolega".

Uso dos variables Array, una para castellano y otra para lenguaje SMS, y de momento solo existen estas tres palabras en cada Array, pero la cosa es aumentarlo cuando todo funcione.

La cuestion es que ya consigo que funcione con una única palabra [EJ: si pongo "que" me devuelve "k"]

Pero llevo calentandome la cabeza tiempo y no se como puedo hacer que se aplique a varias palabras
[Es decir, que si pongo "que pasa" me devuelva "k psa"]

¿Sugerencias sobre como conseguir que mi traductor admita varias palabras?

Gracias! Dejo el código:

Código ActionScript :

//estas son las listas de palabras en castellano y lenguaje sms, de momento solo funciona con tres
//pero la cosa es expandir el Array hasta bastantes palabras

var castellano:Array = ["que","pasa","colega"];

var sms:Array = ["k","psa","kolega"];

//una restriccion para que no se puedan poner numeros...

entrada.restrict = "^0-9";

//el boton de "traducir" que hace que la funcion "inspeccionar" se efectue para hacer la traduccion

boton.addEventListener(MouseEvent.CLICK, buscar);
function buscar(evento:MouseEvent):void
{
   inspeccionar(entrada.text);
}

//si el nombre esta en el Array castellano y sms, se traducira, si no, se quedara igual que estaba

function inspeccionar(nombre)
{
   
   for (var i:uint=0; i<castellano.length; i++)
   {
      if (nombre == castellano[i])
      {
         pantalla.text = sms[i];
         break;
      }
      else
      {
         pantalla.text = entrada.text;

      }
   }
}

Por AzulyNegro

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Sep 2012 02:51 pm
Tienes que hacer algún tipo de lookup, ejemplo objeto donde las propiedades son la palabra, el valor la traducción, porque recorrer un array en formas de match es ruinoso cuando quieras escalarlo incluso a una decena de palabras

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Sep 2012 10:27 pm
Gracias por la respuesta.

El caso es que ya he conseguido hacerlo por este método dandole vueltas, pero si, me da la sensacion de que está hecho muy a lo bruto, de hecho, cada Array tendría que contener unas 1000 palabras, y no se si esto será viable.

Que problemas podría contraer este metodo? Imposibilidad, bajo rendimiento o simplemente poca optimización? Lo digo porque no tengo ni idea acerca de lo del lookup y sería meterme en terreno desconocido.

Salud!

Por AzulyNegro

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Sep 2012 12:17 pm
Considera esto

Código ActionScript :

var diccionario = {}
diccionario.hello = "hola";
diccionario.bye = "adios"
var traduccion:String = inspeccionar("hello");
trace(traduccion);

function inspeccionar(nombre:String):String
{
     return diccionario[nombre]
}


De hecho hay una clase Dictionary que sirve para esto (mi ejemplo es sobre un objeto plano)

Con 1000 palabras, recorrer array por fuerza bruta puede tener un rendimiento malo en procesadores rápidos y pésimo en procesadores mas viejitos ... aunque en realidad todo depende de cuan pacientes sean tus usuarios. Recuerda que el timeout del Flash player esta en los 30 segundos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por solisarg el 25 Sep 2012 10:09 pm, editado 1 vez

Argentina

firefox
Citar            
MensajeEscrito el 25 Sep 2012 09:47 pm
No entiendo que hace el return, he estado mirando en las ayudas de adobe pero no lo capto...


Lo he estado probando con este codigo

Código ActionScript :

var hello = "hola";
var bye = "adios"

trace(hello)

// y como resultado me da "hola"

//así que lo intenté con el siguiente: ("entrada" es la caja de introduccion de texto, en la cual esta escrito "hello")

var palabra = (entrada.text)

var hello = "hola";
var bye = "adios"

trace(palabra)

//pero el resultado es "hello", me da el nombre de la variable y no el de a lo que es igual dicha variable


Supongo que precisamente en eso consistirá el return, que debe devolver el valor contrario, pero no soy capaz de llegar...

Por AzulyNegro

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Sep 2012 10:11 pm
No sabes lo que es return .... ok. Return devuelve un valor.
Modifiqué mi POST anterior para que traces lo que devuelve.
De todas formas tomalo con calma, arranca como tu sabes, luego ya iras viendo si necesitas algo mas complejo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.