1:
2: public SimilarityResoult UserSimilaryty(Dictionary<int, SimilarityFilmsData> _similarityDictionary) {
3:
4: int total = 0; // film visti in comune
5:
6: //double VotePoints_opposite = 0;
7: double VotePoints_disagree = 0.3;
8: double VotePoints_discord = 0.5;
9: double VotePoints_similar = 0.8;
10: //double VotePoints_same = 1;
11:
12: int countvote_opposite = 0; // Ogni volta che i voti sono mooolto contrastanti
13: int countvote_disagree = 0; // Molto in disaccordo ma nn l'opposto un pò in disaccordo es io 2 tu 3
14: int countvote_discord = 0; // Voto un pò in disaccordo es io 2 tu 3
15: int countvote_similar = 0; // Voto simile es io 4 tu 5, io 2 e tu 1
16: int countvote_same = 0; // Voto uguale tutti e 2 votiamo 3
17:
18: List<int> listSuggestAtoB = new List<int>(); // Film che A suggerisce ad B
19: List<int> listSuggestBtoA = new List<int>(); // Film che B suggerisce ad A
20:
21: foreach (KeyValuePair<int, SimilarityFilmsData> row in _similarityDictionary) {
22:
23: int filmID = row.Value.filmID;
24: int votoUserA = row.Value.UserAVote;
25: int votoUserB = row.Value.UserBVote;
26:
27: // Film che A e B non hanno visto e che consiglia all'altro
28: if ((votoUserA == 0) && ((votoUserB == 5) || (votoUserB == 4))) {
29: listSuggestBtoA.Add(filmID);
30: continue;
31: }
32: if ((votoUserB == 0) && ((votoUserA == 5) || (votoUserA == 4))) {
33: listSuggestAtoB.Add(filmID);
34: continue;
35: }
36:
37: // il film A o B non lo hanno visto, quindi inutile continuare il cofronto, esco dal ciclo
38: if ((votoUserA == 0) || (votoUserB == 0)) {
39: continue;
40: }
41:
42: // il Film è stato visto da entrambi ed entrambi, ha senso fare il confronto
43:
44: total++; // Incremento il contatore
45:
46: // Stesso voto = maggior "legame"
47: if ((votoUserA == votoUserB) && (votoUserA != 0)) {
48: //score += VotePoints_same;
49: countvote_same++;
50: continue;
51: }
52:
53: // Voto congiunto che mi permette di dare un Grado di "amicizia" in base hai 2 voti
54: // Es A vota 3 e B vota 2
55: // _choose = (3*10)+2 = 32;
56: int _choose = (votoUserA * 10) + votoUserB;
57:
58: switch (_choose) {
59: // Molto simili 1 e 2 oppure 4 o 5
60: case 12:
61: case 21:
62: case 45:
63: case 54:
64: //score += VotePoints_similar;
65: countvote_similar++;
66: break;
67: // Non uguali ma qualcosa in comune ...
68: case 34:
69: case 43:
70: //score += VotePoints_disagree;
71: countvote_disagree++;
72: break;
73: // In contrasto ma non agli antipodi ...
74: case 13:
75: case 23:
76: case 32:
77: case 53:
78: //score += VotePoints_discord;
79: countvote_discord++;
80: break;
81: // Pareri piu' discordanti possibile ...
82: case 14:
83: case 15:
84: case 24:
85: case 25:
86: case 31:
87: case 35:
88: case 41:
89: case 42:
90: case 51:
91: case 52:
92: //score += VotePoints_opposite;
93: countvote_opposite++;
94: break;
95: default:
96: string x = "errore";
97: break;
98: }
99: }
100:
101: int similarity = 0;
102: if (total != 0) {
103: double temp = ((countvote_disagree * VotePoints_disagree) + (VotePoints_discord * countvote_discord) + (VotePoints_similar * countvote_similar) + (countvote_same));
104: temp = temp / total;
105: similarity = Convert.ToInt32(temp * 100);
106: }
107:
108: return new SimilarityResoult(similarity, listSuggestBtoA, listSuggestAtoB, countvote_opposite, countvote_disagree, countvote_disagree, countvote_similar, countvote_same);
109:
110: }