Encontrar tipos similares de nombres | Búsqueda difusa en SQL

Búsqueda difusa:
una técnica para encontrar las strings que coinciden con un patrón aproximadamente (en lugar de exactamente). Los usuarios/revisores a menudo capturan los nombres de forma imprecisa. El error de escritura es un error muy común que comete el revisor al capturar los nombres, lo que genera inconsistencias en los datos. Pero a veces, necesitamos buscar o hacer coincidir estos datos inexactos de todos modos. Por ejemplo, los usuarios deben hacer coincidir los registros de clientes existentes en lugar de crear duplicados no deseados.

Declaración del problema:
encontrar todo tipo de errores que se describen en la siguiente tabla, por ejemplo, error de ortografía, nombre incompleto, problema de formato, falta de sufijo.

     Primer nombre           Apellido             Primer nombre          Apellido                   Tipo de error                  
Benjamín Alguacil Benjamín alguacil Error de ortografía
Cacao Fairchil Cacao justo Error de ortografía
danuzio Pinheiro danuzio pinherio Error de ortografía
jeff voz jeff Voigt Error de ortografía
María prendergast María Prendergrast Error de ortografía
Miguel Heinrich Miguel enriquecimiento Error de ortografía
nghia Le nghia Sotavento Error de ortografía
leonardo Madrigal leonardo madrigal del valle Nombre incompleto
Yolanda Balcázar Yolanda Balcazar-Rodríguez Nombre incompleto
j García Martínez j García-Martínez Problema de formato
lauren Señor – Tuley lauren Lord-Tuley Problema de formato
Virginia polea alberts Virginia Polea-Alberts Problema de formato
Connie Marcas Connie Marcas IV Falta el sufijo
Daniel Ladd Daniel ladd jr Falta el sufijo
Rodrigo Delgado Rodrigo Delgado Jr. Falta el sufijo
Tomás Grifo Tomás grifo iii Falta el sufijo
Wayne Maricón Wayne nance Falta el sufijo

Enfoque para resolver:
la función SOUNDEX() puede encontrar la inconsistencia en los nombres. SOUNDEX() puede evaluar la similitud de dos nombres. SOUNDEX() solo funciona bien cuando tenemos 1 o 2 tokens. Los nombres generalmente contienen 1 o 2 tokens, por lo que funciona bien con Name. Pero si queremos encontrar nombres similares para la empresa, no es tan útil ya que contiene varios tokens.

Datos:
Benjamin Sheriff y Benjamin Sherrif donde FirstName es el mismo pero cualquiera de los LastName tiene un error ortográfico. Asimismo, hay muchos errores en estos datos, como problemas de formato, nombres incompletos.

               Primer nombre                            Apellido              
Benjamín Alguacil
Benjamín alguacil
Virginia polea alberts
Virginia Polea-Alberts
Geoffery Bown
Geoffrey Bown
Antonio Castoldí
Antonio Castoldí
Rodrigo Delgado
Rodrigo Delgado Jr.
leonardo Madrigal
leonardo madrigal del valle
michelle Myers
Mitchell Myers

Código:
Caso-1: FirstName es exactamente igual pero LastName es de un tipo similar.
Caso-2: LastName es exactamente igual pero FirstName es de un tipo similar.

Analicémoslo uno por uno de la siguiente manera.

Caso-1: 
FirstName es exactamente igual pero LastName es de tipo similar:

select distinct ss.firstname,ss.lastname,sd.firstname,sd.lastname
from load as ss, load as sd
where ss.firstName=sd.firstName and SOUNDEX(ss.lastName)=SOUNDEX(sd.lastname)
      and
      left(ss.lastname,2)=left(sd.lastname,2)
      and
      ss.lastName<>sd.lastName

Producción :

               Primer nombre                            Apellido                              Primer nombre                            Apellido              
Benjamín Alguacil Benjamín alguacil
Benjamín alguacil Benjamín Alguacil
leonardo Madrigal leonardo madrigal del valle
leonardo madrigal del valle leonardo Madrigal
Rodrigo Delgado Rodrigo Delgado Jr.
Rodrigo Delgado Jr. Rodrigo Delgado
Virginia polea alberts Virginia Polea-Alberts
Virginia Polea-Alberts Virginia polea alberts

Caso-2:
LastName es exactamente igual pero FirstName es de tipo similar:

select distinct ss.lastname,ss.firstname,sd.lastname,sd.firstname
from load as ss, load as sd
where ss.lastname=sd.lastname and SOUNDEX(ss.firstname)=SOUNDEX(sd.firstname)
      and
      left(ss.firstname,2)=left(sd.firstname,2)
      and
      ss.firstname<>sd.firstname

Producción :

S. No.                Primer nombre                            Apellido                              Primer nombre                            Apellido              
1. Antonio Castoldí Antonio Castoldí
2. Antonio Castoldí Antonio Castoldí
3. Geoffery Bown Geoffrey Bown
4. Geoffrey Bown Geoffery Bown
5. michelle Myers Mitchell Myers
6. Mitchell Myers michelle Myers

Referencia:
Enlace Github – https://github.com/SuryaSD/Finding-Similar-Types-of-Names-Fuzzy-Search

Publicación traducida automáticamente

Artículo escrito por suryadas218 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *