Desværre er det uoverkommeligt dyrt at gøre dette i PHP (høj CPU- og hukommelsesudnyttelse). Du kan dog helt sikkert anvende algoritmen på små datasæt.
For specifikt at uddybe, hvordan du kan skabe en servernedsmeltning:et par indbyggede PHP-funktioner bestemmer "afstand" mellem strenge:levenshtein og similar_text .
Dummy-data:(lad som om, det er nyhedsoverskrifter)
$titles = <<< EOF Apple Apples Orange Oranges Banana EOF;$titles = explode("\n", $titles );
På dette tidspunkt er $titles skal bare være en række strenge. Opret nu en matrix og sammenlign hver overskrift med HVER anden overskrift for lighed. Med andre ord, for 5 overskrifter vil du få en 5 x 5 matrix (25 poster). Det er her, CPU'en og hukommelsesvasken går ind.
Det er derfor, denne metode (via PHP) ikke kan anvendes på tusindvis af poster. Men hvis du ville:
$matches = array(); foreach( $titles as $title ) { $matches[$title] = array(); foreach( $titles as $compare_to ) { $matches[$title][$compare_to] = levenshtein( $compare_to, $title ); } asort( $matches[$title], SORT_NUMERIC ); }
På dette tidspunkt har du grundlæggende en matrix med "tekstafstande". I konceptet (ikke i rigtige data) ser det ud som denne tabel nedenfor. Bemærk, hvordan der er et sæt af 0 værdier, der går diagonalt - det betyder, at i den matchende løkke er to identiske ord - ja, identiske.
Apple Apples Orange Oranges Banana Apple 0 1 5 6 6 Apples 1 0 6 5 6 Orange 5 6 0 1 5 Oranges 6 5 1 0 5 Banana 6 6 5 5 0
Det faktiske $matches-array ser sådan ud (trunkeret):
Array ( [Apple] => Array ( [Apple] => 0 [Apples] => 1 [Orange] => 5 [Banana] => 6 [Oranges] => 6 ) [Apples] => Array ( ...
Under alle omstændigheder er det op til dig at (ved at eksperimentere) bestemme, hvad en god numerisk afstandsgrænse for det meste kan matche - og derefter anvende den. Ellers læs op på sphinx-search og brug det - da det har PHP-biblioteker.
Orange, du er glad for, at du spurgte om dette?