Python,Lists + Dictionaries,Classes?

时间:2012-04-12 03:28:21

标签: python list data-structures dictionary

好的,这不是一个特定的问题;我只需要一些指导如何在python 2.7版本中为我的类做最后的项目。该程序基本上要做的是从2个文本文件导入信息,一个只有一个书籍列表,他们的作者用逗号和行分隔:
例如:道格拉斯亚当斯,“银河系漫游指南”     Richard Adams,Watership Down
    Mitch Albom,你在天堂遇见的五个人

然后在一行中显示用户及其姓名的文件,并在下一行中评估总共55本书(文本框不足以将所有评级放在一行): 例如:

5 0 0 0 0 0 0 1 0 1 -3 5 0 0 0 5 5 0 0 0 0 5 0 0 0 0 0 0 0 0 1 3 0 0 0 0 0 0 5 5 0 5 5 5 0 5 5 0 0 0 5 5 5 5 -5
穆斯
5 5 0 0 0 0 3 0 0 1 0 5 3 0 5 0 3 3 5 0 0 0 0 0 5 0 0 0 0 0 3 5 0 0 0 0 0 5 -3 0 0 0 5 0 0 0 0 0 0 5 5 0 3 0 0

无论如何,实际项目中您使用教师提供的算法来比较用户对书籍的兴趣。您输入一个用户,它会通过乘以他们对该书的评级并将它们全部加在一起来搜索所有其他87个用户。例如,对于第一本书,Ben的评分为5,Moose也是如此,因此Moose的相似度得分是25,你为每本书做这个,将输入的用户评分乘以所有其他用户和最接近的用户相似度得分,您输出它们并向用户推荐5本书。基本上是书中最接近的相似度得分用户阅读并评价为高但输入的用户尚未阅读。好吧,现在,在那个巨大的文字墙之后,我很抱歉。我理解我必须做的事情,但我无法想出一个简单的方法来完成这项任务,我不是在寻找有人为我做这个项目或类似的事情只是因为这个项目值得我们的大部分工作等级,我甚至不知道从哪里开始。如果有人甚至可以引导我朝着正确的方向指导什么类型的数据结构最容易完成这项任务,我将非常感激,再次为这么长的帖子感到遗憾,但我很绝望。

1 个答案:

答案 0 :(得分:1)

你说的算法听起来很像Vector Space model(也是this page)。将每个用户的分数设想为55维矢量(在55维空间中形成一条线),并通过计算他们的角度彼此接近程度来比较用户线的相似性。

无论如何,您的应用程序有两个基本部分:

  1. 文档解析以构建数据结构
  2. 使用创建的结构实现算法
  3. 请注意,这些共同点是您需要决定数据结构,因此您使用的数据结构对您的应用程序至关重要。

    最简单的事情可能是两个清单。一个列表是图书数据:books = [('author', 'book'), ...]。另一个是得分数据:scores = [('user', [1,2,3,4,...]), ...]。然后确保scores[n][1][m]是与books[m]对应的分数。然后确保实现该算法的函数接受这些结构。

    我会确保您可以先使用此方法。然后你可以看一下更高级别的抽象。

    您可以使用类和对象将数据与其操作捆绑在一起,以提供更高级别的抽象。例如,您可以将您的图书记录存储为命名元组,并拥有另一个包含一组图书记录的对象,并具有书籍查找方法(例如findByIndexfindByAuthor等),以及类似的图书记录。得分。您可以提供带有书籍集的分数集,以便分数可以从分数索引中查找书籍记录。您可以创建一个接受分数集并对其执行操作的评分类,例如返回分数集中给定用户的最高得分簿记录列表。等等。