Foros del Web » Programación para mayores de 30 ;) » Java »

Recorrer arrays en busca de coincidencias

Estas en el tema de Recorrer arrays en busca de coincidencias en el foro de Java en Foros del Web. Muy buenas a todos! Tengo 5 arrays de strings. En esos arrays hay palabras que se repiten o que son muy parecidas. Ejemplo: Array1={casa, coche ...
  #1 (permalink)  
Antiguo 26/11/2012, 06:58
 
Fecha de Ingreso: octubre-2012
Mensajes: 25
Antigüedad: 11 años, 6 meses
Puntos: 3
Busqueda Recorrer arrays en busca de coincidencias

Muy buenas a todos!

Tengo 5 arrays de strings. En esos arrays hay palabras que se repiten o que son muy parecidas.

Ejemplo:

Array1={casa, coche azul, lápiz, hoja, móvil}
Array2={casas, ratón}
Array3={coches azules, lápiz, móviles, libro, auricular}
Array4={casa, ratón, auricular}
Array5={casa, coche, lápiz, móvil, auriculares}

¿Cómo puedo recorrer todos los arrays buscando coincidencias o strings muy parecidos?

Cualquier aportación será bien recibida!

Un saludo y gracias!
  #2 (permalink)  
Antiguo 26/11/2012, 07:17
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: Recorrer arrays en busca de coincidencias

Se me ocurre utilizar un loop por cada array para comparar con los demas arrays.
Consulta, cada variable Array{N} es una variable separada? o tienes un Array de Arrays?
Si fuera que es un Array de Arrays puedes realizarlo asi:
Código Java:
Ver original
  1. ...
  2. // recorres el array de arrays
  3. for (int n = 0; n < arrays.length; n++) {
  4.    // recorres las posiciones del array N
  5.    for (int i = 0; i < arrays[n].length; i++) {
  6.       // recorres los otros arrays
  7.       for (int n2 = 0; n2 < arrays.length; n2++) {
  8.          // verificas si no es el mismo array para no comparar el mismo array
  9.          if (n != n2) {
  10.             // recorres las posiciones del array a comparar
  11.             for (int i2 = 0; i2 < arrays[n2].length; i2++) {
  12.                // comparas el elemento I del array N con el elemento I2 del array N2
  13.                if (arrays[n][i] == arrays[n2][i2]) {
  14.                   // elementos iguales
  15.                }
  16.             }
  17.          }
  18.       }
  19.    }
  20. }
  21. ...

No es un proceso optimo, pero es lo primero que se me ocurrio.

Suerte!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/

Última edición por hschimpf; 26/11/2012 a las 07:54
  #3 (permalink)  
Antiguo 26/11/2012, 09:23
 
Fecha de Ingreso: octubre-2012
Mensajes: 25
Antigüedad: 11 años, 6 meses
Puntos: 3
Respuesta: Recorrer arrays en busca de coincidencias

Cita:
Iniciado por hschimpf Ver Mensaje
Se me ocurre utilizar un loop por cada array para comparar con los demas arrays.
Consulta, cada variable Array{N} es una variable separada? o tienes un Array de Arrays?


No es un proceso optimo, pero es lo primero que se me ocurrio.

Suerte!
Muchas gracias hschimpf por tu ayuda!

Respondiendo a tu duda (cierto es que no está muy claro) cada variable (Array1, Array2...) es una variable separada, no es un array de arrays.

En principo iba a hacer algo parecido al ejemplo que tu has puesto, pero el problema es que tengo Strings muy parecidos (Ej:coche, coches) que quiero incluirlos como coincidencias.

De todas formas muchísimas gracias por tu ayuda!
  #4 (permalink)  
Antiguo 26/11/2012, 09:37
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: Recorrer arrays en busca de coincidencias

Cita:
Iniciado por Padin Ver Mensaje
En principo iba a hacer algo parecido al ejemplo que tu has puesto, pero el problema es que tengo Strings muy parecidos (Ej:coche, coches) que quiero incluirlos como coincidencias.
Padin, hace un tiempo (muuuucho tiempo) desarrolle una clase en PHP que buscaba coincidencias entre palabras para corregirlas. La clase tenia un diccionario e intentaba buscar similitudes de la palabra con el diccionario.
Si queres podes darle una mirada a los metodos que generaban las combinaciones y si te sirve te ayudo a pasar ese codigo a Java.

Suerte!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/
  #5 (permalink)  
Antiguo 26/11/2012, 09:47
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Recorrer arrays en busca de coincidencias

El problema sería definir que condiciones debe cumplir para estar en el listado de coincidencias, sobre todo para palabras de pocas letras (té, paz, sol...).

Si pudieses tener un array de control con los patrones de coincidencia mínimos podrias, para cada palabra de ese array, generar un patrón para una expresión regular que buscase en loop para el resto de arrays un elemento tipo '%texto%", donde % representarían cadenas indeterminadas de caracteres y habría que adaptarlo a la expresión regular. Si encuentra algun elemento del array que coincida con el patrón, entonces añadirías ese array al listado de elementos que tienen coincidencias con la palabra evaluada.

También tendrías que adaptar la expresión regular para que las tildes no invaliden la búsqueda de coincidencias.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #6 (permalink)  
Antiguo 26/11/2012, 10:17
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: Recorrer arrays en busca de coincidencias

Cita:
Iniciado por Fuzzylog Ver Mensaje
El problema sería definir que condiciones debe cumplir para estar en el listado de coincidencias, sobre todo para palabras de pocas letras (té, paz, sol...).

Si pudieses tener un array de control con los patrones de coincidencia mínimos podrias, para cada palabra de ese array, generar un patrón para una expresión regular que buscase en loop para el resto de arrays un elemento tipo '%texto%", donde % representarían cadenas indeterminadas de caracteres y habría que adaptarlo a la expresión regular. Si encuentra algun elemento del array que coincida con el patrón, entonces añadirías ese array al listado de elementos que tienen coincidencias con la palabra evaluada.

También tendrías que adaptar la expresión regular para que las tildes no invaliden la búsqueda de coincidencias.
Claro, asi como dice Fuzzylog, se me ocurre hacer un valor de igualdad. Por ej "arbol", si falta o sobra una sola letra "arbo", el valor de igualdad es 1, o si una letra esta en mala posicion "arblo" el valor es 1, ahora si ya tiene las 2 diferencias "arblos" el valor de igualdad es 2.
Entonces, realizar un proceso que retorne un entero y cuanto mas alto es el entero mayor diferencia existe entre las palabras.

Suerte!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/
  #7 (permalink)  
Antiguo 27/11/2012, 10:44
 
Fecha de Ingreso: octubre-2012
Mensajes: 25
Antigüedad: 11 años, 6 meses
Puntos: 3
Respuesta: Recorrer arrays en busca de coincidencias

Hola de nuevo chicos!

Muchas gracias por las aportaciones, se agradcen un montón!

hschimpf tu código con el diccionario no me valdría porque la mayoría son nombres propios, los cuales desconozco.

Bueno, tras andar dandole vueltas he decidido bajar el listón y buscar solo coincidencias exactas.

Así no es muy difícil, simplemente una concatenación de for's y listo.

Seguiré dándole vueltas de todas formas


Un saludo!
  #8 (permalink)  
Antiguo 16/01/2014, 11:41
 
Fecha de Ingreso: enero-2014
Mensajes: 1
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Recorrer arrays en busca de coincidencias

Hola soy nueva en esto y me gustaría ver si me podríais ayudar con una duda que tengo...
tengo un array de tipo double que sus componentes se piden al usuario, como hago para decirle despues que calcule el maximo de esas componentes?
Os dejo el codigo que tengo hecho:

public static void main(String[] args) {
int n;
Scanner teclado = new Scanner(System.in);
System.out.println("Dime un número entero: ");
n=teclado.nextInt();

double sueldo[]= new double [n];
int i;
for(i=0; i<n; i++){
System.out.println("Dime un sueldo");
sueldo[i]=teclado.nextDouble();}
if(sueldo[i]>sueldo[n]);
System.out.println(sueldo[i]);
}

}
  #9 (permalink)  
Antiguo 17/02/2015, 19:08
 
Fecha de Ingreso: febrero-2015
Mensajes: 1
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Recorrer arrays en busca de coincidencias

hola me pueden ayudar a resolver un proble ma con arrays.. es que tengo que hacer un array con las letras del abecedario y otro que me capture una palabra y compare con el primer arraysal final tengo que imprimir la posocion de la letra digitada ejemplo

el usuario digito hola
recorro el array y lo comparo con el del abecedario
luego digo posi h=23, o=12, l=9,a =1 como ejemplo

Etiquetas: arrays, string, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:30.