- Home
- Categorie
- Coding e Sistemistica
- PHP
- Cercare testo simile (come google)
-
Cercare testo simile (come google)
Ciao a tutti, qualcuno si cimentato nell'impresa di effettuare delle ricerche con test simile, un pò come fa google? In particolare io avrei un database di termini, e dovrei vedere se il testo inserito dall'utente è contenuto tra questi o se almeno si avvicina a uno di questi.
-
Ciao cali1981
per il "similare" non saprei dirti, per controllare che il testo digitato sia contenuto nel Db puoi usare l'istruzione LIKE
[php] $sql="SELECT * FROM table WHERE termine LIKE '%$text%'";[/php]
che se uno digita per esempio per lui mi estrapolerà i termini:
percentuale
Copernico
super
etc etc
ma per somiglianza credo che ci sia da inventarsi qualcosa che al momento non mi sovviene
-
Si in effetti il like non è un problema, io cercavo un modo per trovare parole simili, ad esempio con una lettera diverso.
-
La prima cosa che mi vien in mente e' fare delle substringhe e quindi fare più query i cui valori vengon salvati in array, poi estrarti dagli array ottenuti il termine che magari è presente in tutte o magari e' maggiormente presente....ma la vedo trafficosa
-
Esiste una funzione di PHP, che permette di controllare le similitudini tra due stringe.
La funzione similar_text(); restituisce i caratteri comuni nelle due stringhe e opzionalmente anche la percentuale di similarità.
Una versione più veloce, ma meno accurata, è la funzione* levenshtein();
*
Esempio:
[php]
$parola = "carotta";
$termini = array("carro", "carota", "limone");foreach($termini as $termine)
{
$num_char = similar_text($parola, $termine, $percententuale);echo "$num_char caratteri di '$parola' sono contenuti in '$termine'"; echo " (" . round($percententuale) . "%)<br>";
}
//OUTPUT
//
//4 caratteri di 'carotta' sono contenuti in 'carro' (67%)
//6 caratteri di 'carotta' sono contenuti in 'carota' (92%)
//1 caratteri di 'carotta' sono contenuti in 'limone' (15%)
[/php]Ciao!
-
Si forse questa potrebbe andare, certo se ho un db con molti campi ci vuole un casino di tempo, se ci fosse una funzione simile in mysql...
-
Dovresti unire la funzione similar_text(); con LIKE di MySQL.
Esempio:
Parola scritta: cioa
Fai una ricerca LIKE su "ci", sottostringa di "cioa". ( ...LIKE '%ci%'; )
Esegui la funzione di PHP, su tutti i termini di ritorno dalla query.
I termini da paragonare ora sono molti meno e sicuramente contengono anche il possibile sostituto "ciao".
-
Si anche questo potrebbe essere un modo, ma va visto quanto complesso computazionalmente. Comunque forse levenshtein è meglio perchè ti dice la similarità di una stringa. Si potrebbe prendere un sottoinsieme di tutte le stringhe tramite like e poi si applica questa funzione.
-
E invece di questo che ne dite?? usphp.com/function.pspell-new.html
In pratica restituisce un dizionario, poi si può usare pspell_check e pspell_suggest per controllare e suggerire una correzione. E' da vedere quanto è ampio il dizionario, comunque ci siamo! Se uno poi ha necessità particolari, ovvero se ad esempio non si deve correggere in base al dizionario ma a un elenco custom, penso si possa sostituire questo elenco al dizionario. Mo provo!Ciao
-
mi sto interessando anche io a questo problema e le elucubrazioni mentali che ho fatto fino ad ora sono:
-
archivio delle ricerche fatte per poter suggerire un "forse cercavi: xxxxx"
questa cosa la puoi ottenere con i suggerimenti che ti sono stati dati prima del mio intervento unendoli a questo archivio di ricerche fatte. -
testi full text e relativa ricerca.
per darti un'idea delle possibilità di una ricerca full text fai una ricerchina su gg con la key "ricerca full text" e troverai delle ottime info per capire la differenza tra una ricerca con like e una FT
ciao
-