public void GetRecommendationsUsingUserId()
        {
            const string baseFolder = nameof(GetRecommendationsUsingUserId);

            Directory.CreateDirectory(baseFolder);

            var    generator           = new ModelTrainingFilesGenerator(8);
            string usageFileFolderPath = Path.Combine(baseFolder, "usage");

            Directory.CreateDirectory(usageFileFolderPath);
            IList <string> warmItems = generator.CreateUsageFile(Path.Combine(usageFileFolderPath, "usage.csv"), 1000);

            var trainingParameters = ModelTrainingParameters.Default;

            trainingParameters.EnableBackfilling = false;
            trainingParameters.EnableUserToItemRecommendations = true;
            trainingParameters.AllowSeedItemsInRecommendations = true;

            Dictionary <string, Document> userHistory = null;
            IDocumentStore documentStore = Substitute.For <IDocumentStore>();

            documentStore.AddDocumentsAsync(Arg.Any <string>(), Arg.Any <IEnumerable <Document> >(),
                                            Arg.Any <CancellationToken>())
            .Returns(info =>
            {
                userHistory = info.Arg <IEnumerable <Document> >().ToDictionary(doc => doc.Id);
                return(Task.FromResult(userHistory.Count));
            });

            documentStore.GetDocument(Arg.Any <string>(), Arg.Any <string>())
            .Returns(info => userHistory?[info.ArgAt <string>(1)]);

            var trainer             = new ModelTrainer(documentStore: documentStore);
            ModelTrainResult result = trainer.TrainModel(trainingParameters, usageFileFolderPath, null, null, CancellationToken.None);

            Assert.IsNotNull(result);
            Assert.IsTrue(result.IsCompletedSuccessfuly);

            var recommender = new Recommender(result.Model, documentStore);
            var items       = new List <UsageEvent>
            {
                new UsageEvent
                {
                    ItemId    = warmItems.First(),
                    EventType = UsageEventType.Click,
                    Timestamp = DateTime.UtcNow
                }
            };

            string userId = generator.Users.FirstOrDefault();
            IList <Recommendation> recommendations = recommender.GetRecommendations(items, userId, 3);

            // expect the document store to be called once with the provided user id
            documentStore.Received(1).GetDocument(Arg.Any <string>(), userId);

            Assert.IsNotNull(recommendations);
            Assert.IsTrue(recommendations.Any());
            Assert.IsTrue(recommendations.All(r => r != null));
            Assert.IsTrue(recommendations.All(r => r.Score > 0 && !string.IsNullOrWhiteSpace(r.RecommendedItemId)));
        }
Ejemplo n.º 2
0
        public async Task Init()
        {
            var hotel = await _hotelService.GetById <HotelDTO>(_hotelId);

            Hotel = hotel;
            var ratingData = await _ratingService.Get <List <RatingDTO> >(new RatingSearchRequest { HotelId = hotel.Id });

            Recommender recommender = new Recommender(hotel.Id, hotel.CityId);

            var recHotels = await recommender.GetSimilarHotels();

            foreach (var recHotel in recHotels)
            {
                RecommendedHotels.Add(recHotel);
            }

            foreach (var item in ratingData)
            {
                var rating =
                    new RatingModel
                {
                    UserName   = (await _userService.GetById <UserDTO>(item.UserId)).UserName,
                    Rating     = item.HotelRating,
                    RatingDate = item.RatingDate
                };
                Reviews.Add(rating);
            }
        }
Ejemplo n.º 3
0
 public ActionResult Index(int?page)
 {
     if (User.Identity.IsAuthenticated)
     {
         var person    = PersonRepository.GetPersonByEmail(User.Identity.Name, true);
         var movies    = new List <MovieViewModel>();
         var BLLmovies = new List <BLL.Movie>();
         #region Getting recommended movies here
         BLLmovies = Recommender.Recommend(person).ToList();
         //BLLmovies = MovieProvider.RecommendMovies();
         foreach (var BLLmovie in BLLmovies)
         {
             if (BLLmovie.Title == "" || BLLmovie.PosterPath == null || BLLmovie.PosterPath == "")
             {
                 continue;
             }
             var movie = new MovieViewModel();
             movie.CastSimpleFromMovie(BLLmovie);
             movies.Add(movie);
         }
         #endregion
         int pageSize   = 9;
         int pageNumber = (page ?? 1);
         return(View("HomeLoggedIn", movies.ToPagedList(pageNumber, pageSize)));
     }
     else
     {
         return(View());
     }
 }
