Example #1
0
        public Dictionary <User, double> GetRecommendations(User user)
        {
            using (RecommenderContext db = new RecommenderContext())
            {
                Dictionary <User, double> similarUsers = new Dictionary <User, double>();
                var users = db.Users.Where(s => s.Scrobbles.Count != 0).ToList();

                var artstsCount = db.Scrobbles.Where(u => u.UserId == user.ID).Select(sc => sc.Track.Artist).Count();
                var topArtists  = db.Scrobbles.Where(u => u.UserId == user.ID).OrderByDescending(s => s.Count).Take(20 + artstsCount / 30).Select(a => a.Track.Artist).ToList();



                foreach (var u in users)
                {
                    var aCount = db.Scrobbles.Where(ac => ac.ID == u.ID).Select(sc => sc.Track.Artist).Count();
                    var topA   = db.Scrobbles.Where(s => s.ID == u.ID).OrderByDescending(s => s.Count).Take(20 + artstsCount / 30).Select(a => a.Track.Artist).ToList();

                    var intersectedCount = topArtists.Intersect(topA).Count();
                    similarUsers.Add(u, intersectedCount);
                    similarUsers = similarUsers.OrderByDescending(t => t.Value).Take(10).Select(t => new { t.Key, t.Value }).ToDictionary(t => t.Key, t => t.Value);
                }

                return(similarUsers);
            }
        }
Example #2
0
        public ActionResult RecommendUsers(string userName)
        {
            User user;

            using (RecommenderContext db = new RecommenderContext())
            {
                user = db.Users.Where(u => u.Name == userName).FirstOrDefault();
            }

            Slope slope            = new Slope();
            var   recommendedUsers = slope.GetRecommendations(user);

            foreach (var u in recommendedUsers)
            {
                using (RecommenderContext db = new RecommenderContext())
                {
                    db.UserToUser.Add(new UserToUser()
                    {
                        User1 = user,
                        User2 = u.Key
                    });
                    db.SaveChanges();
                }
            }
            return(RedirectToAction("Index", new { userName = userName }));
        }
Example #3
0
 public ActionResult FetchTags()
 {
     Service.ApiManager manager = new Service.ApiManager();
     using (RecommenderContext db = new RecommenderContext())
     {
         var atists = db.Artists.ToList();
         foreach (var artist in atists)
         {
             List <Service.Track> tracks = new List <Service.Track>();
             var tags = manager.GetTags(artist.Name);
             foreach (var tag in tags)
             {
                 var newTag = new Tag()
                 {
                     Name = tag
                 };
                 db.Tags.AddIfNotExists(newTag, x => x.Name == tag);
                 db.SaveChanges();
                 var        tagFromDb = db.Tags.Where(t => t.Name == tag).FirstOrDefault();
                 Artist_Tag a_t       = new Artist_Tag()
                 {
                     Artist = artist, Tag = tagFromDb
                 };
                 db.Artist_Tags.Add(a_t);
                 db.SaveChanges();
             }
             //db.SaveChanges();
         }
     }
     ViewBag.Message = "success: artists";
     return(View("Index"));
 }
Example #4
0
 public ActionResult FetchArtists()
 {
     Service.ApiManager manager = new Service.ApiManager();
     using (RecommenderContext db = new RecommenderContext())
     {
         var users = db.Users.ToList();
         foreach (var user in users)
         {
             List <Service.Track> tracks = new List <Service.Track>();
             manager.GetTracks(user.Name, 1, tracks);
             foreach (var track in tracks)
             {
                 var artist = new Artist()
                 {
                     Name = track.artist.name
                 };
                 db.Artists.Add(artist);
                 db.Artists.AddIfNotExists(artist, x => x.Name == artist.Name);
                 db.SaveChanges();
             }
             db.SaveChanges();
         }
     }
     ViewBag.Message = "success: artists";
     return(View("Index"));
 }
Example #5
0
 public ActionResult Index(string userName)
 {
     using (RecommenderContext db = new RecommenderContext())
     {
         var users = db.UserToUser.Where(u => u.User1.Name == userName).Select(x => x.User2).ToList();
         return(View("Index", users));
     }
 }
