Como dijo Alexei Yavlinsky, la distancia de edición es un buen punto de partida, pero creo que se puede mejorar. Considere el siguiente ejemplo:
John Doe vs Johana Doe vs Jonathan Doe
John y Jonathan son típicamente nombres masculinos, mientras que Johana es femenino, pero tiene una distancia de edición menor (John – Johana tiene una distancia de 2, John – Jonathan tiene una distancia de 4). Pero aún así, John y Jonathan son más similares. Le recomendaría que utilice la base de datos de nombres de hombres / mujeres, desde la cual puede razonar más sobre el género de las personas. También eche un vistazo a Determinar el género de una API de nombre, que le da probabilidad de género, para el nombre dado. Si el género de 2 nombres coincide o tiene mayor probabilidad, debería haber una mejor puntuación para esos pares. Entonces, John debería ser más similar a Jonathan que a Johana, independientemente de la distancia de edición.
- ¿Puede el aprendizaje profundo predecir los dígitos de Pi?
- ¿Cómo debo explicar el modelo matemático de la red neuronal con ejemplos adecuados?
- ¿Por qué los académicos usan Matlab / Octave y tan pocos en la industria?
- ¿Por qué podría mejorarse el arrepentimiento del bandido lineal mediante una proyección aleatoria?
- ¿Cómo puede alguien usar los datos de la secuencia de genes para encontrar genes responsables de una enfermedad genética en particular?
Intente también tomar títulos / prefijos de nombre como: ms., Mrs., Mr., Miss. en cuenta. No sé cuál es su fuente de nombres, pero si obtiene títulos de personas con él, aproveche esa información (Mr significa nombre masculino, Mrs significa nombre femenino). Puede formar una expresión regular para unir títulos masculinos / femeninos.
Los algoritmos típicos de distancia de edición para medir la similitud entre 2 cadenas son Levenshtein o Jaro-Winkler. Te sugiero que eches un vistazo a la medida de similitud de Simon-White, que personalmente considero más precisa y significativa. Ejecute su propia prueba para ver qué funciona mejor para usted. Hay una biblioteca Java de Simmetrics que tiene muchas medidas de similitud de cadenas ya implementadas.
Mi proceso propuesto es algo así:
Línea de base : la probabilidad es 1 si “nombre x” es igual a “nombre y” – (John Doe vs John Doe = 1)
– Etiquete cada parte (palabra) de entrada con las siguientes etiquetas: # primer nombre, # último nombre, # nombre intermedio, # prefijo (mr., Mrs., Etc.), #suffix (II, Jr., etc.). Use regex (comienza con, termina con) para # prefijo / # sufijo, base de datos masculina / femenina para # nombre de pila, base de datos de apellido (como esta) para # nombre de pila, use algunas reglas simples para # nombre medio como “segundo nombre es palabra entre nombre y apellido “.
– Asigne el parámetro de importancia / peso a cada etiqueta, por lo que #firstname y #lastname deberían ser más importantes que #middlename, etc.
– Intente determinar el género de la persona de acuerdo con su primer nombre, segundo nombre.
– ¿Podemos obtener el género del prefijo? En caso afirmativo, ¿el prefijo coincide con #firstname (y #middlename) género?
– Calcular similitud de cadena entre 2 tokens de la misma etiqueta …
Su ejemplo: John Doe = Sr. Jonathan M Doe II
– Ambas entradas indican que esa persona es un hombre. Ninguna penalización.
– Si su etiquetado es correcto, indicamos que los apellidos coinciden: Doe = Doe. Ninguna penalización.
– Falta el prefijo “Sr.” no debería disminuir la puntuación por mucho, porque sabemos que John y
Jonathan son nombres masculinos, un Sr. es prefijo para hombres. Pequeña multa por extrañar al Sr., por ejemplo, 0.05.
– Falta el segundo nombre de M, debería, desde mi punto de vista, disminuir la puntuación por un poco más que el prefijo. Penalización por falta del segundo nombre M, p. Ej. 0.08.
– Penalización por Jonathan que no coincide con John. por ejemplo (distancia Simon-White entre 2 cuerdas) * peso.
Haz algo de normalización y tienes tu probabilidad.