Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1.  
  2.  
  3. oceniPoKorisnici = {
  4. 'Lisa Rose': {'Catch Me If You Can': 3.0, 'Snakes on a Plane': 3.5, 'Superman Returns': 3.5,
  5. 'You, Me and Dupree': 2.5, 'The Night Listener': 3.0, 'Snitch': 3.0},
  6. 'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 'Just My Luck': 1.5, 'The Night Listener': 3.0,
  7. 'You, Me and Dupree': 3.5},
  8. 'Michael Phillips': {'Catch Me If You Can': 2.5, 'Lady in the Water': 2.5, 'Superman Returns': 3.5,
  9. 'The Night Listener': 4.0, 'Snitch': 2.0},
  10. 'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0, 'The Night Listener': 4.5, 'Superman Returns': 4.0,
  11. 'You, Me and Dupree': 2.5},
  12. 'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0, 'Just My Luck': 2.0, 'Superman Returns': 3.0,
  13. 'You, Me and Dupree': 2.0},
  14. 'Jack Matthews': {'Catch Me If You Can': 4.5, 'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
  15. 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5, 'Snitch': 4.5},
  16. 'Toby': {'Snakes on a Plane': 4.5, 'Snitch': 5.0},
  17. 'Michelle Nichols': {'Just My Luck': 1.0, 'The Night Listener': 4.5, 'You, Me and Dupree': 3.5,
  18. 'Catch Me If You Can': 2.5, 'Snakes on a Plane': 3.0},
  19. 'Gary Coleman': {'Lady in the Water': 1.0, 'Catch Me If You Can': 1.5, 'Superman Returns': 1.5,
  20. 'You, Me and Dupree': 2.0},
  21. 'Larry': {'Lady in the Water': 3.0, 'Just My Luck': 3.5, 'Snitch': 1.5, 'The Night Listener': 3.5}
  22. }
  23.  
  24.  
  25. from math import sqrt
  26. def sim_distance(oceni,person1,person2):
  27. #lista na zaednicki predmeti
  28. si={}
  29. for item in oceni[person1]:
  30. if item in oceni[person2]:
  31. si[item]=1
  32.  
  33. #ako nemaat zaednicki predmeti
  34. if(len(si)==0): return 0
  35. sum_of_squares = sum([pow(oceni[person1][item] - oceni[person2][item], 2)
  36. for item in oceni[person1] if item in oceni[person2]])
  37. return round(1 / (1 + sqrt(sum_of_squares)),3)
  38.  
  39. def sim_pearson(oceni,p1,p2):
  40. # Se kreira recnik vo koj ke se cuvaat predmetite (filmovi) koi se oceneti od dvajcata
  41. # Vo recnikot ni se vazni samo klucevite za da gi cuvame iminjata na filmovite koi se zaednicki, a vrednostite ne ni se vazni
  42. zaednicki = {}
  43. for item in oceni[p1]:
  44. if item in oceni[p2]: zaednicki[item] = 1
  45.  
  46. # Se presmetuva brojot na predmeti oceneti od dvajcata
  47. n = len(zaednicki)
  48.  
  49. # Ako nemaat zaednicki predmeti vrati korelacija 0
  50. if n == 0: return 0
  51.  
  52. # Soberi gi zaednickite oceni (rejtinzi) za sekoja licnost posebno
  53. sum1 = sum([oceni[p1][it] for it in zaednicki])
  54. sum2 = sum([oceni[p2][it] for it in zaednicki])
  55.  
  56. # Soberi gi kvadratite od zaednickite oceni (rejtinzi) za sekoja licnost posebno
  57. sum1Sq = sum([pow(oceni[p1][it], 2) for it in zaednicki])
  58. sum2Sq = sum([pow(oceni[p2][it], 2) for it in zaednicki])
  59.  
  60. # Soberi gi proizvodite od ocenite na dvete licnosti
  61. pSum = sum([oceni[p1][it] * oceni[p2][it] for it in zaednicki])
  62.  
  63. # Presmetaj go koeficientot na korelacija
  64. num = pSum - (sum1 * sum2 / n)
  65. den = sqrt((sum1Sq - pow(sum1, 2) / n) * (sum2Sq - pow(sum2, 2) / n))
  66. if den == 0: return 0
  67. r = num / den
  68. return round(r,3)
  69. def zaednickiOcenki(oceni,person1,person2):
  70. broj=0
  71. for item in oceni[person1]:
  72. if item in oceni[person2]:
  73. broj+=1
  74. return broj
  75.  
  76.  
  77. def TabelaNaSlicniKorisnici(oceni):
  78. slicnosti = {}
  79. for person1 in oceni:
  80. for person2 in oceni:
  81. slicnosti.setdefault(person1,{})
  82. slicnosti[person1][person2]=(sim_distance(oceni,person1,person2),sim_pearson(oceni,person1,person2),zaednickiOcenki(oceni,person1,person2))
  83.  
  84.  
  85. return slicnosti
  86.  
  87.  
  88. if __name__ == "__main__":
  89. korisnik1 = input()
  90. korisnik2 = input()
  91. # korisnik1='Mick LaSalle'
  92. # korisnik2='Lisa Rose'
  93. # print oceniPoKorisnici
  94. tabela = TabelaNaSlicniKorisnici(oceniPoKorisnici)
  95. # print tabela
  96. print (tabela[korisnik1][korisnik2])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement