在 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