Ordinamento e pertinenza

0.00 avg. rating (0% score) - 0 votes

Ragionavo con un amico su come mostrare i risultati di ricerca all’interno di un sito e le considerazioni che ne sono scaturite potrebbero esere utili ad altri, le riporto in questo post anche nel caso qualcuno desideri contribuire. La discussione ipotizza una chiave di ricerca composta da 4 parole ed un elenco sconfinato di articoli in cui cercare.

Secondo il Devoto-Oli la pertinenza è una “Relazione di reciprocità sul piano delle attribuzioni logiche o funzionali“, quindi ordinare per pertinenza significa mostrare prima i risultati più vicini alla ricerca effettuata. Le attribuzioni di cui si parla fanno però la differenza, infatti occorre definire contestualmente la “pertinenza” perché le necessità sono diverse in base alle singole situazioni.

Presenza delle parole
Il metodo più semplice potrebbe essere quello di considerare il numero di parole cercate presenti nell’articolo. Per coprire tutti i casi bisogna estrapolare (query) gli articoli che contengono almeno una parola che assomigli a quelle cercate (Testo LIKE ‘%parola1%’ OR Testo LIKE ‘%parolaN%’ oppure tramite una catalogazione full-text). Ovviamente il risultato sarà un alto numero di articoli con solo una delle quattro parole e un numero decrescente di articoli che si avvicinano alla chiave completa, indipendentemente dal fatto che le parole siano vicine o lontane tra loro nel testo dell’articolo. A questo punto bisogna ordinarle secondo questo criterio e mostrare i risultati.

Relazione tra le parole
Un altro metodo che ci è venuto in mente è quello di ragionare sulla distanza delle singole parole all’interno del testo di ogni articolo, in questo caso la procedura di estrapolazione (query) degli articoli dovrà essere fatta con l’operatore logico AND invece dell’OR (Testo LIKE ‘%parola1%’ AND Testo LIKE ‘%parolaN%’ oppure tramite una catalogazione full-text). Ora bisogna contare il numero di parole non interessanti che separano le parole cercate e proporzionalmente attribuire un punteggio all’articolo; questo numero verrà poi utilizzato per ordinare l’elenco. Il metodo potrebbe avere delle sfumature ulteriori per migliorare i risultati, ad esempio un articolo in cui 3 parole della ricerca si trovano attaccate (separate solo da uno spazio) dovrebbe considerarsi più importante di un articolo in cui solo 2 parole sono attaccate, anche nel caso in cui il numero di parole non interessanti che separano i gruppi sia uguale (cioé nel caso in cui il punteggio risulti identico).

Il significato delle parole
Entrambi i metodi precedenti non tengono conto di un importante valore: la parola intera è più importante della parola parziale, cioé contenuta all’interno di un’altra. Ad esempio cercando “osso” troverò sia la frase “ho un rossore sul braccio” che “me gusta l’osso buco!” ma possiamo presupporre che quest’ultima sia potenzialmente più pertinente della prima.

La social relevance
Nel caso in cui ci fosse uno archivio storico delle ricerche effettuate ed il servizio riuscisse a garantire un’alta frequenza di utilizzo allora potremmo ragionare anche sull’analisi del comportamento degli utenti, in maniera da istruire automaticamente il sistema. Con questa logica risulta più rilevante l’articolo che è stato precedentemente cliccato dal maggior numero di persone utilizzando la stessa chiave di ricerca, in pratica se qualcuno prima di me ha cercato la stessa cosa ed ha cliccato su un certo risultato, posso supporre che quell’articolo sia più interessante degli altri.

Ma possiamo anche definire più pertinente l’articolo che viene maggiormente linkato tra le pagine del sito, o ancora ragionare in base ad un punteggio, oppure… ogni metodo ha i suoi vantaggi ed i suoi svantaggi. Voi cosa suggerite?

3 commenti per Ordinamento e pertinenza
  1. Fabio Rispondi

    …e non dimentichiamo il peso della posizione delle parole. Le parole presenti nel titolo dell’articolo indicheranno con ogni probabilità maggiore pertinenza rispetto alle stesse parole trovate nel testo. Potrebbe quindi rilevarsi utile stabilire anche un indice di rilevanza per le zone su cui si effettua la ricerca.

  2. Fabio Rispondi

    A partire dal post precedente ho creato uno script per fare una ricerca per pertinenza. L’idea è questa: ripuliamo la stringa di ricerca da elementi non rilevanti ai fini della ricerca(congiunzioni, punteggiatura) per ottenere l’elenco delle keyword che riuniremo in un array.
    Con un ciclo sulle keyword possiamo creare la nostra query. Alla funzione passiamo le keyword, il peso delle parole nel titolo e nel testo e il livello di accuratezza della ricerca che dirà se la ricerca dovrà cercare la parola anche se contenuta in altre(cerco osso trovo ossobuco) o meno.
    Sommando il peso delle parole chiave trovate otterremo la rilevanza del risultato. Con 3 keyword trovate nel titolo(rilevanza 5) otterremo 15 punti. Con 4 parole nel testo(rilevanza 3) otterremo 12 punti per un totale di 27 punti.

  3. Fabio Rispondi

    Lo script php/mysql si trova qui se a qualcuno puo’ servire/interessare:
    http://www.free-script.it/post/Script_php_Ordinare_risultati_di_ricerca_per_rilevanza_e_pertinenza-29.htm
    E’ commentato per cui anche chi mastica asp non dovrebbe faticare a comprendere il funzionamento. Lo script è migliorabile, non tiene conto ad es del num di occorrenze di ogni parola. Un titolo “key1 key2” ha stessa rilevanza di “key1 key2 key2”. Con la funzione mysql substrCount, che conta occorrenze di una stringa in altra, si puo’ ovviare, ma solo in Mysql 5(se qualcuno ha altre idee..).

Lascia un commento

Il tuo indirizzo mail non verrà pubblicato. Inserisci il tuo nome, la tua mail e il commento.