在数据库中找到类似的数据django

时间:2018-06-16 15:52:53

标签: python django database similarity

对于我的大学项目,我正在开发一个你搜索一本书的网站,它会向你展示类似的书。我正在使用Django,我需要帮助来找到类似物,特别是在字符串的字段中。

from django.db import models

class Genre(models.Model):
    name = models.CharField(max_length = 100)

    def __str__(self):
        return self.name

class Book(models.Model):
    titleid = models.CharField(max_length = 100)
    title= models.CharField(max_length = 500)
    rating = models.IntegerField(blank=True, null=True)
    genre = models.ManyToManyField(Genre)


    def __str__(self):
        """Unicode representation of Film."""
        return self.primarytitle

我只是想为我的项目总共添加100本书,但如果我能够以一种方式开发它,以后我可以添加1000本书,但速度仍然是完美的。 对于评级,这是一个评级(从0到5)*投票的人数。我从Goodreads得到这些数据。例如,如果一本书的得分为5,则10人投票与具有100万票的得分为5的书不相似。第一个的评级为50,第二个的评级为500万。从其他帖子中,我了解到对于整数,我可以从它们的评级中获得差异的绝对值,并以这种方式对其进行排序。所以一本票数为450和100万的书与上述书的相似性要高于得分为5但有50万票的书,因为评分分别为450万和250万。

但我不希望评级是唯一要考虑的因素。我也想考虑这种类型。例如,一本拥有500万评级和恐怖类型的书,幻想将更像是一本拥有450万评级类型恐怖,幻想的书,比一本拥有500万评级的书还要成熟,但成人,浪漫的类型

如何创建能够找到这种相似性的东西?如果我可以为类型做,那么以后我可以添加其他功能,如作者。但我不知道如何根据作为字符串的流派找到相似性。

我写的绝对值:

import csv
from collections import OrderedDict
source = csv.DictReader(open('sample.tsv','r',encoding='utf-8'),delimiter ='\t')
bookdict= {}

for row in source:
    totalscore = float(row['avgRating'])* int(row['numVotes'])
    bookdict[row['bookid']] = int(totalscore)

absdict ={}

for key in bookdict:
    diff =int(abs(#specific book rate#- bookdict[key]))
    absdict[key] = diff

simlarbooks = OrderedDict(sorted(absdict.items(), key=lambda t: t[1]))

for book in simlarbooks :
    print(book ,simlarbooks[book])

如果你能告诉我类型和其他字符串部分,我将非常感激。

0 个答案:

没有答案