コード例 #1
0
        /// <summary>
        /// Starts the customer review data pipeline.
        /// </summary>
        public static void StartCustomerReviewDataPipeline()
        {
            Logger.Info(@"Customer review data pipeline starting...");

            var databaseConnectionStringName = @"DatabaseConnectionString";

            using (var dbContext = new CustomerReviewDbContext(databaseConnectionStringName))
            {
                if (dbContext.ProductReviewSentenceSentiments.Any() || dbContext.ProductReviewSentenceTags.Any())
                {
                    Logger.Warn(@"Please clean the sentiment and tag weight tables and restart.");
                    return;
                }
            }

            var dataProvider = new CustomerReviewDataProvider(databaseConnectionStringName);
            var activityHub  = new DefaultActivityHub(new IActivity[]
            {
                new SplitCommentActivity(),
                new AnalyzeSentimentActivity(),
                new SaveSentenceSentimentActivity(databaseConnectionStringName),
                new ExtractTagWeightActivity(),
                new SaveSentenceTagWeightActivity(databaseConnectionStringName)
            });

            activityHub.ActivityExecuting += (sender, eventArgs) =>
            {
                var activity = sender as IActivity;

                if (activity == null)
                {
                    return;
                }

                Logger.Info(
                    $"{activity.Metadata.ActivityType}({activity.Metadata.InstanceId}) processing model: {eventArgs.Context.InputModel.CorrelationId}");
            };

            activityHub.ActivityExecuted += (sender, eventArgs) =>
            {
                var activity = sender as IActivity;

                if (activity == null)
                {
                    return;
                }

                Logger.Info(
                    $"{activity.Metadata.ActivityType}({activity.Metadata.InstanceId}) processed model: {eventArgs.Context.InputModel.CorrelationId}");
            };

            using (var pipeline = new CustomerReviewDataPipeline(dataProvider, activityHub))
            {
                pipeline.Start();
            }

            Logger.Info(@"Customer review data pipeline started.");
        }
コード例 #2
0
        /// <summary>
        /// Processes the model asynchronous.
        /// </summary>
        /// <param name="activityContext">The activity context.</param>
        /// <returns>
        /// The output model.
        /// </returns>
        protected override Task <EmptyModel> ProcessModelAsync(ActivityContext activityContext)
        {
            var inputModel = activityContext.GetInputModel <CustomerReviewSentencesTagWeightModel>();

            var entities = CustomerReviewSentencesTagWeightTranslator.ToEntities(inputModel);

            using (var dbContext = new CustomerReviewDbContext(this.databaseConnectionString))
            {
                dbContext.Configuration.AutoDetectChangesEnabled = false;

                dbContext.ProductReviewSentenceTags.AddRange(entities);
                dbContext.SaveChanges();
            }

            return(Task.FromResult(new EmptyModel(inputModel.CorrelationId)));
        }
コード例 #3
0
        /// <summary>
        /// Gets the models.
        /// </summary>
        /// <param name="pagingInfo">The paging information.</param>
        /// <returns>
        /// The data provider result.
        /// </returns>
        public override DataProviderResult GetModels(PagingInfo pagingInfo = null)
        {
            using (var dbContext = new CustomerReviewDbContext(this.databaseConnectionString))
            {
                if (pagingInfo == null)
                {
                    var totalCount = dbContext.ProductReviews.Count();
                    pagingInfo = new PagingInfo(totalCount, DefaultPageSize);
                }

                var resultModels =
                    dbContext.ProductReviews.AsNoTracking()
                    .OrderBy(e => e.Id)
                    .Skip(pagingInfo.PageIndex * pagingInfo.PageSize)
                    .Take(pagingInfo.PageSize)
                    .Select(CustomerReviewTranslator.FromDbEntity)
                    .ToList();

                return(new DataProviderResult(resultModels, pagingInfo));
            }
        }