2011-02-09 5 views
9

Hell,Il modo migliore in php per trovare le stringhe più simili?

PHP ha molte funzioni di stringa come levenshtein, similar_text e soundex che possono confrontare stringhe per similarità. http://www.php.net/manual/en/function.levenshtein.php

Qual è il migliore per precisione e prestazioni?

+1

Penso che questo sarebbe più adatto come Wiki di comunità –

+2

Senza sapere troppo sui dettagli di implementazione delle diverse funzioni, ho la sensazione che non si possa mirare sia alla precisione che alle prestazioni. Probabilmente sono di tipo inversamente proporzionale. –

+0

@ András Potresti essere in grado di rispondere che è meglio per le prestazioni, e tuttavia è meglio per la precisione. – Adam

risposta

8

similar_text ha una complessità O (max (n, m) ** 3) e levenshtein una complessità di O (m * n), dove n e m sono le lunghezze delle stringhe, quindi levenshtein dovrebbe essere molto più veloce. Entrambi sono accurati al 100%, in quanto forniscono lo stesso output per lo stesso input, ma le uscite per ciascuna funzione saranno diverse. Se si utilizza una diversa misura di precisione, sarà necessario creare la propria funzione di confronto.

+0

In realtà, è sufficiente verificare php e la loro complessità è diversa: "La complessità dell'algoritmo (levenshtein) è O (m * n), dove n e m sono la lunghezza di str1 e str2 (piuttosto buona se comparata a similar_text() , che è O (max (n, m) ** 3), ma comunque costoso). " – giorgio79

+0

Dipende molto da ciò che è diverso da te. Ho trovato 'similar_text' per adattarmi meglio al mio caso. 'levenshtein' restituirà più somiglianza se le stringhe sono della stessa lunghezza. Ad esempio: 'marco blabla' rispetto a 'rob blabla' ha dato 81,8% (testo simile) e 4 (levenshtein). E 'jan blabla' rispetto a 'rob blabla' ha dato il 70% (testo simile) e 3 (levenshtein). Quindi 'levenshtein' pensa che gli ultimi siano più simili e 'similar_text' pensa che i primi siano più simili. – Lode