在 python 中设计一个简单的图书推荐系统?
Designing a simple book recommendation system in python?
我一直在设计一个简单的图书推荐系统。所以在注册时我会要求用户选择他们最喜欢的类型。每本书也会有一个流派,每个流派都有一个权重。
假设 Book 模型有一个字段 Genre_Score(一个文本字段,它是 json 格式的字典以键为类型,以值为权重)类似于
{"Thriller":5, "Adventure":59,"Biography":21}
同样,每个 用户 模型都会有 Genre_Score 个赞
{"Thriller":1, "Adventure":1,"Biography":2}
现在,每本书完成后,我都会要求用户回答他是否喜欢这本书,并相应地更新该书和用户的 Genre_Score。
使用上面的(json 格式的文本字段)数据结构是一种好方法吗? 查询 是否会非常昂贵,因为对于每个用户我都必须生成一个 Feed 匹配他的 Genre_score 和书籍的流派分数?或者我应该采取不同的方法吗?
我建议你这样建模:
from django.db import models
from django.contrib.auth.models import AbstractUser
class Genre(models.Model):
name = models.Charfield(max_length=255)
class BookGenre(models.Model):
book = models.ForeignKey('Book')
genre = models.ForeignKey('Genre')
score = models.IntegerField()
class Book(models.Model):
title = models.CharField(max_length=255)
# etc...
genres = models.ManyToManyField('Genre', through=BookGenre)
class UserGenre(models.Model):
user = models.ForeignKey('User')
genre = models.ForeignKey('Genre')
score = models.IntegerField()
class User(AbstractUser):
genres = models.ManyToManyField('Genre', through=UserGenre)
查看此处的文档了解更多详细信息,例如如何查询分数等:
https://docs.djangoproject.com/en/1.8/topics/db/models/#extra-fields-on-many-to-many-relationships
我一直在设计一个简单的图书推荐系统。所以在注册时我会要求用户选择他们最喜欢的类型。每本书也会有一个流派,每个流派都有一个权重。
假设 Book 模型有一个字段 Genre_Score(一个文本字段,它是 json 格式的字典以键为类型,以值为权重)类似于
{"Thriller":5, "Adventure":59,"Biography":21}
同样,每个 用户 模型都会有 Genre_Score 个赞
{"Thriller":1, "Adventure":1,"Biography":2}
现在,每本书完成后,我都会要求用户回答他是否喜欢这本书,并相应地更新该书和用户的 Genre_Score。 使用上面的(json 格式的文本字段)数据结构是一种好方法吗? 查询 是否会非常昂贵,因为对于每个用户我都必须生成一个 Feed 匹配他的 Genre_score 和书籍的流派分数?或者我应该采取不同的方法吗?
我建议你这样建模:
from django.db import models
from django.contrib.auth.models import AbstractUser
class Genre(models.Model):
name = models.Charfield(max_length=255)
class BookGenre(models.Model):
book = models.ForeignKey('Book')
genre = models.ForeignKey('Genre')
score = models.IntegerField()
class Book(models.Model):
title = models.CharField(max_length=255)
# etc...
genres = models.ManyToManyField('Genre', through=BookGenre)
class UserGenre(models.Model):
user = models.ForeignKey('User')
genre = models.ForeignKey('Genre')
score = models.IntegerField()
class User(AbstractUser):
genres = models.ManyToManyField('Genre', through=UserGenre)
查看此处的文档了解更多详细信息,例如如何查询分数等:
https://docs.djangoproject.com/en/1.8/topics/db/models/#extra-fields-on-many-to-many-relationships