Skip to content

Instantly share code, notes, and snippets.

@ZeusAFK
Created September 14, 2023 22:49
Show Gist options
  • Save ZeusAFK/2585880c6c32570e67297d0279523428 to your computer and use it in GitHub Desktop.
Save ZeusAFK/2585880c6c32570e67297d0279523428 to your computer and use it in GitHub Desktop.
import json
from Levenshtein import distance
def distancia_minima(a, b):
"""
Calcula la distancia de Levenshtein entre dos cadenas.
"""
return distance(a, b)
def personas_similares(archivo1, archivo2):
"""
Encuentra personas en archivo1 que son similares a las personas en archivo2.
"""
with open(archivo1, 'r') as f1, open(archivo2, 'r') as f2:
lista1 = json.load(f1)
lista2 = json.load(f2)
similares = []
for persona1 in lista1:
mejor_match = None
mejor_distancia = float('inf')
for persona2 in lista2:
distancia_nombre = distancia_minima(persona1['firstname'], persona2['firstname'])
distancia_apellido = distancia_minima(persona1['lastname'], persona2['lastname'])
distancia_total = distancia_nombre + distancia_apellido
if distancia_total < mejor_distancia:
mejor_distancia = distancia_total
mejor_match = persona2
# Aceptar hasta un 20% de diferencia como criterio arbitrario
if mejor_distancia <= (len(persona1['firstname']) + len(persona1['lastname'])) * 0.2:
similares.append((persona1, mejor_match))
return similares
# Ejemplo de uso
archivo1 = "ruta/del/archivo1.json"
archivo2 = "ruta/del/archivo2.json"
print(personas_similares(archivo1, archivo2))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment