Comparar cadenas de caracteres SIMILARES entre

1,902 views
Skip to first unread message

Listas FoxParaguay

unread,
Feb 5, 2013, 12:14:51 PM2/5/13
to publice...@googlegroups.com

Buenas tardes a todos

 

Tengo 2 tablas, una de 3.000.000 y otra de 6 millones de registros.  Ambas tienen dos campos comunes nombre y apellido.

 

Sucede que la segunda tabla posee el campo “docuid” o documento de identidad que deseamos asignar a la primer tabla, pero con el inconveniente de que como ambos tienen diferentes orígenes de registro los nombres y apellidos no necesariamente habran sido ingresados exactamente igual.

 

Ejemplo

 

En la tabla A
Nombre                       Apellido                                Docuid        

JUAN CARLOS           SANCHO PANZA                0                   

 

En la tabla B
Nombre                       Apellido                                 Doduid

JUAN C.                       SANCHO PANZA                 6732881

 

Y Miles de otras posibles variaciones.  Mi idea es asignar el docuid a la tabla A, cuando estas sean SIMILARES.  

 

Alguna sugerencia ?

En este caso lo que estoy buscando son ideas de como plantar, no precisamente CODIGO DE PROGRAMACION.

 

Una vez mas, muchas gracias a todos.

 

 

Javier cabrera blanco

 

 

Listas FoxParaguay

unread,
Feb 5, 2013, 12:42:52 PM2/5/13
to publice...@googlegroups.com

Algo asi, pero teniendo en cuenta la complejidad de mi caso

 

WAIT WINDOW SOUNDEX('JUAN CARLOS SANCHO PANZAAAAAA') = SOUNDEX('JUAN CARLOSSSS SANCHO PANZA')   && RETORNA .T.

 

Pero

 

WAIT WINDOW SOUNDEX('JUAN C. SANCHO PANZA') = SOUNDEX('JUAN CARLOS SANCHO PANZA')   && RETORNA .F. cuando debio retornar .T.

 

Javier Cabrera Blanco

Miguel Canchas

unread,
Feb 5, 2013, 1:03:03 PM2/5/13
to publice...@googlegroups.com

Ahí podrias hacerlo al reves….empezar por los apellidos…..

 

 

MK

grisson

unread,
Feb 5, 2013, 1:06:36 PM2/5/13
to publice...@googlegroups.com

Amigo, explícame esto que a mi parecer es algo asombroso…

 

Las tablas de Fox,  Soportan 6 millones de registros a más???, o son de algún  RDBMS

 

Saludos…

Grisson

datal...@gmail.com

unread,
Feb 5, 2013, 1:40:41 PM2/5/13
to publice...@googlegroups.com, lis...@foxparaguay.com.py
Que tal Javier??.... fijate si este link ayuda un poquito... saludos desde Luque - py


pd: Que Caloooooooor!!!!

Víctor Hugo Espínola Domínguez

unread,
Feb 5, 2013, 1:41:17 PM2/5/13
to publicesvfoxpro
Hola Javier

Olvídate de SOUNDEX, es un algoritmo bastante antiguo y funciona sólo para el idioma inglés. Lee la ayuda de la función DIFFERENCE, creo que te será más útil.
Deberías hacer el proceso en etapas:
1) Procesar los nombres exactamente iguales.
2) Con el resto puedes usar la función DIFFERENCE y procesar los que dan como resultado 4
3) Lo que sobra es el veneno de la cola:
   3.1) Convertir ambos nombres a mayúsculas o minúsculas, sin acentos, sin puntos y sin apóstrofos.
   3.2) Pasar las palabras de cada nombre a 2 arrays
   3.3) Contar las coincidencias exactas entre los elementos
   3.4) Contar las coincidencias entre el primer carácter de un elemento y el único carácter del otro elemento
   3.5) La suma de ambas coincidencias debe ser igual a la cantidad de palabras de cada nombre
   Ejemplo:
   JUAN                              JUAN
   C                                    CARLOS
   SANCHO                         S
   PANZA                            PANZA
   Arroja 2 coincidencias exactas y 2 coincidencias de iniciales, 4 palabras del nombre
Es una idea truculenta, sin garantía de que funcione 100%.

Saludos,
Víctor.

Listas FoxParaguay

unread,
Feb 5, 2013, 3:08:37 PM2/5/13
to publice...@googlegroups.com

Hasta 2gb por tabla, todos los registros que quieras creo. 

 

Esta de 6 millones es lo máximo que tengo.

 


