2010-05-18 15 views
6

La distancia Levenshtein nos da una manera de calcular la distancia entre dos cadenas similares en términos de caracteres individuales desordenadas:Algoritmo para medir la distancia entre las secuencias desordenadas

 
quick brown fox 
quikc brown fax 

La distancia Levenshtein = 3.

Lo es un algoritmo similar para la distancia entre dos cadenas con subsecuencias similares? Por ejemplo, en

 
quickbrownfox 
brownquickfox 

la distancia Levenshtein es de 10, pero esto no tiene en cuenta el hecho de que las cadenas tienen dos subsecuencias similares, lo que los hace más "similar" que las palabras completamente desordenados como

 
quickbrownfox 
qburiocwknfox 

y, sin embargo, esta versión completamente desordenada tiene una distancia de Levenshtein de ocho.

¿Qué medidas de distancia existen que tienen en cuenta la longitud de subsecuencias, sin asumir que las subsecuencias se pueden dividir fácilmente en palabras distintas?

+1

¿Cómo es este tema fuera de tema? Tal vez uno podría simplemente mejorar el título. – Dario

+0

Se le preguntó muchas veces bajo un mejor nombre: o) http://stackoverflow.com/questions/451884/similar-string-algorithm o http://stackoverflow.com/questions/653157/a-better-similarity-ranking-algorithm -for-variable-length-strings o http://stackoverflow.com/questions/246961/algorithm-to-find-similar-text Por cierto: me gusta especialmente la idea con la distancia basada en la compresión. – MaR

+0

@Dario: ¿Qué título sugerirías? –

Respuesta

0

puñalada inicial: utilizar un algoritmo de diff y el recuento del número de diferencias como su distancia

1

Creo que se puede tratar shingles o algunas combinaciones de ellos con Levenshtein distancia.

0

Tengo la impresión de que es un problema NP-completo.

Al menos, no veo cómo podemos evitar una búsqueda exhaustiva. Además, no puedo ver cómo podemos verificar la solución dada en tiempo polinomial.

0

Una métrica simple sería tomar todas las subcadenas n * (n-1)/2 en cada cadena, y ver cuántas superposiciones. Hay algunas variaciones simples en este enfoque donde solo se observan subcadenas de hasta cierta longitud.

Esto sería similar al puntaje BLEU comúnmente utilizado para evaluar las traducciones automáticas. En el caso de BLEU, están comparando dos oraciones: toman todos los unigrams, bigrams, trigrams y 4 gramos de palabras de cada oración. Calculan una versión de precisión y recuperación para cada uno, y esencialmente usan un promedio de esos puntajes.

0

Bueno, el problema al que se refiere cae bajo la gramática sensible al contexto. Básicamente define una gramática, la gramática inglesa en este caso y luego encuentra la distancia entre una gramática y una discordancia. Primero tendrá que analizar su entrada.

+0

No es la gramática inglesa. Estas no son palabras en inglés. –

Cuestiones relacionadas