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 comparar de manera eficiente dos diccionarios de listas de cadenas usando difflib?

Tengo dos diccionarios grandes de listas. Todos los elementos de las listas son cadenas de texto. Quiero comparar todos contra todos y calcular su similitud respectiva; pero el método ingenuo que utilizo es obviamente muy lento y no escala en absoluto:

import numpy as np
import difflib

first_dict = {"first1": ["aa", "bb", "cc", "dd"], "first2": ["ff", "gg"]}

second_dict = {"second1": ["cc", "dd", "jj", "aa", "bb"], "second2": ["ff", "gg"], "second3": ["hh", "ii"]}

mat = np.empty((len(second_dict), len(first_dict)))

for i, second in enumerate(second_dict.keys()):
    for j, first in enumerate(first_dict.keys()):
        sm = difflib.SequenceMatcher(None, sorted(first_dict[first]), sorted(second_dict[second]))
        mat[i, j] = sm.ratio()

print(mat)

¿Hay alguna manera inteligente de acelerar esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay varias formas de acelerar este código. Un enfoque podría ser usar la multiprocesamiento para paralelizar el cálculo de la matriz de similitud. Esto permitiría al código aprovechar los múltiples núcleos de CPU y acelerar significativamente el cálculo. Otro enfoque podría ser usar un algoritmo más rápido para calcular la similitud entre las listas, como el algoritmo de distancia de Levenshtein implementado en el paquete Levenshtein de Python. Además, puede ser posible optimizar aún más el código reduciendo cálculos redundantes o utilizando estructuras de datos más eficientes.

Comments are closed.