>  기사  >  데이터 베이스  >  MySQL과 Ruby on Rails를 사용하여 간단한 음악 추천 기능을 개발하는 방법

MySQL과 Ruby on Rails를 사용하여 간단한 음악 추천 기능을 개발하는 방법

WBOY
WBOY원래의
2023-09-21 14:45:43673검색

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

MySQL과 Ruby on Rails를 사용하여 간단한 음악 추천 기능을 개발하는 방법에는 구체적인 코드 예제가 필요합니다.

음악 시장이 지속적으로 확장되고 음악이 다양해짐에 따라 사용자가 음악을 찾기가 어렵습니다. 그게 그 사람들 입맛에 맞는 거죠. 따라서 음악 추천 기능의 개발이 매우 필요하다. 이 기사에서는 MySQL 데이터베이스와 Ruby on Rails 프레임워크를 기반으로 간단한 음악 추천 기능을 개발하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

1단계: 데이터베이스 만들기
먼저, 음악 데이터와 사용자 기본 설정을 저장할 MySQL 데이터베이스를 만들어야 합니다. 다음은 데이터베이스 테이블 생성을 위한 Rails 마이그레이션 파일의 예입니다.

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

위 코드는 두 개의 테이블을 생성합니다. songs제목(노래 제목)을 포함한 음악 정보를 저장하는 데 사용됩니다. ), artist(아티스트) 및 genre(음악 장르)는 각 노래에 대한 사용자 평가를 저장하는 데 사용됩니다. 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

2단계: 모델 관계 및 데이터 채우기

Rails에서는 모델 간의 관계를 정의해야 합니다. 다음은 예시의 모델 코드입니다.

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

위 코드는 Song, UserUserPreference 간의 관계를 정의합니다. 노래사용자 사이에는 다대다 관계가 있으며, 관계는 UserPreference를 통해 설정됩니다.

다음으로 일부 샘플 데이터를 데이터베이스에 채워야 합니다. 예를 들어 채우는 코드는 다음과 같습니다.

rrreee
위 코드는 3개의 노래, 3명의 사용자 및 4개의 사용자 선호도 예제(노래에 대한 사용자 평가)를 생성합니다.

🎜3단계: 음악 추천 알고리즘 구현🎜다음으로 간단한 음악 추천 알고리즘을 구현해야 합니다. 다음은 추천 알고리즘의 예입니다. 🎜rrreee🎜위 코드는 RecommendationsController 컨트롤러를 정의합니다. 여기서 index 메서드는 사용자의 선호도(예: 노래 평가)에 따라 유사성을 계산합니다. ) 사용자 및 추천 노래를 검색하고 결과를 @recommendations 변수에 저장합니다. 🎜🎜4단계: 뷰 만들기🎜 마지막 단계는 추천곡을 표시하는 뷰를 만드는 것입니다. 다음은 간단한 보기 코드 예시입니다. 🎜rrreee🎜위 코드는 사용자에게 추천되는 노래 목록을 표시합니다. 🎜🎜요약: 🎜이 글에서는 MySQL과 Ruby on Rails를 사용하여 간단한 음악 추천 기능을 개발하는 단계를 소개합니다. 데이터베이스 생성 및 데이터 채우기부터 모델 관계 정의 및 권장 알고리즘 구현, 결과 표시를 위한 뷰 생성까지. 이 간단한 예가 독자들이 MySQL과 Ruby on Rails를 사용하여 음악 추천 기능을 개발하는 방법을 이해하는 데 도움이 되기를 바랍니다. 🎜

위 내용은 MySQL과 Ruby on Rails를 사용하여 간단한 음악 추천 기능을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.