- Home
- Categorie
- Coding e Sistemistica
- Coding
- 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 
 
-