Ver Mensaje Individual
  #20  
Viejo 15/03/15, 06:21:59
Array

[xs_avatar]
mlesir mlesir no está en línea
Usuario muy activo
 
Fecha de registro: abr 2012
Mensajes: 2,263
Modelo de smartphone: OnePlus One,BQ Edison1, GoogleChrome,
Tu operador: Pepephone
Desde luego lo de usar un array local si se puede es mucho mas rápido. Todo un descubrimiento!

En cuanto a lo de descomponer los comandos de voz he tenido mogollón de problemas. He probado de todo y al final creo q seguiré usando un FOR para ir comparando uno a uno a no ser que tu o alguien me des una idea. Eso si en esta semana de pelearme con el regex he aprendido mucho.

Explico el problema:

Por un lado tenemos una variable la cual contiene agrupadas todos los nombres de las tareas que queremos que estén disponibles para el asistente de voz. Así que:

%Tas= abr(e|ir),abr(e|ir) mapas,baj(a|ar) panel,toc(a|ar),toc(a|ar) largo, ....etc

Por otro lado tenemos en %InBuffer lo que el reconocimiento de voz ha recogido. Xej: "abrir whatsapp"

Tu idea de usar Buscar en %Tas la variable %InBuffer y así no tener q usar un forma que vaya comparando todas las opciones encuentro q tiene estos problemas:

1 Funciona para abr(e|ir) pero no para abr..

2 Si tenemos dos comandos como tocar y tocar largo o abrir y también abrir mapas. Creo que esto se arregla ordenando el array de %Tas de mas largo a menos. Luego concatenas. Si no abrir mapas coincidiría con abrir si es que esta puesto primero.

3 Que pasa si tengo un comando de voz con dos palabras? Por ejemplo "Tocar largo" o "baj(a|ar) volumen" ( este comando luego dices multimedia, timbre,etc. Pero eso forma parte de la parte variable del comando y por tanto la tarea es la misma.
Pues entonces, aquí qué cojemos? La cuestión es que no se si cojer la primera palabra la primera y la segunda etc. Porque no solo va a haber comandos del tipo abrir + algo. Puede haber incluso varios abrir algo especifico pq quiera q ese abrir haga ciertas cos además de la tarea abrir a secas que solo abre la app q digo a continuación.

4 Y creo que mas importante. Explicó antes un poco lo que quería cambiar del sistema. Para no tener por obligación q ponerle un nombre regex a las tareas había pensado crear dos arrays respecto a ellas. Uno guarda el nombre tal cual ( si quiero le meto regex o no) y el otro mete ese nombre de la tarea en formato regex digamos.
Esto que podría ser opcional para las tareas es obligatorio para
las variables dado que por ejemplo no puedo renombrar %BATT o %WIFI.
Estos dos arrays se relacionarían por el índice. De modo que el índice por ejemplo 23 contiene la tarea "abrir" (%Tas23) y el nombre regex (%TasC23).
Si seguimos la idea de coger directamente de la variable %TasC ( que seria la concatenación de todos los comando regex) necesito además de buscarlo saber de alguna manera que posición ocupa la coincidencia en todo el patrón.

He intentado de todo: grupos de captura en regex, hacer la busca de la lista de comandos en Inbuffer y viceversa.

Total que por todo lo anteriormente dicho no le veo las ventajas. Incluso se me ocurrió desarrollar un poco mas tu idea y en vez de coger letra a letra por el final de la palabra se me ocurrió coger tanto del ppo como del final para que tardara menos. Y la idea en si es genial pero siempre topo con el problema de que no se puede saber que palabra/as coger si solo la primera o la primera y la segunda.
Y por otro lado si lo que busco es el patron %TasC en abrir, el problema es saber con que parte del patrón ha coincidido o al menos con que posicion. Incluso probé a poner en cada comando una subparte "(abril(e|ir))|^)". Lo utilizaba como patrón Así siempre encuentra coincidencia al menos con el inicio y lo bueno es que te crea el elemento del array pero vacío claro pq mete inicio de frase con lo cual el array de coincidencias si muestro el flash %coincidencia() podría ser:

%coincidencia1
%coincidencia2
%coincidencia3
puls(a|ar)

Genial! Sabría la posición y el nombre de la tarea en regex. Problema: regex es "eager" así que no se puede hacer.

Alguna idea alguien mejor q el FOR e ir comparando? Respecto a esto creo por lo poco que he leído que javascript acepta regex... eso espero!

Probablemente no me haya explicado muy bien en este post. Si es así decírmelo y lo intento otra vez.
__________________
Fdo: Mlesir. Miembro del equipo que promueve el foro y el recopilatorio de Tasker http://www.htcmania.com/forumdisplay.php?f=969
Responder Con Cita