Beispiel #1
0
        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;
                }
            }
        }
Beispiel #2
0
        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);
        }