2011-02-09 20 views
9

Infierno,¿La mejor manera en php para encontrar las cadenas más similares?

PHP tiene muchas funciones de cadena como levenshtein, similar_text y soundex que pueden comparar cadenas de similitud. http://www.php.net/manual/en/function.levenshtein.php

¿Cuál es la mejor precisión y rendimiento?

+1

Creo que esto sería más adecuado como Wiki de la comunidad –

+2

Sin saber demasiado sobre los detalles de implementación de las diferentes funciones, tengo la intuición de que no se puede aspirar a la precisión y el rendimiento. Probablemente sean un poco inversamente proporcionales. –

+0

@ András Es posible que pueda responder cuál es mejor para el rendimiento, y cuál es mejor para la precisión. – Adam

Respuesta

8

similar_text tiene una complejidad O (max (n, m) ** 3) y levenshtein una complejidad de O (m * n), donde nym son las longitudes de las cadenas, por lo que levenshtein debería ser mucho más rápido. Ambas son 100% precisas, ya que dan la misma salida para la misma entrada, pero las salidas para cada función serán diferentes. Si usa una medida de precisión diferente, deberá crear su propia función de comparación.

+0

En realidad, acaba de comprobar en php y su complejidad es diferente: "La complejidad del algoritmo (levenshtein) es O (m * n), donde n y m son la longitud de str1 y str2 (bastante bueno en comparación con similar_text() , que es O (max (n, m) ** 3), pero sigue siendo caro). " – giorgio79

+0

Depende mucho de lo que sea diferente para usted. Encontré 'similar_text' para adaptarme mejor a mi caso. 'levenshtein' devolverá más similitudes si las cadenas tienen la misma longitud. Por ejemplo: 'marco blabla' en comparación con 'rob blabla' dio 81.8% (texto similar) y 4 (levenshtein). Y 'jan blabla' en comparación con 'rob blabla' dio el 70% (similar_text) y 3 (levenshtein). Así que 'levenshtein' cree que los últimos son más similares y' similar_text' cree que los primeros son más similares. – Lode

Cuestiones relacionadas