comparaciones entre string en BD

Tengo el siguiente problema: Estoy trabajando con bases de datos que tiene registrados información de empresas de los últimos 20 años. La variable clave para unir cada base y poder hacer una trazabilidad o evolución de las mismas en el tiempo es el CUIT. Pero me fui dando cuenta es que muchas empresas lo que hacen es darse de baja y volverse registrar en la AFIP para evitar pagar impuestos. Como la denominación es algo que no pueden cambiar mucho (ej, Panadería la estrella), para no confundir a su clientes, lo que hacen es registrarse con otra denominación pero que no sea tan distinta (Ej, La estrella, panificados). Lo que necesitaría es que sugiera algun procedimiento, lenguaje o aplicación que me permita hacer comparaciones entre string de dos bases de datos y encontrar similitudes. Yo después puedo hacer consistencias de estas similitudes con otras variables, por ejemplo, el plantel de empleados, su número de registro en el Anses o si fue empleado en ambas empresas comparadas. Desde ya muchas Gracias y disculpas por la ausencia. Volveré y seré (BITS) jaj

 Hola, 

 

Sin complicarse mucho, puedes utilizar el operador LIKE para buscar similitudes entre cadenas.

 

Por ejemplo, si lanzas la consulta:

 

select * from table where nombre like '%estrella%' 

 

obtendrás todas las empresas cuyo nombre contenga la palabra estrella. 

Partiendo de esa base podrías hacer algún procedimiento un poco más complejo que fuera buscando coincidencias palabra por palabra, contando coincidencias y luego haciendo un ranking. 

Es un método muy "tosco" pero para lo que quieres me parece una buena opción para intentar una primera aproximación.

 

Saludos!

Hola Alfonso

Has tocado un tema que me gusta, así que a lo mejor te complico la vida un poco más que Antonio ;)

Para empezar te recomiendo echar un vistazo al artículo Datacleansing con Power*MatchMaker/ DQGuru, es antiguo pero creo que es justo el tipo de aplicación que necesitas si quieres detectar similitudes entre registros.

Google también ha sacado una herramienta que te podría servir, se llama Google Refine, te enlazo el tema Cruzar o unificar datos con texto no coincidente en el que lo comentaba, y sale algun software más.

Otra posibilidad es trabajar a nivel de bases de datos. Oracle tiene opciones de matching de cadenas y búsqueda de similitudes, pero creo que sólo están disponibles como opción, o en la versión Enterprise.

MySQL tiene Full-Text Search, te enlazo el post InnoDB Full-Text Search Tutorial del blog Transactions on InnoDB, que lo explica muy bien.

 

Ya nos irás explicando por qué método te decides y los resultados que obtienes.

Saludos,