2016-06-24 1 views
1

J'ai beaucoup d'éléments de contenu stockés dans la base de données et je sais que les balises d'un utilisateur est intéressé à. Alice, par exemple, montre de l'intérêt pour les tags «soins de santé», «sports» et «social». Chaque élément de contenu contient un ou plusieurs tags. Comment pourrais-je faire correspondre ces derniers afin de recommander un nouveau contenu à Alice?les intérêts des utilisateurs de contenu correspondant à (basé sur les tags)

Tenez compte de ces tables de base de données de base:

CREATE TABLE `content_tag` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `item_id` INT(11) NOT NULL, 
    `tag_id` INT(11) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `tag` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

Et je les intérêts d'Alice aux côtés d'une (pertinence) score, qui agissent comme des poids:

array:3 [ 
    'healthcare' => 2.20 
    'sports' => 1.30 
    'socal' => 0.5 
] 

Comment aborderez-vous cela?

Est-il possible d'utiliser un algorithme pour cela, comme le simularity cosinus, ou est-ce que des peines ment?

+0

Qu'avez-vous déjà essayé? Le score agira-t-il comme un «poids» dans le tri des résultats? –

+1

Vous pouvez consulter la fonction [FIELD] de MySQL (http://dev.mysql.com/doc/refman/5.7/fr/string-functions.html#function_field) (pour un tri personnalisé basé sur le score d'intérêt). Il devrait également fonctionner dans un ORDER BY. –

+0

@MagnusEriksson La fonction 'FIELD' semble très prometteuse. Je vais regarder dans cela. – JasonK

Répondre

2

Vous pouvez trouver des similitudes entre Alice et éléments, puis les trier. Donc, la plupart des articles similaires seront recommandés.

L'une des mesures de similarité est similitude cosinus (comme vous le suggérez) et fonctionne comme suit;

Pour chaque élément que vous pouvez créer un vecteur en utilisant des balises. Dans la mesure où je comprends que vos objets n'ont pas de scores, les valeurs des vecteurs d'objets seront 0 ou 1. Chaque valeur représentera une étiquette pour l'élément particulier.

représentation de l'objet;

[0,0,1,0,0] -> Disons que la première valeur représente «soins de santé», la deuxième est pour les sports et la dernière balise est pour tag5. Cet article n'a pas tag5 donc sa valeur est

Et les utilisateurs ont aussi des vecteurs qui sont similaires aux articles. Par exemple le vecteur d'Alice est; [2.20,1.30,0.5,0,0,0]

Après avoir créé des vecteurs, vous pouvez calculer la similarité (par exemple en utilisant la similarité cosinus.)

Notez que la taille de chaque utilisateur et des vecteurs d'élément égal au nombre de toutes les étiquettes dans le système. Dans cet exemple, il y a 6 étiquettes distinctes dans le système.

+0

@JasonK j'espère que cela fonctionne pour vous – mokarakaya