Python и Коллективный разум: глава 2: рекомендации предметов - PullRequest
0 голосов
/ 14 марта 2012

Я изучал, как работает Коллективный разум, и практиковался в решении задачи examples.py в главе 2. Вот ссылка:

http://cdn.jampad.net/Library/collectiveintelligence/#calibre_link-201

Когда я копировал и вставлялэтот код:

# Gets recommendations for a person by using a weighted average
# of every other user's rankings
def getRecommendations(prefs,person,similarity=sim_pearson):
  totals={}
  simSums={}
  for other in prefs:
# don't compare me to myself
if other==person: continue
sim=similarity(prefs,person,other)

# ignore scores of zero or lower
if sim<=0: continue
for item in prefs[other]:

  # only score movies I haven't seen yet
  if item not in prefs[person] or prefs[person][item]==0:
    # Similarity * Score
    totals.setdefault(item,0)totals[item]+=prefs[other][item]*sim
    # Sum of similarities
    simSums.setdefault(item,0)
    simSums[item]+=sim

# Create the normalized list
rankings=[(total/simSums[item],item) for item,total in totals.items(  )]

# Return the sorted list
rankings.sort(  )
rankings.reverse(  )
return rankings

В мой файл examples.py и при перезагрузке я получаю синтаксическую ошибку.

>>> reload(recommendations)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "recommendations.py", line 100
  totals.setdefault(item,0)totals[item]+=prefs[other][item]*sim
                              ^

SyntaxError: invalid syntax

Это сообщение, которое я получил.Я не уверен, правильно ли я скопировал и вставил код или данная строка кода неверна.

1 Ответ

2 голосов
/ 14 марта 2012

Этот ...

totals.setdefault(item,0)totals[item]+=prefs[other][item]*sim

должен состоять из двух строк:

totals.setdefault(item,0)
totals[item]+=prefs[other][item]*sim
...