es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo encontrar nombres de puntos similares o estimados a partir de una lista de direcciones mediante NLP o alguna solución mejor?

Tengo una lista de 500,000 direcciones de diferentes tipos y también tengo una lista de nombres específicos de puntos en la base de datos. Quieres encontrar estos nombres de puntos según las direcciones. Pero hay un problema, muchos nombres de puntos están mal escritos en las direcciones;

por ejemplo:
Nombres de puntos mal escritos en diferentes direcciones: Narayangonj, Norayanganj, Nuraiyagonj
Nombre de punto correctamente escrito en mi lista: Narayanganj

¿Cómo debo programarlo? – Si las palabras del nombre de los nombres de los puntos coinciden de cerca o de manera similar, entonces elegirá los nombres de puntos estimados o apropiados según las direcciones.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes utilizar técnicas de procesamiento del lenguaje natural (NLP, por sus siglas en inglés) para comparar las palabras en la dirección con la ortografía correcta de los nombres de los puntos de tu lista. Una forma de hacer esto es utilizando algoritmos de coincidencia difusa, como la distancia de Levenshtein o la distancia de Jaro-Winkler, para calcular la similitud entre las palabras en la dirección y la ortografía correcta de los nombres de los puntos. Luego puedes establecer un umbral de similitud por encima del cual se considera que la dirección coincide con la ortografía correcta del nombre del punto.

    Aquí tienes un ejemplo de código en Python que muestra cómo utilizar la biblioteca fuzzywuzzy para realizar una coincidencia difusa de cadenas:

    from fuzzywuzzy import fuzz
    
    # Lista de nombres de puntos en ortografía correcta
    point_names = ['Narayanganj', 'Dhaka', 'Chittagong', 'Sylhet', ...]
    
    # Función para encontrar la coincidencia más cercana para una palabra en la lista de nombres de puntos
    def find_matching_point_name(word):
        max_score = 0
        match = None
        for point_name in point_names:
            score = fuzz.ratio(word, point_name)
            if score > max_score:
                max_score = score
                match = point_name
        return match
    
    # Ejemplo de dirección
    address = '123 Main St, Norayanganj'
    
    # Dividir la dirección en palabras separadas
    words = address.split()
    
    # Encontrar la coincidencia más cercana para cada palabra en la lista de nombres de puntos
    matches = [find_matching_point_name(word) for word in words]
    
    # Filtrar los valores None (palabras sin un nombre de punto coincidente)
    matches = [match for match in matches if match is not None]
    
    # Contar la frecuencia de cada nombre de punto coincidente
    point_name_counts = Counter(matches)
    
    # Obtener el nombre de punto coincidente más común
    most_common_point_name = point_name_counts.most_common(1)[0][0]
    
    # Mostrar el resultado
    print(f'La dirección "{address}" es más probable que esté en {most_common_point_name}.')
    

    Este código utiliza la función fuzz.ratio() de la biblioteca fuzzywuzzy para calcular la puntuación de similitud entre cada palabra en la dirección y cada nombre de punto de la lista. Luego selecciona el nombre de punto coincidente más adecuado para cada palabra y filtra cualquier coincidencia que sea None (es decir, la palabra no se parece lo suficiente a ninguno de los nombres de punto). Finalmente, cuenta la frecuencia de cada nombre de punto coincidente y selecciona el más común como el nombre de punto estimado o apropiado para la dirección.

    Ten en cuenta que este código asume que la ortografía correcta de cada nombre de punto en tu lista es conocida y fija. Si hay variaciones en la ortografía de los nombres de punto correctos (por ejemplo, diferentes romanizaciones o traducciones del mismo nombre), es posible que necesites ajustar el algoritmo de coincidencia difusa o utilizar otras técnicas de NLP para manejar estas variaciones.

Comments are closed.