Enviado el: martes, 05 de febrero de 2013 03:07 p.m.
Para: publice...@googlegroups.com

Listas FoxParaguay

unread,
Feb 5, 2013, 3:15:29 PM2/5/13
to publice...@googlegroups.com

SOUNDEX ¡!!

 

Era eso lo que buscaba ¡!!

 

Gracias Victor ¡

ZeRoberto

unread,
Feb 5, 2013, 3:18:05 PM2/5/13
to publice...@googlegroups.com
uhm?? pero si tu mismo posteaste lo de SOUNDEX y Víctor no te recomienda usarlo.... no seras Fox Friend? XD

Saludos

Carlos Miguel FARIAS

unread,
Feb 5, 2013, 6:10:48 PM2/5/13
to publice...@googlegroups.com
Coincido con opiniones anteriores, he tenido que hacer trabajos similares y el soundex no funciona.
Ni siquiera en mysql donde el soundex genera codigos muchos mas largos.

Antes de hacer la conversión, vas a tener que hacer una depuración de datos significativa.
a) En tu tabla con numero de documento, este es clave primaria?
b) En esa misma tabla, los nombres no se repiten?
c) En tu tabla sin número de documento, los nombres no se repiten?

Y vas a tener que tomar decisiones significativas.
a) si el docid no es clave primaria, si hay repetidos, hay que decidir como corregir antes de empezar.
b) Si hay nombres repetidos, y tienen igual doc id, hay un problema de poca confiabilidad de los datos, si tienen doc diferente, cual asignas ante una coincidencia en el otro archivo.
c) Si en el archivo sin docid, hay nombres repetidos, como se subsana, además ver que hacer con lo del punto previo b).

Primero deberas formatear los nombres, o sea, eliminar espacios en blanco intermedios repetidos, signos de puntuación repetidos.
Deberás buscar abreviaturas (letra sola seguida de punto o espacio en blanco) y ver si aparece junto a otro nombre.
Por ejemplo; Juan C. sería normalmente Juan Carlos, Miguel A. sería Miguel Angel, M. Jose sería Maria José, Jose M. seria Jose Maria y asi, deberías buscar que se da (esto consensuado con el destinatario de los datos finales)
En esos casos, deberías reemplazar en los datos originales dichos nombres por el par completo.
Deberás controlar que despues de cada punto de una abreviatura se incluya un espacio en blanco.
Es importante lograr "limpiar" y/o estandarizar las abreviaturas, preferentemente, llevar las abreviaturas a nombres estandares, si no, las comparaciones pueden ser problematicas.
Esto proceso de formateo, tiene que dejarte dos archivos nuevos (no trabajes sobre originales, por supu) con bastante arreglados los nombres.

Luego...
Vas a tener que hacer sobre ambos archivos, un archivo invertido de frecuencias para chequear errores de tipeo.
Como?
Creas un archivo de nombre, frecuencia, indexado primario por nombre

 UsoDeNombres = {nombre C(128), frecuencia I, nombreCompleto C(128) NULL}

Lees los archivos completos, en cada apellido y nombre (AyN), lo separas en palabras. Cada palabra de AyN la buscas en el archivo UsoDeNombres, si está, sumas 1 en frecuencia, si no esta, lo agregas y frecuencia se inicia con 1. (esto se puede hacer para los dos archivos)
Al terminar, tendras un diccionario de todos los nombres (y abreviaturas usados) y la frecuencia de uso de c/u
Si un nombre...abreviatura tiene baja frecuencia, hay que ver si no es otro de los nombres, pero mal escrito.
Si detectas que esta mal escrito, o en el caso de las abreviaturas, deberas optar como se corrige, y en ese caso lo indicas en cada caso, poniendo lo correcto en nombreCompleto (esto es trabajo manual, consensuado con el que recibe los datos finales)
Luego lees UsoDeNombres, aquellos registros que nombreCompleto no es NULL, o sea, los que corregistes.
Esto posiblemente no sean muchos (2000 o 3000 registros), te conviene cargar en un arreglo el par nombre/abreviatura, nombreCompleto
Luego lees los archivos principales, te fijas si algunos de los nombres/abreviaturas del arreglo, están en el nombre del registro, si estan, los reemplazas por el nombreCompleto en el AyN y grabas.

Al terminar estos pasos indicados previamente, vas a tener los dos archivos con los AyN bastante regularizados como para poder hacer una comparación, tomando cada nombre del archivo a completar con el Documento y buscandolo en el archivo con numero de documento (buscando por AyN).

Esto es una idea del algoritmo en general que utilizaría si me tocara a mi hacer esta tarea.

Suerte.

Saludos: Miguel, La Pampa (RA)

Listas FoxParaguay

unread,
Feb 6, 2013, 6:32:17 AM2/6/13
to publice...@googlegroups.com

Jajajajaja ZeRoberto

 

Es cierto, yo pensé que era otra función la que puse de ejemplo.  Como no estoy acompañando mucho los mensajes no entiendo eso de Fox Friends.

 

Mientras me llegaba la respuesta conseguí hacerlo planteando por etapas, procesando primeramente las coincidencias directas que según estoy viendo son del 80%, el proceso es lento, 30 mil registros por hora.  Pero como se haría esto una sola vez, me la tendré que aguantar.

 

 

Saludos.

 

Javier cabrera blanco

Listas FoxParaguay

unread,
Feb 6, 2013, 6:41:22 AM2/6/13
to publice...@googlegroups.com

Hola Carlos

 

Wow !! Gracias por tu tiempo

 

Te explico mi caso.  Tengo una tabla de 3 millones de registros con números telefónicos (móvil/celulares) y nombres y en otra tabla tengo fecha de nacimiento, sexo y ciudad en donde vive, etc.   Del proceso que consegui desarrollar consegui relacionar en un 80%, es decir de cada 10.000 registros 80.000 son idénticos o sea se pertenecen.  Con esto ya es suficiente, pues lo que estoy buscando crear es una lista para envios de mensajes promocionales SMS dirigidos por edad, sexo y ciudad.

 

Fuerte abrazo ¡! Y gracias de nuevo.

Guillermo MDQ

unread,
Feb 6, 2013, 8:50:29 AM2/6/13
to publice...@googlegroups.com, lis...@foxparaguay.com.py
Cada vez que recibo uno de esos odiosos SMS promocional en mi celular me acuerdo de mucha gente, y vos FoxParaguay tambien vas a estar en esa lista a partir de ahora, jajajaja

Saludos
Guillermo

Listas FoxParaguay

unread,
Feb 6, 2013, 9:29:21 AM2/6/13
to publice...@googlegroups.com

Sucede que spam via email ya no funcionan como antes desde que llego Facebook. 

 

Increíblemente los SMS siguen siendo un medio efectivo para divulgar promociones o mensajes “útiles”.

 

 

Javier Cabrera Blanco

 

PD:  Yo también odio esos mensajes, especialmente cuando provienen de la compañía telefónica.

Carlos Miguel FARIAS

unread,
Feb 6, 2013, 6:20:07 PM2/6/13
to publice...@googlegroups.com
Y Javier? Que queréis que te diga, bastante te pase, y si sabia para que era, no ayudaba nada (;-)).
En su afán de publicidad, las empresas hacen mierda los medios de comunicación.
En la radio, el que hace publicidad, la paga, y bien caro. Ni te cuento en la tv.
Pero con el correo electrónico, los sms y demás, que tienen costo bajisimo, son terriblemente molestos.
El 80/90% del correo que circula en el mundo es spam (toso).
Si mi proveedor de servicio móvil, me ofrece un servicio, bueno, soy cliente de él, lo que me revienta es cuando manotean de algún lado el numero de celular y te manda publicidad no solicitada.
No me meto en twiter ni facebook, porque si con dos o tres foros profesionales, me lleva dos horas manejar los mensajes, me imagino que en la vorágine de de esos medios de comunicación social, te hundís hasta la m...

Saludos: Miguel, La Pampa (RA)

miltonvas

unread,
Feb 7, 2013, 6:54:38 PM2/7/13
to publice...@googlegroups.com, lis...@foxparaguay.com.py
No entendi de cada 10000 ...80000 son identicos .....se ve que hay repetidos

Armando Rodríguez Bermúdez

unread,
Feb 7, 2013, 7:03:33 PM2/7/13
to publice...@googlegroups.com

Seguramente intentó decir que de cada 100,000 registros, 80,000 son idénticos

 

Saludos

Listas FoxParaguay

unread,
Feb 8, 2013, 3:31:32 PM2/8/13
to publice...@googlegroups.com

De cada 100.000, 80.000 son idénticos.  Equivale al 80%.   Estos es comparando la cadena completa de nombres.  

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de miltonvas


Enviado el: jueves, 07 de febrero de 2013 08:55 p.m.
Para: publice...@googlegroups.com
CC: lis...@foxparaguay.com.py

Reply all
Reply to author
Forward
0 new messages