Heim >Datenbank >MySQL-Tutorial >So entwickeln Sie eine einfache Musikempfehlungsfunktion mit MySQL und Ruby on Rails

So entwickeln Sie eine einfache Musikempfehlungsfunktion mit MySQL und Ruby on Rails

WBOY
WBOYOriginal
2023-09-21 14:45:43733Durchsuche

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

Um mit MySQL und Ruby on Rails eine einfache Musikempfehlungsfunktion zu entwickeln, sind spezifische Codebeispiele erforderlich

Mit der kontinuierlichen Expansion des Musikmarktes und der zunehmenden Vielfalt an Musik ist es für Benutzer schwierig, Musik zu finden das ihrem Geschmack entspricht. Daher ist es dringend erforderlich, eine Musikempfehlungsfunktion zu entwickeln. In diesem Artikel werden die MySQL-Datenbank und das Ruby on Rails-Framework als Grundlage verwendet, um die Entwicklung einer einfachen Musikempfehlungsfunktion vorzustellen und spezifische Codebeispiele bereitzustellen.

Schritt eins: Datenbank erstellen
Zuerst müssen wir eine MySQL-Datenbank erstellen, um Musikdaten und Benutzereinstellungen zu speichern. Das Folgende ist ein Beispiel für eine Rails-Migrationsdatei zum Erstellen von Datenbanktabellen:

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

Der obige Code erstellt zwei Tabellen: songs wird zum Speichern von Musikinformationen verwendet, einschließlich title ( Songtitel ), artist (Künstler) und genre (Musikgenre); user_preferences wird verwendet, um die Bewertung des Benutzers für jedes Lied zu speichern. 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

Schritt zwei: Modellbeziehungen und Datenpopulation

In Rails müssen wir die Beziehungen zwischen Modellen definieren. Das Folgende ist der Modellcode für das Beispiel:

<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 %>

Der obige Code definiert die Beziehung zwischen Song, User und UserPreference. Es besteht eine Viele-zu-Viele-Beziehung zwischen Song und Benutzer, und die Beziehung wird durch UserPreference hergestellt.

Als nächstes müssen wir einige Beispieldaten in die Datenbank eingeben. Hier ist der Füllcode für ein Beispiel:

rrreee
Der obige Code erstellt 3 Songs, 3 Benutzer und 4 Benutzerpräferenzbeispiele (Benutzerbewertungen von Songs).

🎜Schritt 3: Implementieren Sie den Musikempfehlungsalgorithmus🎜Als nächstes müssen wir einen einfachen Musikempfehlungsalgorithmus implementieren. Das Folgende ist ein Beispiel für einen Empfehlungsalgorithmus: 🎜rrreee🎜Der obige Code definiert einen RecommendationsController-Controller, bei dem die index-Methode Ähnlichkeiten basierend auf den Präferenzen des Benutzers (d. h. Bewertungen von Songs) berechnet ) Benutzer- und empfohlene Songs und speichert die Ergebnisse in der Variablen @recommendations. 🎜🎜Schritt 4: Ansicht erstellen🎜Der letzte Schritt besteht darin, eine Ansicht zu erstellen, um die empfohlenen Songs anzuzeigen. Hier ist ein einfacher Beispiel-Ansichtscode: 🎜rrreee🎜Der obige Code zeigt eine Liste der dem Benutzer empfohlenen Songs an. 🎜🎜Zusammenfassung: 🎜In diesem Artikel werden die Schritte zum Entwickeln einer einfachen Musikempfehlungsfunktion mithilfe von MySQL und Ruby on Rails vorgestellt. Von der Erstellung von Datenbanken und dem Auffüllen von Daten über die Definition von Modellbeziehungen und die Implementierung von Empfehlungsalgorithmen bis hin zur Erstellung von Ansichten zur Anzeige von Ergebnissen. Hoffentlich hilft dieses einfache Beispiel den Lesern zu verstehen, wie man Musikempfehlungsfunktionen mit MySQL und Ruby on Rails entwickelt. 🎜

Das obige ist der detaillierte Inhalt vonSo entwickeln Sie eine einfache Musikempfehlungsfunktion mit MySQL und Ruby on Rails. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn