2012-04-12 62 views
1

好吧,這不是一個具體的問題;我只需要一些關於如何在python 2.7版本中爲我的類做最後的項目的指導。什麼程序基本上要做的是從2個文本文件,一個導入信息只是一個逗號和線條分隔的書籍列表和它們的作者:
例如:
道格拉斯·亞當斯,漫遊指南銀河
理查德·亞當斯,水窪
米奇艾爾邦,在天堂遇見的五個人
Python,Lists + Dictionaries,Classes?

,然後用戶的文件,他們的名字在一行,並與他們的下一個(文本框評級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 1 0 -5 0 0 5 5 0 5 5 5 0 5 5 0 0 0 5 5 5 5 -5
Moose
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個用戶。例如,對於第一本書,穆斯的評分是5,所以穆斯的相似度分數是25,你爲每本書都這樣做:將輸入的用戶評分與其他所有用戶的評分和所有其他用戶的評分相乘相似度分數,您輸出它們並將5本書推薦給用戶。基本上最接近的相似性得分用戶閱讀和評分較高的書籍,但輸入的用戶沒有閱讀。好吧,在我對此感到遺憾的那段巨大的文字之後。我明白我必須做什麼,但我無法想出一個簡單的方法來完成這項任務,我不是在尋找某人爲我或其他任何事物做項目,而只是說這個項目值得我們的很大一部分等級,我甚至不知道從哪裏開始。如果任何人甚至可以帶領我朝着正確的方向發展,哪種類型的數據結構最容易完成這項任務,我將非常感激,再次爲這麼長的帖子感到遺憾,但我絕望了。

+0

你有什麼試過?你有什麼或不知道該怎麼做?您是否嘗試過將問題分解爲邏輯步驟並列出它們?你之前在Python中完成了什麼? – 2012-04-12 03:36:30

+1

好吧,我開始打破這兩個文件列表。 我做了所有書的清單;所有用戶的列表以及所有評級的列表。但從那裏我基本上不知道如何前進。 – Mike 2012-04-12 03:42:01

+0

製作一本字典,其中的關鍵是用戶,值是相應的評級。 – 2012-04-12 04:23:03

回答

1

你說的算法聽起來很像Vector Space model(也是this page)。將每個用戶的分數設想爲一個55維的矢量(在55維空間形成一條線),並且通過計算角度彼此之間的接近程度來比較用戶線的相似度。

無論如何,你的應用程序有兩個基本部分組成:

  1. 文檔解析,以建立一個數據結構
  2. 使用創建的結構

通知一下這些有一個共同點,就是實現你的算法你需要決定一個數據結構,所以你使用的數據結構是你的應用程序的核心。

可能工作的最簡單的事情是兩個列表。一個列表是書籍數據:books = [('author', 'book'), ...]。另一個是得分數據:scores = [('user', [1,2,3,4,...]), ...]。然後你確定scores[n][1][m]是對應於books[m]的分數。然後你確定實現算法的函數接受這些結構。

我會確保你可以得到這個方法工作第一。然後你可以看看更高層次的抽象。

您可以使用類和對象將數據與其操作綁定在一起,以提供更高級別的抽象。例如,您可以將書籍記錄存儲爲命名元組,並擁有另一個包含書籍記錄集的對象,並具有查找書籍的方法(例如findByIndexfindByAuthor等),以及用於分數的類似方法。您可以提供書籤集的分數集,以便分數可以從分數索引中查找書籍記錄。您可以創建一個評分類,它接受評分集並對其執行操作,例如返回評分集中給定用戶的得分最高的書記錄列表。等等。

+0

我已經正確創建了這些書籍的元組列表,但是有一個問題列出了分數的元組列表。我確實製作了元組,並且用戶正確地使用了該用戶的分數,但分數以字符串形式出現,我該如何解決這個問題? – Mike 2012-04-12 04:22:46

+0

解析字符串。最有可能'[int(n)for'1,2,3'.split(',')]' – 2012-04-12 04:25:26

+0

好吧,讓它工作。所以現在這兩個清單都很好。我可以從哪裏出發? – Mike 2012-04-12 05:09:59