2010-01-28 11 views
15

spesso vediamo "articoli correlati". Ad esempio, nei blog abbiamo post correlati, nei libri abbiamo libri correlati, ecc. La mia domanda è: come li compiliamo? Se si tratta solo di tag, vedo spesso articoli correlati che non hanno lo stesso tag. Ad esempio, quando cerchi "rosa", un elemento correlato potrebbe avere un tag "viola".Come trovare "articoli correlati" in PHP

Qualcuno ha qualche idea?

+0

Ecco anche una domanda correlata http://stackoverflow.com/questions/18019976/mysql-php-find-similar-related-items-by-tag-taxonomy –

risposta

29

ci sono molti modi per calcolare la somiglianza di due elementi, ma per un metodo semplice, prendono uno sguardo al coefficiente di Jaccard.

http://en.wikipedia.org/wiki/Jaccard_index

Che è: J (a, b) = incrocio (a, b)/union (a, b)

So lets say you want to compute the coefficient of two items: 

Item A, which has the tags "books, school, pencil, textbook, reading" 
Item B, which has the tags "books, reading, autobiography" 

intersection(A,B) = books, reading 
union(A,B) = books, school, pencil, textbook, reading, autobiography 

so J(a,b) = 2/6 = .333 

So the most related item to A would be the item which results in the highest Jaccard Coefficient when paired with A. 
1

Può essere più di un tag, ad esempio, può essere la media di ogni opera che appare in un paragrafo, e poi i titoli, ecc

0

può anche essere basata su "persone che hanno acquistato questo libro hanno anche comprato"

Non importa come, avrete bisogno di alcune dort di collegamento tra gli oggetti, ed essi saranno per lo più fatto da esseri umani

4

Ecco alcuni dei modi:

  1. Connettendoli manualmente. Metti su un tavolo con i campi item_id e related_item_id, quindi crea un'interfaccia per inserire le connessioni. Utile per correlare due elementi correlati ma che non hanno alcuna somiglianza o che non appartengono alla stessa categoria/tag (o in una tabella di ingresso non classificata). Esempio: vasca da bagno e ducky di gomma
  2. Estrarre alcuni oggetti appartenenti alla stessa categoria o con tag simili. L'idea è che quegli elementi devono essere in qualche modo correlati poiché sono nella stessa categoria. Esempio: nella pagina che visualizza i monitor LCD, ci sono monitor LCD casuali (con la stessa fascia di prezzo/produttore/risoluzione) nella sezione "Articoli correlati".
  3. Esegui una ricerca di testo che corrisponde al nome dell'elemento corrente (o alla descrizione) rispetto ad altri elementi nella tabella. Hai un'idea.
1

Direi che usano ontology per quello che aggiunge più grandi funzionalità all'applicazione.

2

Per ottenere un semplice elenco di elementi correlati basati sui tag, le soluzioni di base è questa:

3 tavoli, uno con gli articoli, uno con i tag e uno con la connessione. La tabella delle connessioni è composta da due colonne, una per ciascun id delle rimanenti tabelle. Una voce nella tabella delle connessioni collega un tag con un elemento inserendo i rispettivi ID in una riga.

Ora, per ottenere quella lista di elementi correlati.

recuperare tutti gli elementi che condividono almeno un tag con l'elemento originale. assicurati di recuperare i tag insieme agli oggetti, quindi utilizza un semplice meccanismo di classificazione per determinare quale elemento condivide il maggior numero di tag con quello originale. ogni tag aumenta la pertinenza della relazione di uno.

A seconda delle tag-abitudini, potrebbe essere intelligente per aggiungere un po 'contro-meccanismo per evitare che le grandi etichette generali da confondere la rilevanza. per raggiungere questo obiettivo, si potrebbe dare maggior peso ai tag di sotto di una certa soglia di elettrodomestici. Una soglia che ha generalmente funzionato bene per me, è total_number_of_tag_appliances/total_number_of_tags, che si traduce nel numero medio di elettrodomestici. Se il tag apparecchio-count è minore della media, il rapporto-pertinenza aumenta doppio.

Problemi correlati