Guest User

Untitled

a guest
Aug 19th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. import random
  2. import pymongo
  3. from pymongo import Connection
  4.  
  5.  
  6. def insert(db, user, item):
  7. db.users.update({'user': user}, {'$set': {'user': user, 'items.%s' % item: 1}}, True)
  8. current_user = db.users.find_one({'user': user})
  9. for current_item, current_mark in current_user['items'].items():
  10. db.similarity.update(
  11. {'item_1': current_item},
  12. {'$set': {'similar.%s' % item: 1}},
  13. True
  14. )
  15. db.similarity.update(
  16. {'item_1': item},
  17. {'$set': {'similar.%s' % current_item: 1}},
  18. True
  19. )
  20.  
  21.  
  22. def get_recommendations(db, user):
  23. current_user = db.users.find_one({'user': user})
  24. candidates = {}
  25. for similar in db.similarity.find(
  26. {'item_1': {'$in': current_user['items'].keys()}}
  27. ):
  28. for item_2, v in similar['similar'].items():
  29. candidates.setdefault(item_2, 0)
  30. candidates[item_2] += 1
  31. result = sorted(
  32. [{'k': k, 'v': v} for k, v in candidates.items() if k not in current_user['items']],
  33. key=lambda item: item['v'], reverse=True
  34. )
  35. #print result
  36. return result
  37.  
  38.  
  39. def fill(db, user_count=100, per_user_items=20):
  40. db.users.drop()
  41. db.similarity.drop()
  42. db.users.ensure_index('user')
  43. db.similarity.ensure_index('item_1')
  44. for i in xrange(user_count):
  45. for t in xrange(per_user_items):
  46. item = random.randrange(i, i+10)
  47. #print 'Adding user %d and item %d...' % (i, item)
  48. insert(db, i, item)
  49.  
  50.  
  51. def fetch(db, user_count=100):
  52. for user in xrange(user_count):
  53. recommendations = get_recommendations(db, user)
  54.  
  55. def benchmark(users_count=20, items_per_user=10):
  56. connection = Connection()
  57. db = connection.test_schema3
  58. fill(db, users_count, items_per_user)
  59. fetch(db, users_count)
  60.  
  61. if __name__ == '__main__':
  62. benchmark()
Add Comment
Please, Sign In to add comment