Ejemplo n.º 4
0
        public override double GetEvaluation(IDictionary <User, ICollection <Preference> > testUserPrefs,
                                             Recommender recommender)
        {
            RunningAverage average = new FullRunningAverage();

            foreach (KeyValuePair <User, ICollection <Preference> > entry in testUserPrefs)
            {
                foreach (Preference realPref in entry.Value)
                {
                    User testUser = entry.Key;
                    try
                    {
                        double estimatedPreference =
                            recommender.EstimatePreference(testUser.ID, realPref.Item.ID);
                        if (!double.IsNaN(estimatedPreference))
                        {
                            double diff = realPref.Value - estimatedPreference;
                            average.AddDatum(diff * diff);
                        }
                    }
                    catch (NoSuchElementException nsee)
                    {
                        // It's possible that an item exists in the test data but not training data in which case
                        // NSEE will be thrown. Just ignore it and move on.
                        log.Info("Element exists in test data but not training data: " + testUser.ID, nsee);
                    }
                }
            }
            return(Math.Sqrt(average.Average));
        }
Ejemplo n.º 5
0
        ///
        public override void LoadModel(string filename)
        {
            using (StreamReader reader = Recommender.GetReader(filename, this.GetType()))
            {
                var bias = double.Parse(reader.ReadLine(), CultureInfo.InvariantCulture);

                var user_factors = (Matrix <double>)IMatrixUtils.ReadMatrix(reader, new Matrix <double>(0, 0));
                var item_factors = (Matrix <double>)IMatrixUtils.ReadMatrix(reader, new Matrix <double>(0, 0));

                if (user_factors.NumberOfColumns != item_factors.NumberOfColumns)
                {
                    throw new Exception(
                              string.Format("Number of user and item factors must match: {0} != {1}",
                                            user_factors.NumberOfColumns, item_factors.NumberOfColumns));
                }

                this.MaxUserID = user_factors.NumberOfRows - 1;
                this.MaxItemID = item_factors.NumberOfRows - 1;

                // assign new model
                this.global_bias = bias;
                if (this.NumFactors != user_factors.NumberOfColumns)
                {
                    Console.Error.WriteLine("Set num_factors to {0}", user_factors.NumberOfColumns);
                    this.NumFactors = (uint)user_factors.NumberOfColumns;
                }
                this.user_factors = user_factors;
                this.item_factors = item_factors;
            }
        }
Ejemplo n.º 6
0
        public void Initialize()
        {
            DbContextHelpers contextHelpers = new DbContextHelpers();

            db          = contextHelpers.getDbContext();
            recommender = new Recommender(db.Object);
        }
