Mysql
 sql >> Database >  >> RDS >> Mysql

corrispondenza di ricerca php (fuzzy).

Sfortunatamente, farlo in PHP è proibitivo (utilizzo elevato della CPU e della memoria). Tuttavia, puoi sicuramente applicare l'algoritmo a piccoli set di dati.

Per espandere in modo specifico come creare un collasso del server:un paio di funzioni PHP integrate determineranno la "distanza" tra le stringhe:levenshtein e testo_simile .

Dati fittizi:(fingi che siano titoli di notizie)

$titles = <<< EOF
Apple
Apples
Orange
Oranges
Banana
EOF;

$titles = explode("\n", $titles );

A questo punto, $titles dovrebbe essere solo una matrice di stringhe. Ora, crea una matrice e confronta ogni titolo con OGNI altro titolo per somiglianza. In altre parole, per 5 titoli, otterrai una matrice 5 x 5 (25 voci). È qui che entrano in gioco la CPU e il dissipatore di memoria.

Ecco perché questo metodo (tramite PHP) non può essere applicato a migliaia di voci. Ma se volessi:

$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  );
}

A questo punto ciò che sostanzialmente hai è una matrice con "distanze di testo". Concettualmente (non nei dati reali) assomiglia a questa tabella qui sotto. Nota come c'è un insieme di 0 valori che vanno in diagonale, ciò significa che nel ciclo di corrispondenza, due parole identiche sono -- beh, identiche.

       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

L'effettivo array $matches assomiglia a questo (troncato):

Array
(
    [Apple] => Array
        (
            [Apple] => 0
            [Apples] => 1
            [Orange] => 5
            [Banana] => 6
            [Oranges] => 6
        )

    [Apples] => Array
        (
      ...

Ad ogni modo, sta a te (mediante la sperimentazione) determinare ciò che un buon taglio numerico della distanza potrebbe corrispondere principalmente - e quindi applicarlo. Altrimenti, leggi su sphinx-search e usalo, poiché ha librerie PHP.

Orange sei contento di averlo chiesto?