2011-10-12 8 views
5

Ho bisogno del codice MySQL per il controllo della percentuale di similarità tra il testo inviato tramite modulo rispetto a un numero di testi memorizzati nel database MySQL.Funzione MySQL per il controllo della percentuale di similarità tra due testi

Sto cercando una stored procedure MySQL che funzioni come la funzione PHP similar_text() di PHP. C'è già la procedura per la distanza di MySQL Levenshtein, ma non è sufficiente.

Quando l'utente invia il testo l'algoritmo deve restituire qualsiasi voce nel database con una data percentuale di somiglianza al testo inviato (confronterà solo una colonna nel database), ad es. Restituisce tutte le voci dal database che hanno somiglianza> 40% con il testo inviato dall'utente.

es tabella

TABLE - Articles 
id, article_body, article_title 

codice dovrebbe restituire tutte le righe che hanno somiglianza percentuale> 40% (o altro valore dato) con il testo (article_body) l'utente hanno presentato.

risposta

0

penso algoritmo dovrebbe essere come questo ..

  • prima calcolare la lunghezza della parola data (usando LENGTH).
  • quindi cercare quella parola nella colonna specifica (utilizzando INSTR o qualsiasi funzione specifica)
  • ora calcolare la lunghezza di ogni parola abbinata e utilizzare la matematica semplici

per esempio: voglio cercare 'Inferno 'coordinata con più del 50% e nel mio db ci sono 2 parole corrispondenti' Ciao mondo 'e' Hellboy '

lunghezza (inferno) = 4
lunghezza (ciao mondo) = 11
lunghezza (Hellboy) = 7

per ciao mondo (11-4)/11 = 63,63%
per Hellboy (7- 4)/7 = 42,85%

ora solo il Hello World verrà reintrodotto in base al calcolo precedente.

spero che funziona ..

1

lo farei nell'applicazione.

Forse risultato della funzione SOUNDEX vi aiuterà -

SELECT SOUNDEX('Hello'), SOUNDEX('Hello world'), SOUNDEX('hellboy'); 
+------------------+------------------------+--------------------+ 
| SOUNDEX('Hello') | SOUNDEX('Hello world') | SOUNDEX('hellboy') | 
+------------------+------------------------+--------------------+ 
| H400    | H4643     | H410    | 
+------------------+------------------------+--------------------+ 
+0

Ma per ottenere la differenza percentuale si deve confrontare quelle corde che si ottiene come risultato di SOUNDEX ... e il cerchio continua. – Matmarbon

Problemi correlati