Maison  >  Article  >  base de données  >  Comment développer une fonction simple de recommandation musicale en utilisant MySQL et Ruby on Rails

Comment développer une fonction simple de recommandation musicale en utilisant MySQL et Ruby on Rails

WBOY
WBOYoriginal
2023-09-21 14:45:43673parcourir

如何使用MySQL和Ruby on Rails开发一个简单的音乐推荐功能

Comment utiliser MySQL et Ruby on Rails pour développer une fonction simple de recommandation musicale, des exemples de code spécifiques sont nécessaires

Avec l'expansion continue du marché de la musique et la variété croissante de la musique, il est difficile pour les utilisateurs de trouver de la musique qui correspond à leurs goûts. Il est donc indispensable de développer une fonction de recommandation musicale. Cet article utilisera la base de données MySQL et le framework Ruby on Rails comme base pour présenter comment développer une fonction simple de recommandation musicale et fournir des exemples de code spécifiques.

Première étape : créer une base de données
Tout d'abord, nous devons créer une base de données MySQL pour stocker les données musicales et les préférences de l'utilisateur. Voici un exemple de fichier de migration Rails pour créer des tables de base de données :

class CreateSongs < ActiveRecord::Migration[6.0]
  def change
    create_table :songs do |t|
      t.string :title
      t.string :artist
      t.string :genre
    end
  end
end

class CreateUserPreferences < ActiveRecord::Migration[6.0]
  def change
    create_table :user_preferences do |t|
      t.references :user
      t.references :song
      t.integer :rating
    end
  end
end

Le code ci-dessus crée deux tables : songs est utilisé pour stocker des informations musicales, y compris title ( Titre de la chanson ), artist (artiste) et genre (genre musical) ; user_preferences est utilisé pour stocker la note de l'utilisateur pour chaque chanson. songs用于存储音乐信息,包括title(歌曲标题)、artist(艺术家)和genre(音乐类型);user_preferences用于存储用户对每首歌曲的评分。

第二步:模型关系和数据填充
在Rails中,我们需要定义模型之间的关系。以下是示例的模型代码:

class Song < ApplicationRecord
  has_many :user_preferences
  has_many :users, through: :user_preferences
end

class User < ApplicationRecord
  has_many :user_preferences
  has_many :songs, through: :user_preferences
end

class UserPreference < ApplicationRecord
  belongs_to :user
  belongs_to :song
end

以上代码定义了SongUserUserPreference 之间的关系。SongUser 之间是多对多关系,通过 UserPreference 来建立联系。

接下来,我们需要填充一些样本数据进入数据库。以下是一个示例的填充代码:

Song.create(title: 'Song 1', artist: 'Artist 1', genre: 'Pop')
Song.create(title: 'Song 2', artist: 'Artist 2', genre: 'Rock')
Song.create(title: 'Song 3', artist: 'Artist 3', genre: 'Jazz')

User.create(name: 'User 1')
User.create(name: 'User 2')
User.create(name: 'User 3')

UserPreference.create(user_id: 1, song_id: 1, rating: 4)
UserPreference.create(user_id: 1, song_id: 2, rating: 5)
UserPreference.create(user_id: 2, song_id: 2, rating: 3)
UserPreference.create(user_id: 3, song_id: 3, rating: 2)

以上代码创建了3首歌曲、3个用户和4个用户偏好示例(用户对歌曲的评分)。

第三步:实现音乐推荐算法
接下来,我们需要实现一个简单的音乐推荐算法。以下是一个示例的推荐算法:

class RecommendationController < ApplicationController
  def index
    user = User.find(params[:user_id])
    rated_songs = user.songs
    similar_users = User.where.not(id: user.id).joins(:songs)
                   .where('songs.id IN (?)', rated_songs.pluck(:id)).distinct
    recommended_songs = similar_users.joins(:songs).where.not('songs.id IN (?)', rated_songs.pluck(:id))
                       .group(:song_id).average(:rating)
    @recommendations = Song.where(id: recommended_songs.keys)
                       .order(recommended_songs.values.map(&:to_f).reverse)
  end
end

以上代码定义了一个RecommendationsController 控制器,其中index 方法根据用户的偏好(即对歌曲的评分)计算相似用户和推荐的歌曲,并将结果存储在 @recommendations

Deuxième étape : relations entre les modèles et population de données

Dans Rails, nous devons définir les relations entre les modèles. Voici le code du modèle pour l'exemple :

<h1>Recommendations for User <%= @user.name %></h1>

<% @recommendations.each do |song| %>
  <p><%= song.title %></p>
  <p>Artist: <%= song.artist %></p>
  <p>Genre: <%= song.genre %></p>
<% end %>

Le code ci-dessus définit la relation entre Song, User et UserPreference. Il existe une relation plusieurs-à-plusieurs entre Chanson et Utilisateur, et la relation est établie via UserPreference.

Ensuite, nous devons remplir quelques exemples de données dans la base de données. Voici le code de remplissage pour un exemple :

rrreee
Le code ci-dessus crée 3 chansons, 3 utilisateurs et 4 exemples de préférences utilisateur (évaluations des chansons par les utilisateurs).

🎜Étape 3 : Implémenter l'algorithme de recommandation musicale🎜Ensuite, nous devons implémenter un algorithme de recommandation musicale simple. Voici un exemple d'algorithme de recommandation : 🎜rrreee🎜Le code ci-dessus définit un contrôleur RecommendationsController, où la méthode index calcule les similitudes en fonction des préférences de l'utilisateur (c'est-à-dire les notes des chansons). ) l'utilisateur et les chansons recommandées, et stocke les résultats dans la variable @recommendations. 🎜🎜Étape 4 : Créer une vue🎜La dernière étape consiste à créer une vue pour afficher les chansons recommandées. Voici un exemple simple de code d'affichage : 🎜rrreee🎜Le code ci-dessus affiche une liste de chansons recommandées à l'utilisateur. 🎜🎜Résumé : 🎜Cet article présente les étapes pour développer une fonction simple de recommandation musicale à l'aide de MySQL et Ruby on Rails. De la création de bases de données et du remplissage des données, à la définition des relations de modèle et à la mise en œuvre d'algorithmes de recommandation, en passant par la création de vues pour afficher les résultats. Espérons que cet exemple simple aidera les lecteurs à comprendre comment développer une fonctionnalité de recommandation musicale à l'aide de MySQL et Ruby on Rails. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn