private static async Task Verify() { KarmaPredictor predictor = new KarmaPredictor(); if (!predictor.IsModelTrained()) { return; } predictor.LoadModel(); Func <string, string[]> filter = w => Regex.Replace(w, @"[^a-zA-Z]", " ").Trim().ToLowerInvariant().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Where(d => d.Count() < 20).ToArray(); var client = new MongoClient("mongodb://localhost:27017"); var db = client.GetDatabase("active_app_record"); var trainingCollection = db.GetCollection <AppUsageRecord>("daily_records"); var cursor = await trainingCollection.FindAsync(Builders <AppUsageRecord> .Filter.Eq(f => f.Id, AppUsageRecord.GetGeneratedId(DateTime.Now))); var trainingData = await cursor.FirstOrDefaultAsync(); var processInfos = trainingData.ActiveApps.Select(f => f.Value).ToArray(); var predictions = predictor.Predict(processInfos); for (int i = 0; i < processInfos.Length; i++) { Console.WriteLine($"for window title [{processInfos[i].MainWindowTitle}] result: {predictions[i]}"); } }
private static async Task Train() { KarmaPredictor predictor = new KarmaPredictor(); if (predictor.IsModelTrained()) { return; } Func <string, string[]> filter = w => Regex.Replace(w, @"[^a-zA-Z]", " ").Trim().ToLowerInvariant().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Where(d => d.Count() < 20).ToArray(); var client = new MongoClient("mongodb://localhost:27017"); var db = client.GetDatabase("active_app_record"); var trainingCollection = db.GetCollection <ProcessInfoLabeledItem>("training_data"); var cursor = await trainingCollection.FindAsync(Builders <ProcessInfoLabeledItem> .Filter.Empty); var trainingData = await cursor.ToListAsync(); predictor.TrainModel(trainingData); predictor.SaveModel(); Console.WriteLine("Learning completed, save trained model to disk"); }