Example #6
0
 public NBC()
 {
     using (RecommenderContext db = new RecommenderContext())
     {
         _tags    = db.Tags.Select(t => t.ID).ToArray();
         _artists = db.Artists.ToArray();
     }
 }
        public ActionResult ArtistInfo(string artistName)
        {
            using (RecommenderContext db = new RecommenderContext())
            {
                var artist         = db.Artists.Where(a => a.Name == artistName).FirstOrDefault();
                var similarArtists = db.ArtistToArtist.Where(a => a.Artist1ID == artist.ID).Select(a => a.Artist2).ToList();

                return(View("ArtistInfo", similarArtists));
            }
        }
 public ActionResult MaintainArtist(string artistName)
 {
     using (RecommenderContext db = new RecommenderContext())
     {
         var artist         = db.Artists.Where(a => a.Name == artistName).FirstOrDefault();
         NBC nbc            = new NBC();
         var similarArtists = nbc.GetSimilarArtists(artist);
         foreach (var sa in similarArtists)
         {
             db.ArtistToArtist.Add(new Recommender.Models.ArtistSimilarToArtist()
             {
                 Artist1 = artist, Artist2 = sa.Key, Ratio = sa.Value
             });
         }
         db.SaveChanges();
         ViewBag.Message = "success: maintained artist:" + artistName;
         return(View("Index"));
     }
 }
Example #9
0
        public ActionResult FetchUsers()
        {
            Service.ApiManager manager = new Service.ApiManager();
            var users2 = manager.GetFriends("col403");

            var users = manager.GetUsers("col403");

            using (RecommenderContext db = new RecommenderContext())
            {
                foreach (var user in users)
                {
                    db.Users.Add(new Recommender.Models.User()
                    {
                        Name = user.name
                    });
                }
                db.SaveChanges();
            }
            ViewBag.Message = "success: users";
            return(View("Index"));
        }
Example #10
0
        public Dictionary <Artist, double> GetSimilarArtists(Artist artist)
        {
            //double result = 1;
            using (RecommenderContext db = new RecommenderContext())
            {
                _artistTags = db.Artists.Find(artist.ID).Artist_tags.Select(a => a.TagID).ToArray();


                Dictionary <Artist, double> topSimilar = new Dictionary <Artist, double>();
                for (int j = 0; j < _artists.Length - 1; j++)
                {
                    int[] otherArtistTags;
                    //using (RecommenderContext db = new RecommenderContext())
                    //{
                    otherArtistTags = db.Artists.Find(_artists[j].ID).Artist_tags.Select(x => x.TagID).ToArray();     //.Artist_tags.Select(x => x.TagID);
                    //}

                    var goodTagsCount = otherArtistTags.Intersect(_artistTags).Count();
                    var artistP       = ((double)goodTagsCount) / _tags.Count();
                    topSimilar.Add(_artists[j], artistP);
                    topSimilar = topSimilar.OrderByDescending(t => t.Value).Take(10).Select(t => new { t.Key, t.Value }).ToDictionary(t => t.Key, t => t.Value);
                    //for (int i = 0; i < _tags.Length; i++)
                    //{
                    //    double tagP = 1;
                    //    double goodTagCount = 0;
                    //    if (_tags.Contains(_artists[j].))
                    //        goodTagCount++;
                    //    if (goodTagCount != 0)
                    //        tagP = goodTagCount / _artistTags.Length;
                    //}


                    //result = result * tagP;
                }

                return(topSimilar);
            }
            //return result;
        }
Example #11
0
        public ActionResult FetchTracks()
        {
            Service.ApiManager manager = new Service.ApiManager();
            List <User>        users;

            using (RecommenderContext db = new RecommenderContext())
            {
                users = db.Users.Where(u => u.ID > 19).ToList();
            }
            foreach (var user in users)
            {
                List <Service.Track> tracks = new List <Service.Track>();
                manager.GetTracks(user.Name, 1, tracks);
                using (RecommenderContext db = new RecommenderContext())
                {
                    foreach (var track in tracks)
                    {
                        var   artist   = db.Artists.Where(x => x.Name == track.artist.name).FirstOrDefault();
                        Track newTrack = new Track()
                        {
                            Name = track.name, Artist = artist
                        };

                        db.Tracks.AddIfNotExists(newTrack, x => x.Name == track.name);
                        db.SaveChanges();
                        var trackFromDb = db.Tracks.Where(x => x.Name == newTrack.Name).FirstOrDefault();
                        db.Scrobbles.Add(new Scrobble()
                        {
                            User = user, Count = Int32.Parse(track.playcount), Track = trackFromDb
                        });
                        db.SaveChanges();
                    }
                }
            }

            ViewBag.Message = "success: tracks";
            return(View("Index"));
        }