Ejemplo n.º 7
0
        public ServisModel AddServis(ServisInsertRequest request)
        {
            var         entity             = _mapper.Map <Database.Servisi>(request);
            Recommender recommender        = new Recommender(_context, _mapper);
            var         dodjeljeniServiser = recommender.GetServisera(request.UredjajId);

            if (dodjeljeniServiser == null)
            {
                dodjeljeniServiser = _context.KorisniciUloge.Include(k => k.Korisnik).Where(ko => ko.Uloga.Naziv == "serviser").Select(k => k.Korisnik).FirstOrDefault();
            }
            entity.ServiserId = dodjeljeniServiser.KorisnikId;
            var status1 = _context.StatusServisa.Where(x => x.Naziv == "Servis napravljen").FirstOrDefault();
            var status2 = _context.StatusServisa.Where(x => x.Naziv == "Servis dodjeljen serviseru").FirstOrDefault();

            entity.StatusServisaId = status2.StatusServisaId;
            _context.Servisi.Add(entity);
            _context.SaveChanges();
            StanjeServisa ss1 = new StanjeServisa();

            ss1.Azurirano       = DateTime.Now;
            ss1.Napomena        = "Servir kreiran";
            ss1.ServisId        = entity.ServisId;
            ss1.StatusServisaId = status1.StatusServisaId;
            _context.StanjeServisa.Add(ss1);
            _context.SaveChanges();
            StanjeServisa ss2 = new StanjeServisa();

            ss2.Azurirano       = DateTime.Now;
            ss2.Napomena        = "Servis uspjesno dodjeljen serviseru";
            ss2.ServisId        = entity.ServisId;
            ss2.StatusServisaId = status2.StatusServisaId;
            _context.StanjeServisa.Add(ss2);
            _context.SaveChanges();
            return(_mapper.Map <ServisModel>(entity));
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Get recommendations from a model
        /// </summary>
        /// <param name="modelId">The id of the model to recommend with</param>
        /// <param name="usageEvents">Usage events to get recommendations for</param>
        /// <param name="userId">An optional id of the user to provide recommendations for. Any stored usage events associated with this user will be considered when getting recommendations</param>
        /// <param name="recommendationCount">Number of recommendations to get</param>
        /// <param name="cancellationToken">A cancellation token used to abort the operation</param>
        public async Task <IList <Recommendation> > ScoreAsync(Guid modelId, IEnumerable <IUsageEvent> usageEvents, string userId, int recommendationCount, CancellationToken cancellationToken)
        {
            // return empty result if no recommendations requested
            if (recommendationCount <= 0)
            {
                Trace.TraceVerbose($"Requested '{recommendationCount}' recommendation for model '{modelId}' - returning empty recommendations.");
                return(new Recommendation[0]);
            }

            Trace.TraceInformation($"Getting or creating a recommender for model '{modelId}'");
            Recommender recommender = await GetOrCreateRecommenderAsync(modelId, cancellationToken);

            try
            {
                Trace.TraceInformation($"Getting recommendations for model '{modelId}'");
                return(recommender.GetRecommendations(usageEvents, userId, recommendationCount));
            }
            catch (Exception ex)
            {
                var exception = new Exception(
                    $"Exception while trying to get recommendations for model with id {modelId}", ex);
                Trace.TraceError(exception.ToString());
                throw exception;
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Gets or creates a <see cref="Recommender"/> for the input model
        /// </summary>
        private async Task <Recommender> GetOrCreateRecommenderAsync(Guid modelId, CancellationToken cancellationToken)
        {
            var key         = modelId.ToString();
            var recommender = _recommendersCache.Get(key) as Recommender;

            if (recommender == null)
            {
                using (var stream = new MemoryStream())
                {
                    Trace.TraceInformation($"Downloading the serialized trained model '{modelId}' from blob storage");
                    await DownloadTrainedModelAsync(modelId, stream, cancellationToken);

                    // rewind the stream
                    stream.Seek(0, SeekOrigin.Begin);

                    Trace.TraceInformation($"Deserializing the trained model '{modelId}'");
                    ITrainedModel trainedModel = DeserializeTrainedModel(stream, modelId);

                    // get the model's user history store
                    IDocumentStore modelDocumentStore = _documentStoreProvider.GetDocumentStore(modelId);

                    // create a recommender from the trained model
                    recommender = new Recommender(trainedModel, modelDocumentStore, new Tracer(nameof(Recommender)));
                }

                bool result = _recommendersCache.Add(key, recommender,
                                                     new CacheItemPolicy {
                    AbsoluteExpiration = DateTimeOffset.UtcNow.AddDays(1)
                });
                Trace.TraceVerbose($"Addition of model {modelId} recommender to the cache resulted with '{result}'");
            }

            return(recommender);
        }
        public void GetRecommendedMovies_testuser_StarWarsRecommended()
        {
            new User("testuser");
            MySqlCommands.RateMovie(12, "thumbsup");  // star wars movie
            MySqlCommands.RateMovie(212, "thumbsup"); // star wars movie
            MySqlCommands.RateMovie(73, "thumbsup");  // star wars movie
            MySqlCommands.RateMovie(10, "thumbsup");  // fight club
            MySqlCommands.RateMovie(13, "thumbsup");  // forrest gump
            MySqlCommands.RateMovie(22, "thumbsup");  // se7en

            Recommender.Update("genre", "directors", "actors");
            Recommender.AlgorithmMovieWeight(MySqlCommands.FindMovieFromId(new List <int> {
                20
            }).ToList());
            // given user data with these 6 movies for the movieid 20, Star Wars(1997)
            // genre: action(0,5), adventure(0,5), fantasy(0,5), sci-fi(0,5)
            // director: george lucas(0)
            // actors: Mark(0,5), Harrison(0,5), Carrie(0,5), Peter C(0), Alec(0,1667), Anthony(0,3333), Kenny(0,1667), Peter M(0,3333), David(0,1667), Phil(0)

            // total director = 0
            // total actors = 0,5 + 0,5 + 0,5 + 0 + 0,1667 + 0,3333 + 0,1667 + 0,3333 + 0,1667 + 0 = 2,6667
            // total genre = 0,5 + 0,5/4 + 0,5/4 + 0,5/4 = 0,875

            // total weight = 0 + 2,6667 + 0,875 = 3,5417

            KeyValuePair <MovieMenuItem, double> movie = Recommender.MovieRatingsWeight.First();

            Assert.AreEqual(Math.Round(3.5417, 2), (Math.Round(movie.Value, 2))); // rounds down due to data is more preceise
        }
        public static void evaluate(Recommender recommender, DataModel model, int samples, RunningAverage tracker, string tag)
        {
            printHeader();
            IEnumerator <long> enumerator = recommender.getDataModel().getUserIDs();

            while (enumerator.MoveNext())
            {
                long current = enumerator.Current;
                List <RecommendedItem> items = recommender.recommend(current, model.getNumItems());
                PreferenceArray        prefs = model.getPreferencesFromUser(current);
                prefs.sortByValueReversed();
                FastIDSet modelSet = new FastIDSet();
                long      num2     = setBits(modelSet, items, samples);
                FastIDSet set2     = new FastIDSet();
                num2 = Math.Max(num2, setBits(set2, prefs, samples));
                int max = Math.Min(mask(modelSet, set2, num2), samples);
                if (max >= 2)
                {
                    long[] itemsL = getCommonItems(modelSet, items, max);
                    long[] itemsR = getCommonItems(modelSet, prefs, max);
                    double datum  = scoreCommonSubset(tag, current, samples, max, itemsL, itemsR);
                    tracker.addDatum(datum);
                }
            }
        }
Ejemplo n.º 12
0
        public async Task <CompletionResult> GetCompletionList(WorkspaceRequest request, Budget budget)
        {
            budget ??= new TimeBudget(TimeSpan.FromSeconds(defaultBudgetInSeconds));

            var package = await _packageFinder.Find <ICreateWorkspace>(request.Workspace.WorkspaceType);

            var workspace = await request.Workspace.InlineBuffersAsync();

            var sourceFiles = workspace.GetSourceFiles();

            var(_, documents) = await package.GetCompilationForLanguageServices(
                sourceFiles,
                GetSourceCodeKind(request),
                GetUsings(request.Workspace),
                budget);

            var file = workspace.GetFileFromBufferId(request.ActiveBufferId);

            var(_, _, absolutePosition) = workspace.GetTextLocation(request.ActiveBufferId);
            var selectedDocument = documents.First(doc => doc.IsMatch(file));

            var service = CompletionService.GetService(selectedDocument);

            var completionList = await service.GetCompletionsAsync(selectedDocument, absolutePosition);

            var semanticModel = await selectedDocument.GetSemanticModelAsync();

            var diagnostics = DiagnosticsExtractor.ExtractSerializableDiagnosticsFromSemanticModel(request.ActiveBufferId, budget, semanticModel, workspace);

            var symbols = await Recommender.GetRecommendedSymbolsAtPositionAsync(
                semanticModel,
                absolutePosition,
                selectedDocument.Project.Solution.Workspace);

            var symbolToSymbolKey = new Dictionary <(string, int), ISymbol>();

            foreach (var symbol in symbols)
            {
                var key = (symbol.Name, (int)symbol.Kind);
                if (!symbolToSymbolKey.ContainsKey(key))
                {
                    symbolToSymbolKey[key] = symbol;
                }
            }

            if (completionList == null)
            {
                return(new CompletionResult(requestId: request.RequestId, diagnostics: diagnostics));
            }

            var completionItems = completionList.Items
                                  .Where(i => i != null)
                                  .Select(item => item.ToModel(symbolToSymbolKey, selectedDocument));

            return(new CompletionResult(completionItems
                                        .Deduplicate()
                                        .ToArray(),
                                        requestId: request.RequestId,
                                        diagnostics: diagnostics));
        }
Ejemplo n.º 13
0
    // TODO add compute_fit again

    static void Usage(int exit_code)
    {
        Console.WriteLine(@"
MyMediaLite KDD Cup 2011 Track 2 tool

 usage:  KDDTrack2.exe METHOD [ARGUMENTS] [OPTIONS]

  use '-' for either TRAINING_FILE or TEST_FILE to read the data from STDIN

  methods (plus arguments and their defaults):");

        Console.Write("   - ");
        Console.WriteLine(string.Join("\n   - ", Recommender.List("MyMediaLite.ItemRecommendation")));

        Console.WriteLine(@"method ARGUMENTS have the form name=value

  general OPTIONS have the form name=value
   - random_seed=N              set random seed to N
   - data_dir=DIR               load all files from DIR
   - save_model=FILE            save computed model to FILE
   - load_model=FILE            load model from FILE
   - prediction_file=FILE       write the predictions to  FILE ('-' for STDOUT)
   - sample_data=BOOL           assume the sample data set instead of the real one
   - predict_score=BOOL         predict scores (double precision) instead of 0/1 decisions
   - predict_rated=BOOL         instead of predicting what received a good rating, try to predict what received a rating at all
                                (implies predict_score)

  options for finding the right number of iterations (MF methods)
   - find_iter=N                give out statistics every N iterations
   - max_iter=N                 perform at most N iterations
   - epsilon=NUM                abort iterations if error is more than best result plus NUM
   - err_cutoff=NUM             abort if error is above NUM");

        Environment.Exit(exit_code);
    }
Ejemplo n.º 14
0
        ///
        public override void LoadModel(string file)
        {
            using (StreamReader reader = Recommender.GetReader(file, this.GetType()))
            {
                int numberOfComponents = int.Parse(reader.ReadLine());

                var weights      = new List <double>();
                var recommenders = new List <IRecommender>();

                for (int i = 0; i < numberOfComponents; i++)
                {
                    string[] data = reader.ReadLine().Split(' ');

                    Type t = Type.GetType(data[0]);
                    recommenders.Add((IRecommender)Activator.CreateInstance(t));
                    recommenders[i].LoadModel("model-" + i + ".txt");

                    // make sure the recommenders get their data FIXME

                    weights.Add(double.Parse(data[1], CultureInfo.InvariantCulture));
                }

                this.weights      = weights;
                this.recommenders = recommenders;
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// 取得光标位置的可用智能感知项目
        /// </summary>
        /// <param name="bodytext">代码</param>
        /// <param name="logic">对应项目</param>
        /// <param name="index">光标所在位置</param>
        /// <returns>可能智能感知项目</returns>
        public IEnumerable <ISymbol> GetRecommendedSymbolsAtPositionAsync(string bodytext, IDocumentProvider logic, int index)
        {
            if (logic is IPartCodeProvider)
            {
                var doc = Documents[logic.GetDocumentGuid()];
                bodytext = (logic as IPartCodeProvider).ReplaceNewCode(doc.GetTextAsync().Result.ToString(), bodytext);


                //var doc = Documents[method.BusinessObject.Oid];
                //var newText = method.ReplaceNewCode(doc.GetTextAsync().Result.ToString(), bodytext);

                //UpdateText(newText, method.BusinessObject);


                //var semanticModel = SemanticModels[method.BusinessObject.Oid];
                //return Recommender.GetRecommendedSymbolsAtPositionAsync(semanticModel, pos, Workspace).Result;
            }

            UpdateText(bodytext, logic);
            if (logic is IPartCodeProvider)
            {
                var define = (logic as IPartCodeProvider).DefaultLocation;
                index = bodytext.IndexOf(define) + define.Length + index + 1;
            }


            var semanticModel = SemanticModels[logic.GetDocumentGuid()];

            return(Recommender.GetRecommendedSymbolsAtPositionAsync(semanticModel, index, Workspace).Result);
        }
Ejemplo n.º 16
0
                public async Task WhenRecommenderIsNullResultExeption()
                {
                    var rec        = new Recommender(strngr);
                    var controller = new ProductController(streinger: strngr, recommendator: null);

                    Assert.CatchAsync <NullReferenceException>(() => controller.Product("exists_objects"));
                }
Ejemplo n.º 17
0
        public IReadOnlyList <ISymbol> GetRecommendedSymbols(DocumentId documentId, int position)
        {
            var document      = CurrentSolution.GetDocument(documentId);
            var semanticModel = document.GetSemanticModelAsync().Result;

            return(Recommender.GetRecommendedSymbolsAtPosition(semanticModel, position, this).ToArray());
        }
        public async Task <IActionResult> AutoComplete([FromBody] Request request)
        {
            _workspace.EnsureBufferUpdated(request);

            var completions = Enumerable.Empty <AutoCompleteResponse>();

            var document = _workspace.GetDocument(request.FileName);

            if (document != null)
            {
                var sourceText = await document.GetTextAsync();

                var position = sourceText.Lines.GetPosition(new LinePosition(request.Line - 1, request.Column - 1));
                var model    = await document.GetSemanticModelAsync();

                var symbols = Recommender.GetRecommendedSymbolsAtPosition(model, position, _workspace);

                completions = symbols.Select(MakeAutoCompleteResponse);
            }
            else
            {
                return(new HttpNotFoundResult());
            }

            return(new ObjectResult(completions));
        }
        // GET: Recommendations
        public async Task <ActionResult> Index()
        {
            var userClaims = User.Identity as System.Security.Claims.ClaimsIdentity;

            ViewBag.Name = userClaims?.FindFirst("name")?.Value;

            IEnumerable <PreferenceEntity> preferenceEntities = TableActions.GetPreferencesResult("PreferenceTable", userClaims?.FindFirst(System.IdentityModel.Claims.ClaimTypes.Name)?.Value);
            IEnumerable <PantryEntity>     pantryEntities     = TableActions.GetPantryResult("PantryTable", userClaims?.FindFirst(System.IdentityModel.Claims.ClaimTypes.Name)?.Value);

            var preference = preferenceEntities.FirstOrDefault();
            IEnumerable <string> dietaryRestrictions = null;
            string diet = null;

            if (preference != null)
            {
                dietaryRestrictions = preference.healthPreference.Split(',');
                diet = preference.dietPreference;
            }

            string[]       foods                = { "pork", "bread", "peppers", "sugar", "corn" };
            string[]       pantryList           = pantryEntities.Select(x => x.RowKey).ToArray();
            IngredientList userPreferences      = new IngredientList(foods);
            IngredientList pantry               = new IngredientList(pantryList);
            List <Tuple <Recipe, double> > recs = await Recommender.GetRecommendations(userPreferences, pantry, dietaryRestrictions, diet);

            return(View(recs));
        }
Ejemplo n.º 20
0
        public static IEnumerable <ICompletionData> Resolve(string code, int position, string[] references = null, IEnumerable <Tuple <string, string> > includes = null)
        {
            var completions = new List <ICompletionData>();

            var pos       = position - 1;
            var workspace = new AdhocWorkspace();

            var document = InitWorkspace(workspace, code, null, AgregateRefs(references), includes);
            var model    = document.GetSemanticModelAsync().Result;
            var symbols  = Recommender.GetRecommendedSymbolsAtPositionAsync(model, position, workspace).Result.ToArray();

            var data = symbols.Select(s => s.ToCompletionData()).ToArray();

            foreach (var group in data.GroupBy(x => x.DisplayText))
            {
                var item = group.First();

                if (group.Count() > 1)
                {
                    foreach (var overload in group)
                    {
                        item.AddOverload(overload);
                        //item.HasOverloads = true;
                    }
                }

                completions.Add(item);
            }

            return(completions);
        }
Ejemplo n.º 21
0
        private async Task <IEnumerable <CompletionItem> > GetCompletionList(
            string code,
            int cursorPosition)
        {
            var(document, offset) = GetDocumentWithOffsetFromCode(code);
            var absolutePosition = cursorPosition + offset;

            var service = CompletionService.GetService(document);

            var completionList = await service.GetCompletionsAsync(document, absolutePosition);

            if (completionList is null)
            {
                return(Enumerable.Empty <CompletionItem>());
            }

            var semanticModel = await document.GetSemanticModelAsync();

            var symbols = await Recommender.GetRecommendedSymbolsAtPositionAsync(semanticModel, absolutePosition, document.Project.Solution.Workspace);

            var symbolToSymbolKey = new Dictionary <(string, int), ISymbol>();

            foreach (var symbol in symbols)
            {
                var key = (symbol.Name, (int)symbol.Kind);
                if (!symbolToSymbolKey.ContainsKey(key))
                {
                    symbolToSymbolKey[key] = symbol;
                }
            }
            var items = completionList.Items.Select(item => item.ToModel(symbolToSymbolKey, document)).ToArray();

            return(items);
        }
Ejemplo n.º 22
0
        // GET: api/FoodRecommend
        public async Task <object> Get(string UserID, string TagId = "")
        {
            string response = await Recommender.InvokeRequestResponseService(UserID);

            var        obj = JsonConvert.DeserializeObject <object>(response);
            JObject    rss = JObject.Parse(response);
            List <int> arr = new List <int>();

            for (int i = 1; i < 20; i++)
            {
                string tempstring = (string)rss["Results"]["output1"][0]["Item " + i.ToString()];
                if (!string.IsNullOrEmpty(tempstring))
                {
                    arr.Add(int.Parse(tempstring));
                }
            }

            ApplicationDbContext ApplicationDbContext = new ApplicationDbContext();
            var arr3 = ApplicationDbContext.FoodModels.Include("Restaurant")
                       .Where(c => arr.Contains(c.FoodID) && c.TagID.Contains(TagId))
                       .Select(x => new { x.Restaurant.Name, x.Restaurant.GPSLocation, x }).ToList();

            //var arr2 = ApplicationDbContext.FoodModels.Where(c => arr3.Contains(c.RestaurantID)).ToList();
            return(Json(arr2));
        }
Ejemplo n.º 23
0
		public override double GetEvaluation(IDictionary<User, ICollection<Preference>> testUserPrefs,
		                     Recommender recommender)
		{
			RunningAverage average = new FullRunningAverage();
			foreach (KeyValuePair<User, ICollection<Preference>> entry in testUserPrefs) 
			{
				foreach (Preference realPref in entry.Value) 
				{
					User testUser = entry.Key;
					try 
					{
						double estimatedPreference =
							recommender.EstimatePreference(testUser.ID, realPref.Item.ID);
						if (!double.IsNaN(estimatedPreference)) 
						{
							double diff = realPref.Value - estimatedPreference;
							average.AddDatum(diff * diff);
						}
					} 
                    catch (NoSuchElementException nsee) 
                    {
						// It's possible that an item exists in the test data but not training data in which case
						// NSEE will be thrown. Just ignore it and move on.
						log.Info("Element exists in test data but not training data: " + testUser.ID, nsee);
					}
				}
			}
			return Math.Sqrt(average.Average);
		}
Ejemplo n.º 24
0
        private async Task <IEnumerable <CompletionItem> > GetCompletionList(string code, int cursorPosition, ScriptState scriptState)
        {
            var metadataReferences = ImmutableArray <MetadataReference> .Empty;

            var forcedState = false;

            if (scriptState == null)
            {
                scriptState = await CSharpScript.RunAsync(string.Empty, ScriptOptions);

                forcedState = true;
            }

            var compilation = scriptState.Script.GetCompilation();

            metadataReferences = metadataReferences.AddRange(compilation.References);
            var originalCode = forcedState ? string.Empty : scriptState.Script.Code ?? string.Empty;

            var buffer = new StringBuilder(originalCode);

            if (!string.IsNullOrWhiteSpace(originalCode) && !originalCode.EndsWith(Environment.NewLine))
            {
                buffer.AppendLine();
            }

            buffer.AppendLine(code);
            var fullScriptCode   = buffer.ToString();
            var offset           = fullScriptCode.LastIndexOf(code, StringComparison.InvariantCulture);
            var absolutePosition = Math.Max(offset, 0) + cursorPosition;

            if (_fixture == null || _metadataReferences != metadataReferences)
            {
                _fixture            = new WorkspaceFixture(compilation.Options, metadataReferences);
                _metadataReferences = metadataReferences;
            }

            var document = _fixture.ForkDocument(fullScriptCode);
            var service  = CompletionService.GetService(document);

            var completionList = await service.GetCompletionsAsync(document, absolutePosition);

            var semanticModel = await document.GetSemanticModelAsync();

            var symbols = await Recommender.GetRecommendedSymbolsAtPositionAsync(semanticModel, absolutePosition, document.Project.Solution.Workspace);

            var symbolToSymbolKey = new Dictionary <(string, int), ISymbol>();

            foreach (var symbol in symbols)
            {
                var key = (symbol.Name, (int)symbol.Kind);
                if (!symbolToSymbolKey.ContainsKey(key))
                {
                    symbolToSymbolKey[key] = symbol;
                }
            }
            var items = completionList.Items.Select(item => item.ToModel(symbolToSymbolKey, document).ToDomainObject()).ToArray();

            return(items);
        }
Ejemplo n.º 25
0
                public void WhenParamIsNullResultNull()
                {
                    var recommender = new Recommender(strngr);

                    var recommendations = recommender.RecommendationsTo(null);

                    Assert.IsNull(recommendations);
                }
Ejemplo n.º 26
0
 ///
 public override void LoadModel(string filename)
 {
     using (StreamReader reader = Recommender.GetReader(filename, this.GetType()))
     {
         this.global_average  = double.Parse(reader.ReadLine(), CultureInfo.InvariantCulture);
         this.entity_averages = VectorUtils.ReadVector(reader);
     }
 }
Ejemplo n.º 27
0
 ///
 public override void SaveModel(string filename)
 {
     using (StreamWriter writer = Recommender.GetWriter(filename, this.GetType()))
     {
         writer.WriteLine(global_average.ToString(CultureInfo.InvariantCulture));
         VectorUtils.WriteVector(writer, entity_averages);
     }
 }
Ejemplo n.º 28
0
 ///
 public override void SaveModel(string file)
 {
     using (StreamWriter writer = Recommender.GetWriter(file, this.GetType()))
     {
         IMatrixUtils.WriteMatrix(writer, user_factors);
         IMatrixUtils.WriteMatrix(writer, item_factors);
     }
 }
Ejemplo n.º 29
0
            public void WhenParamIsNullResultNull()
            {
                var recommender = new Recommender(strngr);

                var comments = recommender.CommentsTo(null);

                Assert.IsNull(comments);
            }
Ejemplo n.º 30
0
 ///
 public override void SaveModel(string filename)
 {
     using (StreamWriter writer = Recommender.GetWriter(filename, this.GetType()))
     {
         writer.WriteLine(global_bias.ToString(CultureInfo.InvariantCulture));
         IMatrixUtils.WriteMatrix(writer, user_factors);
         IMatrixUtils.WriteMatrix(writer, item_factors);
     }
 }
Ejemplo n.º 31
0
 ///
 public override void SaveModel(string file)
 {
     using (StreamWriter writer = Recommender.GetWriter(file, this.GetType()))
     {
         writer.WriteLine(global_average.ToString(CultureInfo.InvariantCulture));
         IMatrixUtils.WriteSparseMatrix(writer, diff_matrix);
         IMatrixUtils.WriteSparseMatrix(writer, freq_matrix);
     }
 }
		public abstract double GetEvaluation(IDictionary<User, ICollection<Preference>> testUserPrefs, 
		                              Recommender recommender);
Ejemplo n.º 33
0
    static void Main(string[] args)
    {
        ExplorationSpace space = Common.ExternalIO.LoadSpace(
            ExternalIO.WorldDataPath(),
            ExternalIO.GraphDataPath());
        recommender = new Recommender(space);

        if (space != null)
        {
            Console.WriteLine("Starting server...");
            Task serverTask = StartServer();

            Console.WriteLine("Press ENTER to stop server . . .");
            Console.ReadLine();

            shutdown = true;
            serverTask.Wait();
        }

        Console.WriteLine("Press any key to continue . . .");
        Console.ReadKey();
    }
Ejemplo n.º 34
0
 public void AddRecommender(Recommender r)
 {
     r.NumberOfTags = NumberOfTags;
     rcs.Add (r);
 }
Ejemplo n.º 35
0
        public static void runKFoldCrossValidation(object parameters)
        {
            try {
                Program.semaphore.WaitOne();

                // Setting environment for experiments
                ThreadParams p = (ThreadParams)parameters;
                string dbFile = p.dbFile;
                int nFolds = p.nFolds;
                int nIterations = p.nIterations;

                // Check if the DB file exists
                if (!File.Exists(dbFile))
                    throw new FileNotFoundException(dbFile);

                // Do experiments for each methodology
                foreach (Methodology methodology in Program.methodologies) {
                    // Get ego user's ID and his like count
                    long egoUser = long.Parse(Path.GetFileNameWithoutExtension(dbFile));
                    int cntLikes = 0;

                    // Check if this experiment has ever been performed earlier
                    int m = (int)methodology;
                    if (Program.existingResults.ContainsKey(egoUser) && Program.existingResults[egoUser].Contains(m)) {
                        lock (Program.locker) {
                            Console.WriteLine("Ego network(" + egoUser + "): done on experiment #" + m);
                        }
                        continue;
                    }

                    // Final result to put the experimental result per fold together
                    var finalResult = new Dictionary<EvaluationMetric, double>();
                    foreach (EvaluationMetric metric in Enum.GetValues(typeof(EvaluationMetric)))
                        finalResult.Add(metric, 0d);

                    // Need to avoid the following error: "Collection was modified; enumeration operation may not execute"
                    List<EvaluationMetric> metrics = new List<EvaluationMetric>(finalResult.Keys);

                    // K-Fold Cross Validation
                    for (int fold = 0; fold < nFolds; fold++) {
                        // Load graph information from database and then configurate the graph
                        DataLoader loader = new DataLoader(dbFile, nFolds);
                        if (fold == 0) {
                            if (loader.checkEgoNetworkValidation() == false)
                                return;
                            cntLikes = loader.cntLikesOfEgoUser;
                        }
                        loader.graphConfiguration(methodology, fold);

                        // Nodes and edges of graph
                        Dictionary<int, Node> nodes = loader.allNodes;
                        Dictionary<int, List<ForwardLink>> edges = loader.allLinks;

                        // Exeption: for the case that mention count is included when the friendship is none
                        if (methodology == Methodology.INCL_MENTIONCOUNT
                            || methodology == Methodology.EXCL_FRIENDSHIP
                            || methodology == Methodology.INCL_FOLLOWSHIP_ON_THIRDPARTY_AND_MENTIONCOUNT) {
                            foreach (List<ForwardLink> forwardLinks in edges.Values) {
                                List<int> indFriendshipLinks = new List<int>();
                                for (int i = 0; i < forwardLinks.Count; i++) {
                                    if (forwardLinks[i].type == EdgeType.FRIENDSHIP)
                                        indFriendshipLinks.Add(i);
                                }
                                foreach (int i in indFriendshipLinks) {
                                    ForwardLink forwardLink = forwardLinks[i];
                                    if (forwardLink.type == EdgeType.FRIENDSHIP) {
                                        forwardLink.type = EdgeType.UNDEFINED;
                                        forwardLinks[i] = forwardLink;
                                    }
                                }
                            }
                        }

                        // Make a graph structure to run Random Walk with Restart algorithm
                        Graph graph = new Graph(nodes, edges);
                        graph.buildGraph();

                        // Get recommendation list
                        Recommender recommender = new Recommender(graph);
                        var recommendation = recommender.Recommendation(0, 0.15f, nIterations);

                        //// temp
                        //lock (Program.locker) {
                        //    StreamWriter logger = new StreamWriter(Program.dirData + "rank.dat", true);
                        //    logger.WriteLine(methodology);
                        //    for (int i = 0; i < recommendation.Count; i++)
                        //        logger.WriteLine(recommendation[i].Key + ":\t" + recommendation[i].Value);
                        //    logger.Close();
                        //}

                        // Get evaluation result
                        int nHits = 0;
                        double sumPrecision = 0;
                        for (int i = 0; i < recommendation.Count; i++) {
                            if (loader.testSet.Contains(recommendation[i].Key)) {
                                nHits += 1;
                                sumPrecision += (double)nHits / (i + 1);
                            }
                        }

                        // Add current result to final one
                        foreach (EvaluationMetric metric in metrics) {
                            switch (metric) {
                                case EvaluationMetric.HIT:
                                    finalResult[metric] += nHits; break;
                                case EvaluationMetric.AVGPRECISION:
                                    finalResult[metric] += (nHits == 0) ? 0 : sumPrecision / nHits; break;
                            }
                        }
                    }

                    lock (Program.locker) {
                        // Write the result of this ego network to file
                        StreamWriter logger = new StreamWriter(Program.dirData + "result.dat", true);
                        logger.Write(egoUser + "\t" + (int)methodology + "\t" + nFolds + "\t" + nIterations);
                        foreach (EvaluationMetric metric in metrics) {
                            switch (metric) {
                                case EvaluationMetric.HIT:
                                    logger.Write("\t" + (int)finalResult[metric] + "\t" + cntLikes); break;
                                case EvaluationMetric.AVGPRECISION:
                                    logger.Write("\t" + (finalResult[metric] / nFolds)); break;
                            }
                        }
                        logger.WriteLine();
                        logger.Close();
                    }
                }
            } catch (FileNotFoundException e) {
                Console.WriteLine(e);
            } finally {
                Program.semaphore.Release();
            }
        }