public void CountSimilarity(BookRecommenderContext db) { List <BookSimilarityInformation> books = new List <BookSimilarityInformation>(); foreach (int bookIDI in bookIDs) { Book bookI = db.Books.Find(bookIDI); List <Author> authorsI = bookI.GetAuthors(db).ToList(); List <Genre> genresI = bookI.GetGenres(db).ToList(); BookSimilarityInformation bookInfoI = new BookSimilarityInformation(bookI.BookId, authorsI, genresI); books.Add(bookInfoI); } for (int bookIndex1 = 0; bookIndex1 < books.Count; bookIndex1++) { for (int bookIndex2 = 0; bookIndex2 < books.Count; bookIndex2++) { if (bookIndex1 + bookIndex2 >= books.Count) { continue; } BookSimilarityInformation bookInfo1 = books[bookIndex1]; BookSimilarityInformation bookInfo2 = books[bookIndex2]; double simValue = Similarity(bookInfo1, bookInfo2); this.matrix[bookIndex1, bookIndex2] = simValue; this.matrix[bookIndex2, bookIndex1] = simValue; } } }
private double Similarity(BookSimilarityInformation bookInfo1, BookSimilarityInformation bookInfo2) { List <Author> authors1 = bookInfo1.authors; List <Genre> genres1 = bookInfo1.genres; List <Author> authors2 = bookInfo2.authors; List <Genre> genres2 = bookInfo2.genres; double similarity = 0; similarity += JaccardSimilarity(authors1, authors2); similarity += JaccardSimilarity(genres1, genres2); return(similarity); }