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 utilizar SpaCy para calcular la similitud promedio entre cada elemento de texto de una lista?

Estoy tratando de determinar cómo están interrelacionados semánticamente los elementos en una lista dada. Por ejemplo, para la siguiente lista de sustantivos, me gustaría obtener la puntuación promedio de similitud entre cada par posible (sin tener que hacerlo manualmente par por par, como se describe también a continuación).

wordlist=['molds', 'brick', 'pipe', 'hand', 'iron']

doc1 = nlp("molds")
doc2 = nlp("brick")

Similitud entre dos documentos:
print(doc1, "<->", doc2, doc1.similarity(doc2))

Supongo que hay alguna forma de hacer esto utilizando bucles, sin embargo, todavía soy principiante en Python, por lo que estoy luchando por pensar cuál sería la sintaxis. ¡Cualquier sugerencia sería muy apreciada!

Gracias,

Juan

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hola Juan,

    Puedes utilizar un bucle anidado para calcular las puntuaciones de similitud entre todas las posibles parejas de elementos en la lista proporcionada. Aquí tienes un ejemplo de código:

    import spacy
    
    nlp = spacy.load('en_core_web_md')
    
    wordlist = ['molds', 'brick', 'pipe', 'hand', 'iron']
    
    # Crea una lista para almacenar las puntuaciones de similitud
    similarity_scores = []
    
    # Recorre cada pareja de elementos en la wordlist y calcula la similitud
    for i in range(len(wordlist)):
        for j in range(i+1, len(wordlist)):
            doc1 = nlp(wordlist[i])
            doc2 = nlp(wordlist[j])
            similarity_score = doc1.similarity(doc2)
            similarity_scores.append(similarity_score)
            print(wordlist[i], "<->", wordlist[j], similarity_score)
    
    # Calcula la puntuación de similitud promedio
    average_similarity_score = sum(similarity_scores) / len(similarity_scores)
    print("Puntuación de similitud promedio:", average_similarity_score)
    

    Este código utiliza la función range para recorrer todas las posibles parejas de elementos en la wordlist. El elemento de índice i se compara con cada elemento posterior a él (el elemento de índice j). Añadimos la puntuación de similitud a una lista y la imprimimos en la consola. Finalmente, calculamos la puntuación de similitud promedio sumando todas las puntuaciones de la lista y dividiéndolas por el número total de puntuaciones.

    Espero que esto te sea útil. Hazme saber si tienes alguna pregunta.

Comments are closed.