对于我的大学项目,我正在开发一个你搜索一本书的网站,它会向你展示类似的书。我正在使用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])
如果你能告诉我类型和其他字符串部分,我将非常感激。