Exemple #1
0
        public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
                                                     HttpRequest req, TraceWriter log)
        {
            var r = new StreamReader(req.Body);

            log.Info("Prediction trigger function started...");
            var content = await r.ReadToEndAsync();

            log.Info(content);

            //if (typeof(Microsoft.ML.Runtime.Data.LoadTransform) == null ||
            //    typeof(Microsoft.ML.Runtime.Learners.LinearClassificationTrainer) == null ||
            //    typeof(Microsoft.ML.Runtime.Internal.CpuMath.SseUtils) == null)
            //{
            //  log.Info("Assemblies are NOT loaded correctly");
            //  return new BadRequestObjectResult("ML model failed to load");
            //}

            var request = JsonConvert.DeserializeObject <PredictionRequest>(content);

            var model = await PredictionModel.ReadAsync <BankStatementLineItem, PredictedLabel>(PredictionModelWrapper.GetModel());

            var predicted = model.Predict(BankStatementLineItem.ToBankStatementLineItem(request));

            //return predicted != null
            //  ? (ActionResult) new OkObjectResult(predicted.SubCategory)
            //  : new BadRequestObjectResult("prediction failed");

            return(new BadRequestObjectResult("no dice"));
        }
Exemple #2
0
        public static string Create(FetchAllResponse response)
        {
            if (response == null)
            {
                return(null);
            }

            var list = new List <BankStatementLineItem>();

            foreach (var account in response.Accounts)
            {
                var item = new BankStatementLineItem();

                foreach (var detail in account.StatementData.Details)
                {
                    // item.TransactionUtcDate = detail.DateObj.Date.DateTime;
                    item.Description = detail.Text;
                    item.Amount      = detail.Amount;
                    item.Notes       = Convert.ToString(detail.Notes);
                    // item.AccountNumber = account.AccountNumber;
                    item.Bank = account.Institution;
                    item.Tags = string.Join(",", detail.Tags);

                    list.Add(item);
                }
            }

            var          sb        = new StringBuilder();
            const string delimiter = ",";

            var tmp = new BankStatementLineItem();

            sb.AppendLine(nameof(tmp.SubCategory) + delimiter + nameof(tmp.Description) + delimiter + nameof(tmp.Bank) +
                          delimiter + nameof(tmp.Amount) + delimiter + nameof(tmp.AccountName) + delimiter +
                          nameof(tmp.Notes) +
                          delimiter + nameof(tmp.Tags));

            foreach (var item in list)
            {
                sb.AppendLine(item.SubCategory + delimiter + item.Description + delimiter + item.Bank + delimiter +
                              item.Amount + delimiter + item.AccountName + delimiter + item.Notes + delimiter +
                              item.Tags);
            }

            return(sb.ToString());
        }
Exemple #3
0
        public static string Create(IEnumerable <PocketBook> pbs, string delimiter = ",")
        {
            if (pbs == null)
            {
                return(null);
            }

            var list = new List <BankStatementLineItem>();

            foreach (var pb in pbs)
            {
                var item = new BankStatementLineItem();
                item.SubCategory = CategoryTypeConverter.ExtractSubCategory(pb.Category);
                item.AccountName = pb.AccountName;
                //item.AccountNumber = pb.AccountNumber;
                item.Description = pb.Description;
                item.Amount      = Convert.ToDouble(pb.Amount);
                item.Tags        = pb.Tags;
                item.Notes       = pb.Tags;
                //  item.TransactionUtcDate =  FromPlace.ToDateTime(pb.Date);
                item.Bank = pb.Bank;

                list.Add(item);
            }

            var sb = new StringBuilder();

            var tmp = new BankStatementLineItem();

            sb.AppendLine(nameof(tmp.SubCategory) + delimiter + nameof(tmp.Description) + delimiter + nameof(tmp.Bank) +
                          delimiter + nameof(tmp.Amount) + delimiter + nameof(tmp.AccountName) + delimiter +
                          nameof(tmp.Notes) +
                          delimiter + nameof(tmp.Tags));

            foreach (var item in list)
            {
                sb.AppendLine(item.SubCategory + delimiter + item.Description + delimiter + item.Bank + delimiter +
                              item.Amount + delimiter + item.AccountName + delimiter + item.Notes + delimiter +
                              item.Tags);
            }

            return(sb.ToString());
        }
Exemple #4
0
        public async Task <string> PredictAsync(PredictionRequest request)
        {
            if (_model == null)
            {
                _model = await PredictionModel.ReadAsync <BankStatementLineItem, PredictedLabel>(
                    PredictionModelWrapper.GetModel());
            }

            var item = new BankStatementLineItem
            {
                Description = request.Description,
                Amount      = request.Amount,
                //AccountNumber = request.AccountNumber,
                //AccountName = request.AccountName,
                Bank = request.Bank
                       //TransactionUtcDate = request.TransactionUtcDate,
                       //Notes = request.Notes,
                       //Tags = request.Tags
            };

            await SemaphoreSlim.WaitAsync();

            PredictedLabel predicted = null;

            try
            {
                predicted = _model.Predict(item);
            }
            catch (Exception ex)
            {
                Log.Warning(ex, "error {err}", request);
                throw;
            }
            finally
            {
                //When the task is ready, release the semaphore. It is vital to ALWAYS release the semaphore when we are ready, or else we will end up with a Semaphore that is forever locked.
                SemaphoreSlim.Release();
            }

            return(predicted.SubCategory);
        }
Exemple #5
0
        public static string Create(IEnumerable <BankStatementLineItem> data, string delimiter = ",")
        {
            if (data == null)
            {
                return(null);
            }
            var sb = new StringBuilder();

            var tmp = new BankStatementLineItem();

            sb.AppendLine(nameof(tmp.SubCategory) + delimiter + nameof(tmp.Description) + delimiter + nameof(tmp.Bank) +
                          delimiter + nameof(tmp.Amount) + delimiter + nameof(tmp.AccountName) + delimiter +
                          nameof(tmp.Notes) +
                          delimiter + nameof(tmp.Tags));

            foreach (var item in data)
            {
                sb.AppendLine(item.SubCategory + delimiter + item.Description + delimiter + item.Bank + delimiter +
                              item.Amount + delimiter + item.AccountName + delimiter + item.Notes + delimiter +
                              item.Tags);
            }

            return(sb.ToString());
        }