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); } }
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 })); }
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")); }
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")); }
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)); } }
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")); } }
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")); }
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; }
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")); }